如何向K8s,Docker-Compose注入鏡像Tag

最近在做基於容器的CI/CD, 一個樸素的自動部署的思路是:

  • 從Git Repo打出git tag,作爲鏡像Tag
  • ssh遠程登錄到部署機器
  • 向部署環境注入鏡像Tag,拉取鏡像,重新部署

下面分享我是如何在K8s、docker-compose中注入鏡像TAG(持續部署)?

k8s

熟悉k8s的同學知道, K8s有一個強大的原生配置管理工具:Kustomize工具。

Kustomize 以一種無模板的方式來定製應用程序配置,從而簡化了現有應用程序的使用。現在kustomize已經以apply -k的方式內置進kubectl。

這裏可以利用Kustomize的edit命令修改定義在Kustomization.yaml中的鏡像TAG:

下面是一個簡單的Kustomization.yaml文件:

kind: Kustomization
namespace: wd
resources:
- ../base
images:
- name: hub.docker.com/eap/website  //原鏡像名
  newName: hub.docker.com/eap/website
  newTag: v1.0.7-hotfix5     // 持續被修改的Tag

做自動部署時,一般由CI給部署腳本導入此次Git Tag,作爲鏡像Tag。

#!/bin/sh
cd /home/wd-deploy/localdeploy/wd/overlays/  
kustomize edit set image  hub.docker.com/eap/website=hub.docker.com/eap/website:${TAG}
kustomize build . | kubectl apply -f -

以上部署腳本: 進入Kustomization.yaml目錄,向Kustomization.yaml文件注入新的鏡像Tag,構建並應用新的配置。

docker-compose

Docker平臺就沒有那麼好的工具,可明文讓你修改鏡像配置。

我們可採用shell腳本來曲線修改鏡像配置:

假如你有一個簡單的docker-compose.yml文件:

version: '3'

services:
    app:
        image: username/app:d7s8f12
        ports:
            - 80:80

通過shell腳本修改字符串app:後面的鏡像Tag,達到注入Tag的目的
sed -E -i'' "s/(.*app:).*/\1$COMMIT/" 'docker-compose.yml'

同樣,在做自動部署時,由CI給以上腳本導入此次Git Tag,作爲鏡像Tag。

#!/bin/sh

cd  /home/wd-deploy/app/
sed -E -i'' "s/(.*app:).*/\1$COMMIT/" 'docker-compose.yml'
docker-compose pull app && docker-compose  up -d

以上部署腳本: 進入docker-compose.yml目錄,向Compose文件注入新的鏡像Tag,拉取鏡像並應用新的配置。

結束語

本文記錄了向K8s, Docker-Compose平臺注入鏡像Tag的方式, 爲啥要專題講這個呢? 因爲注入Tag是自動部署的必經過程。

本文只是一個粗淺的、樸素的注入思路(Devops生態有許多組件可以完成該項動作), 也歡迎大家多多留言,帶我上路。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章