説明
image_pull_policy = "IfNotPresent" は、ノードにキャッシュされたイメージを使用できます。可変タグを再利用すると、ノードごとのキャッシュによって異なる内容が実行される場合があります。
Always はコンテナーの起動時にレジストリでダイジェストを確認し、一致するキャッシュがあれば再利用します。実行中のコンテナーを自動更新したり、毎回すべてのレイヤーを再取得したりする設定ではありません。
想定される影響
- 可変タグとキャッシュによりデプロイ内容が異なったり、セキュリティ更新の反映が遅れたりする場合があります。
- レジストリへのアクセスが必要なポリシーでは、障害や認証の問題で起動に失敗する場合があります。
対処方法
- 起動時にタグを確認する必要がある場合は
image_pull_policy = "Always"を使ってください。検証済みダイジェストを固定している場合は IfNotPresent も適切な選択肢です。 - イメージの提供元と脆弱性を確認し、ダイジェスト、セキュリティ更新、再デプロイ手順を管理してください。実際の取得ポリシーとレジストリへのアクセス権限も確認してください。
例
既存の busybox 参照はタグを省略しているため latest を使います。二つの例は取得ポリシーだけを比較し、イメージの内容は固定しません。保守されている検証済みイメージと必要な認証情報を用意してください。
変更前
hcl
resource "kubernetes_pod" "busybox" {
metadata {
name = "busybox-tf"
}
spec {
container {
image = "busybox"
command = ["sleep", "3600"]
name = "busybox"
image_pull_policy = "IfNotPresent"
}
restart_policy = "Always"
}
}
変更後
hcl
resource "kubernetes_pod" "busybox" {
metadata {
name = "busybox-tf"
}
spec {
container {
image = "busybox"
command = ["sleep", "3600"]
name = "busybox"
image_pull_policy = "Always"
}
restart_policy = "Always"
}
}
補足:
- 変更前: キャッシュされた busybox イメージを再利用できます。
- 変更後: コンテナーの起動時にレジストリでダイジェストを確認します。一致するキャッシュレイヤーは再利用できます。