使用Skaffold一鍵將項目發布到Kubernetes
當前skaffold版本為v0.4,還未發布正式版本,不建議在生產環境中使用;
skaffold用於開發人員快速部署程序到Kubernetes中;skaffold提供了dev、run兩種模式;使用skaffold需先編寫skaffold配置文件,該文件為定義skaffold的工作流;
Skaffold工作流定義了三個主要階段:Build、Push、Deploy;
一、Build
在構建階段,Skaffold通過Dockerfile使用源碼生成Artifacts,Skaffold中目前Docker鏡像、bazel這兩種Artifacts,這裡使用的是Docker鏡像所以也可以成稱為Docker鏡像,該鏡像用於應用程序的運行,Build階段的輸出就是Artifacts;
二、Push
在推送階段,Skaffold將把構建階段生成的Docker鏡像推送到Docker鏡像倉庫中,並使用所配置的鏡像名稱;在運行Skaffold時需確保鏡像能夠推送到鏡像倉庫中;
但如果使用的是Minikube或 Docker for Desktop本地Kubernetes集群時默認是不推送到鏡像倉庫的,跳過推送階段,因為本地已經存在了該鏡像所以是可以正常運行的;
三、Deploy
部署階段,將最新的Docker鏡像部署到k8s中,該階段可以使用不同的部署工具如kubectl或helm,每個工具都有不一樣的參數用於定義如何安裝與更新應用程序;
概念介紹
Artifacts
在Build階段通過運行一系列步驟來創建Artifacts,在Skaffold中Artifacts分為bazel與Docker鏡像,可以定義Skaffold生成多個Docker鏡像,Skaffold在開發模式運行時,Skaffold只會重新生成源碼已經更改的Docker鏡像,通過在Skaffold配置中指定Dockerfile來生成Docker鏡像,並指定其名稱;
標籤策略
標籤策略在Build階段進行配置,用於配置Skaffold在推送Docker鏡像時如果對鏡像進行打標籤,目前Skaffold支持三種標籤策略:sha256標籤生成器、git標籤生成器、自定義標籤生成器策略;
在開發過程中,推薦使用基於內容的標籤策略sha256,方便在源代碼變更時Skaffold會使Kubernetes重新部署新Docker鏡像;
運行模式
Skaffold有dev、run兩種運行模式,也就是開發模式與發布模式,在dev模式下Skaffold會監控項目的源碼隨著代碼的變更會實時的重新生產鏡像並將變更更新部署到Kubernetes中;還可在CI/CD管道中運行Skaffold;
dev模式默認使用sha256標籤生成器
run模式默認使用git標籤生成器
所以注意如果使用run模式又沒配置git則Skaffold是無法跑下去的,需配置標籤策略(TagPolicy),或配置git即可;
使用流程:
開發環境使用skaffold部署項目到遠程k8s中;
1、下載skaffold
https://github.com/GoogleCloudPlatform/skaffold/releases/download/v0.4.0/skaffold-windows-amd64.exe
2、下載kubectl、服務端開放Docker遠程連接
在服務端Docker配置中加上: -H tcp://0.0.0.0:2375
在開發端在創建C:Usersxin.dockerconfig.json文件,內容如下:
3、開發端kubectl 配置
創建C:Usersxin.kubeconfig.json文件,配置k8s的連接與密鑰,文件內容如下:
4、服務端kubectl使用開啟代理
kubectl proxy –address 0.0.0.0 –accept-hosts 『.*』
5、環境變數配置
需要在環境變數中配置Docker的鏈接信息:
下載Demo並使用Skaffold將其部署到Kubernetes中;
git clone https://github.com/GoogleCloudPlatform/skaffold
cd examples/getting-started
運行:skaffold dev
可以看到由於使用的是Minikube所以只有Build、Deploy兩個階段跳過了Push階段,與我們上面的說法是一致的;
修改main.go的內容即可看到Skaffold檢測到了變化,並重新把項目更新到Kubernetes中;
常見異常信息:
不存在.dockerconfog.json文件,在用戶目錄下添加上即可;
未配置Docker環境變數,加上DOCKER_HOST、DOCKER_TLS_VERIFY環境變數即可;
本文使用的環境為:minikube、skaffold v0.4、windows
參考資料: https://github.com/GoogleCloudPlatform/skaffold/blob/master/docs/concepts.md
TAG:碼農Linx |