當前skaffold版本爲v0.4,還未發佈正式版本,不建議在生產環境中使用;
skaffold用於開發人員快速部署程序到Kubernetes中;skaffold提供了dev、run兩種模式;使用skaffold需先編寫skaffold配置文件,該文件爲定義skaffold的工做流;
Skaffold工做流定義了三個主要階段: Build、Push、Deploy;git
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