持續集成之應用k8s自動部署 Intro 上次我們提到了 "docker容器化及自動化部署" ,這僅僅適合個人項目或者開發環境部署,如果要部署到生產環境,必然就需要考慮很多因素,比如訪問量大瞭如何調整部署,如何更好的應對大併發的情況,如何不停機更新應用,如果想要將Docker應用於具體的業務實現,是 ...
持續集成之應用k8s自動部署
Intro
上次我們提到了docker容器化及自動化部署,這僅僅適合個人項目或者開發環境部署,如果要部署到生產環境,必然就需要考慮很多因素,比如訪問量大瞭如何調整部署,如何更好的應對大併發的情況,如何不停機更新應用,如果想要將Docker應用於具體的業務實現,是存在困難的——編排、管理和調度等各個方面,都不容易。於是,人們迫切需要一套管理系統,對Docker及容器進行更高級更靈活的管理,於是 k8s 就出現了。
K8S,就是基於容器的集群管理平臺,它的全稱,是kubernetes。
k8s 十分強大,可以幫助我們很方便的實現應用的伸縮,也可以很輕易的實現不停機更新,更好更方便的實現服務高可用,還有很多很實用的功能,例如服務發現/負載均衡/配置中心等,更多 k8s 的介紹請參考https://www.kubernetes.org.cn/docs。
k8s 自動部署介紹
這裡只是我自己的一些實踐,不一定是最合適的,僅供參考。
自動部署流程:
- 自己在 k8s 集群上手動創建 deployment 和 service
- CI 自動構建新的 docker 鏡像
- CI 推送新的 docker 鏡像到 docker hub 或者自己的 docker registry
- 更新 k8s 應用對應的 deployment 的鏡像
示例應用
這裡有一個 示例應用
在部署了 k8s 集群環境的伺服器上部署應用
wget https://raw.githubusercontent.com/WeihanLi/AccountingApp/dev/accountingapp-k8s-deployment.yaml kubectl apply -f accountingapp-k8s-deployment.yaml
配置CI,這裡以 Azure Pipeline 為例
Azure pipeline 示例配置:
pool: vmImage: 'Ubuntu 16.04' variables: tagName: '$(Build.BuildNumber)' imageName: '$(dockerId)/accountingapp:$(tagName)' steps: - script: docker build -f Dockerfile -t $(imageName) . displayName: 'Docker build Script' - script: | docker login -u $(dockerId) -p $(pswd) docker push $(imageName) displayName: 'Push docker image' - task: SSH@0 displayName: 'Run shell inline on remote machine' inputs: sshEndpoint: 'weihanli-vm' runOptions: inline inline: | kubectl set image deployment/accountingapp-deployment accountingapp=$(imageName)
提交代碼觸發CI
docker build -f Dockerfile -t weihanli/accountingapp:20190407.3 . # 此處省略N行代碼... deployment.extensions/accountingapp-deployment image updated
查看效果
訪問 示例應用,刷新幾次可以看到類似效果。
查看 pod 信息,執行 kubectl get pod
獲取 pod 信息,再使用 kubectl describe pod <podName>
獲取pod的信息確認是否已經成功更新鏡像
Memo
希望對你有幫助,作者水平有限,如有疏漏或者錯誤,還望指出。