このドキュメントは The Kubectl Book の翻訳です。翻訳の GitHub リポジトリはこちら。
- コンテナイメージの名前とタグを上書きまたは設定する
コンテナイメージ
動機
多くのワークロードを横断して使用されるコンテナイメージにはタグやダイジェストを定義すると便利なことがあります。
コンテナイメージのタグおよびダイジェストは、コンテナイメージの特定のバージョンやインスタンスを参照します - たとえば nginx
コンテナイメージにタグ 1.15.9
や 1.14.9
を使うことができます。
- 複数のワークロードで使用するコンテナイメージの名前とタグを一度に更新する
- プロジェクト内で使用されるコンテナイメージのバージョンの可視性を高める
- 環境変数といった外部のソースからイメージのタグを設定する
- 既存のプロジェクトをコピーまたはフォークして、コンテナのためにイメージのタグを変更する
- イメージを保存するレジストリを変更する
プロジェクトのコピーについて詳細はベースとバリエーションを確認してください。
images
kustomization.yaml
の images
フィールドを使うとコンテナイメージのイメージタグを設定できます。images
が指定されると、Apply は name
に名前がマッチするイメージを新しいタグで上書きします。
フィールド | 説明 | フィールドの例 | 結果の例 |
---|---|---|---|
name |
マッチさせたいイメージ名 | name: nginx |
|
newTag |
name に名前がマッチするイメージの tag および digest を上書きする |
newTag: new |
nginx:old -> nginx:new |
newName |
name に名前がマッチするイメージの name を上書きする |
newImage: nginx-special |
nginx:old -> nginx-special:old |
例: deployment.yaml
内のコンテナイメージを更新するために kustomization.yaml
の images
を更新
Apply を実行すると nginx
イメージは 1.8.0
タグをもつように設定され (たとえば nginx:1.8.0
)、イメージ名が nginx-special
に変更されます。name にマッチするすべてのイメージの名前およびタグが設定されます。
入力: kustomization.yaml ファイルと deployment.yaml ファイル
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: nginx # match images with this name
newTag: 1.8.0 # override the tag
newName: nginx-special # override the name
resources:
- deployment.yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
適用: クラスタに適用されるリソース
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
# The image has been changed
- image: nginx-special:1.8.0
name: nginx
名前の設定
イメージ名は newName
と以前のコンテナイメージ名を指定することで設定できます。
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: mycontainerregistry/myimage
newName: differentregistry/myimage
タグの設定
イメージのタグは newTag
とコンテナイメージ名を指定することで設定できます。
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: mycontainerregistry/myimage
newTag: v1
ダイジェストの設定
イメージのダイジェストは digest
とコンテナイメージ名を指定することで設定できます。
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
images:
- name: alpine
digest: sha256:24a0c4b4a4c0eb97a1aabb8e29f18e917d05abfe1b7a7c07857230879ce7d3d3
最新の commit SHA からタグを設定する
よく使われる CI/CD のパターンとして、コンテナイメージにソースコードの git commit SHA でタグ付けするというやり方があります。たとえば、イメージ名が foo
で、commit が 1bb359ccce344ca5d263cd257958ea035c978fd3
であるソースコードでイメージをビルドすると、そのコンテナイメージは foo:1bb359ccce344ca5d263cd257958ea035c978fd3
となります。
ビルドしたイメージをプッシュする単純な方法は、kustomize standalone をダウンロードして、kustomize edit set imagetag
コマンドを実行してタグを更新することです。そうすると手動でイメージタグを更新せずに済みます。
例: 最新の git commit SHA を foo
イメージのイメージタグに設定
kustomize edit set imagetag foo:$(git log -n 1 --pretty=format:"%H")
kubectl apply -f .
タグを環境変数から設定する
commit SHA からタグを設定するのと同じテクニックを使えば、環境変数からタグを設定できます。
例: foo
イメージのタグを環境変数 FOO_IMAGE_TAG
の値で設定
kustomize edit set image foo:$FOO_IMAGE_TAG
kubectl apply -f .
kustomization.yaml
の変更は検査できるように git にコミットすることが可能です。ただし、すでに CI/CD システムによってプッシュされたイメージタグの更新をコミットするとき、その更新によって新たなビルドとデプロイメントがトリガーしないよう気をつけてください。