k8s~helm鏡像版本永遠不要用latest


對於容器編排工具k8s來說,你可以使用它規定的yaml格式的腳本,使用客戶端kubectl來與k8s進行通訊,將你定義好的yaml部署腳本應用到k8s集群上,而這對yaml腳本一般來說都是很像的,就是說,你需要反復的使用同樣結構的代碼,這對於開發人員來說不是一個好的信號,所以helm出現了,它是一種模板化的部署工具,你定義好模板之后,把變量的對象放在values.yaml里就可以了。

引起的問題

在使用helm進行部署時出現了一個問題,使用鏡像時習慣的使用了latest這個版本,也就是最新版本,在使用helm進行部署時,對於相同版本號的鏡像來說,它對於的pod居然沒有從新編排,這個問題直接影響了整個部署的方式,在jenkins項目部署之后,還需要手動進行pod的部署,這顯然是不能接受的,最后在helm里打算使用docker具體的鏡像版本號。

使用步驟

  1. jenkins從gitlab上拉取項目源代碼
  2. 編譯項目,測試項目
  3. 打包項目成為鏡像,鏡像版本使用jenkins的TagId,它是當前任務的版本,我們可以直接用
  4. 上傳鏡像到私有倉庫harbor里
  5. 拉取Helm Chart倉庫代碼,這個倉庫里存儲所有服務需要的Charts信息
  6. 使用sed命令將當前TagId寫入Charts到values.yaml文件的對應服務鏡像版本的位置,使用了yaml的錨點和引用功能
  7. 使用helm package打包你的服務
  8. 使用helm upgrade升級你的現有服務
  9. 將charts倉庫的變化保存,然后提交到gitlab里
  10. 整個部署過程完畢!

sed命令小技巧

使用sed命令可以在文檔中查找某些字符,並且在這些字符所在行的下一行去插入新的內容

sh """
  sed -i "/${config.imageName}-imageTag/{n;d}"  ${WORKSPACE}/charts/${config.namespace}/values.yaml        
  sed -i "/${config.imageName}-imageTag/a \\ imageTag: $config.tagId"   ${WORKSPACE}/charts/${config.namespace}/values.yaml
"""

上面代碼中,我們對values.yaml里的某個服務名后綴是-imageTag的內容的下一行進行刪除;並且在它的下一行插入新的內容imageTag:版本號;這一行請注意,我們使用了兩個\,它是一個轉義付符號,它會在imageTag前面插入一些空格。

yaml里的錨點和引用

你可以為values.yaml里添加一個引用片斷,然后在values.yaml其它位置使用它們,即它類似於先定義一些內容,然后在一些位置插入它們。

hello-world-imageTag: &helloworldImageTagId
  imageTag: 1
appList:
- name: hello-world
  port: 9001
  hasVM: true
  <<: *helloworldImageTagId

上面的代碼,在hasVM這行下面,就里引用我們的imageTag: 1這行的內容,而helloworldImageTagId是我們定義的別名,在引用的位置需要使用這個別名。

這篇文章對於正在使用jenkins,k8s部署你的微服務的同事來說,是非常不錯的文章!


免責聲明!

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



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