このドキュメントは 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 システムによってプッシュされたイメージタグの更新をコミットするとき、その更新によって新たなビルドとデプロイメントがトリガーしないよう気をつけてください。