翻訳

このドキュメントは The Kubectl Book の翻訳です。翻訳の GitHub リポジトリはこちら

TL;DR
  • コンテナイメージの名前とタグを上書きまたは設定する

コンテナイメージ

動機

多くのワークロードを横断して使用されるコンテナイメージにはタグやダイジェストを定義すると便利なことがあります。

コンテナイメージのタグおよびダイジェストは、コンテナイメージの特定のバージョンやインスタンスを参照します - たとえば nginx コンテナイメージにタグ 1.15.91.14.9 を使うことができます。

  • 複数のワークロードで使用するコンテナイメージの名前とタグを一度に更新する
  • プロジェクト内で使用されるコンテナイメージのバージョンの可視性を高める
  • 環境変数といった外部のソースからイメージのタグを設定する
  • 既存のプロジェクトをコピーまたはフォークして、コンテナのためにイメージのタグを変更する
  • イメージを保存するレジストリを変更する

プロジェクトのコピーについて詳細はベースとバリエーションを確認してください。

Reference

images

kustomization.yamlimages フィールドを使うとコンテナイメージのイメージタグを設定できます。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.yamlimages を更新

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

results matching ""

    No results matching ""