持續集成之應用k8s自動部署


持續集成之應用k8s自動部署

Intro

上次我們提到了docker容器化及自動化部署,這僅僅適合個人項目或者開發環境部署,如果要部署到生產環境,必然就需要考慮很多因素,比如訪問量大了如何調整部署,如何更好的應對大並發的情況,如何不停機更新應用,如果想要將Docker應用於具體的業務實現,是存在困難的——編排、管理和調度等各個方面,都不容易。於是,人們迫切需要一套管理系統,對Docker及容器進行更高級更靈活的管理,於是 k8s 就出現了。

K8S,就是基於容器的集群管理平台,它的全稱,是kubernetes。

k8s 十分強大,可以幫助我們很方便的實現應用的伸縮,也可以很輕易的實現不停機更新,更好更方便的實現服務高可用,還有很多很實用的功能,例如服務發現/負載均衡/配置中心等,更多 k8s 的介紹請參考https://www.kubernetes.org.cn/docs

k8s 自動部署介紹

這里只是我自己的一些實踐,不一定是最合適的,僅供參考。

自動部署流程:

  1. 自己在 k8s 集群上手動創建 deployment 和 service
  2. CI 自動構建新的 docker 鏡像
  3. CI 推送新的 docker 鏡像到 docker hub 或者自己的 docker registry
  4. 更新 k8s 應用對應的 deployment 的鏡像

示例應用

這里有一個 示例應用

  1. 在部署了 k8s 集群環境的服務器上部署應用

    wget https://raw.githubusercontent.com/WeihanLi/AccountingApp/dev/accountingapp-k8s-deployment.yaml
    kubectl apply -f accountingapp-k8s-deployment.yaml
    
  2. 配置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)
    
  3. 提交代碼觸發CI

    docker build -f Dockerfile -t weihanli/accountingapp:20190407.3 .
    # 此處省略N行代碼...
    deployment.extensions/accountingapp-deployment image updated
    
  4. 查看效果

查看 pod 信息,執行 kubectl get pod 獲取 pod 信息,再使用 kubectl describe pod <podName> 獲取pod的信息確認是否已經成功更新鏡像

deployment-pod

Memo

希望對你有幫助,作者水平有限,如有疏漏或者錯誤,還望指出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM