使用Skaffold一键将项目发布到Kubernetes

当前skaffold版本为v0.4,还未发布正式版本,不建议在生产环境中使用;
  skaffold用于开发人员快速部署程序到Kubernetes中;skaffold提供了dev、run两种模式;使用skaffold需先编写skaffold配置文件,该文件为定义skaffold的工做流;
  Skaffold工做流定义了三个主要阶段Build、Push、Deploygit

1、Build
  在构建阶段,Skaffold经过Dockerfile使用源码生成Artifacts,Skaffold中目前Docker镜像、bazel这两种Artifacts,这里使用的是Docker镜像因此也能够成称为Docker镜像,该镜像用于应用程序的运行,Build阶段的输出就是Artifacts;
2、Push
  在推送阶段,Skaffold将把构建阶段生成的Docker镜像推送到Docker镜像仓库中,并使用所配置的镜像名称;在运行Skaffold时需确保镜像可以推送到镜像仓库中;
  但若是使用的是Minikube或 Docker for Desktop本地Kubernetes集群时默认是不推送到镜像仓库的,跳过推送阶段,由于本地已经存在了该镜像因此是能够正常运行的;
3、Deploy
  部署阶段,将最新的Docker镜像部署到k8s中,该阶段可使用不一样的部署工具如kubectl或helm,每一个工具都有不同的参数用于定义如何安装与更新应用程序;github

概念介绍

Artifacts
  在Build阶段经过运行一系列步骤来建立Artifacts,在Skaffold中Artifacts分为bazel与Docker镜像,能够定义Skaffold生成多个Docker镜像,Skaffold在开发模式运行时,Skaffold只会从新生成源码已经更改的Docker镜像,经过在Skaffold配置中指定Dockerfile来生成Docker镜像,并指定其名称;docker

标签策略
  标签策略在Build阶段进行配置,用于配置Skaffold在推送Docker镜像时若是对镜像进行打标签,目前Skaffold支持三种标签策略:sha256标签生成器、git标签生成器、自定义标签生成器策略
  在开发过程当中,推荐使用基于内容的标签策略sha256,方便在源代码变动时Skaffold会使Kubernetes从新部署新Docker镜像;json

运行模式

  Skaffold有dev、run两种运行模式,也就是开发模式与发布模式,在dev模式下Skaffold会监控项目的源码随着代码的变动会实时的从新生产镜像并将变动更新部署到Kubernetes中;还可在CI/CD管道中运行Skaffold;windows

  dev模式默认使用sha256标签生成器
  run模式默认使用git标签生成器api

  因此注意若是使用run模式又没配置git则Skaffold是没法跑下去的,需配置标签策略(TagPolicy),或配置git便可;tcp

使用流程:

  开发环境使用skaffold部署项目到远程k8s中;
  一、下载skaffold
https://github.com/GoogleCloudPlatform/skaffold/releases/download/v0.4.0/skaffold-windows-amd64.exe
  二、下载kubectl、服务端开放Docker远程链接
在服务端Docker配置中加上: -H tcp://0.0.0.0:2375
  在开发端在建立C:\Users\xin.docker\config.json文件,内容以下:工具

{
    "auths" : {
    }
 }

  三、开发端kubectl 配置
  建立C:\Users\xin.kube\config.json文件,配置k8s的链接与密钥,文件内容以下:ui

apiVersion: v1
 clusters:
 - cluster:
     server: http://182.61.xx.xxx:8001
   name: minikube
 contexts:
 - context:
     cluster: minikube
     user: minikube
   name: minikube
 current-context: minikube
 kind: Config
 preferences: {}
 users:
 - name: minikube
   user:
 as-user-extra: {}

  四、服务端kubectl使用开启代理
  kubectl proxy --address 0.0.0.0 --accept-hosts '.*'
  五、环境变量配置
  须要在环境变量中配置Docker的连接信息:代理

DOCKER_HOST = tcp://xxx.xxx.xxx.xxx:2375
 DOCKER_TLS_VERIFY = 0

  下载Demo并使用Skaffold将其部署到Kubernetes中;

  git clone https://github.com/GoogleCloudPlatform/skaffold
  cd examples/getting-started

运行:skaffold dev


  能够看到因为使用的是Minikube因此只有Build、Deploy两个阶段跳过了Push阶段,与咱们上面的说法是一致的;
修改main.go的内容便可看到Skaffold检测到了变化,并从新把项目更新到Kubernetes中;


  常见异常信息:

WARN[0005] run: build: build step: running build: read auth configs: docker config: opening docker config: 
 open C:\Users\xin\.docker\config.json: no such file or directory

不存在.docker\confog.json文件,在用户目录下添加上便可;

open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on 
 Windows, the docker client must be run elevated to connect. This error may also indicate that the docker 
 daemon is not running.

  未配置Docker环境变量,加上DOCKER_HOST、DOCKER_TLS_VERIFY环境变量便可;

本文使用的环境为:minikube、skaffold v0.四、windows

文章首发地址:Solinx
http://www.solinx.co/archives/1163

参考资料: https://github.com/GoogleCloudPlatform/skaffold/blob/master/docs/concepts.md

相关文章
相关标签/搜索