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