広告

kubernetes – imagePullPolicy

infrastructure as code

imagePullPolicy

containerがイメージをpullする時の挙動を定義します。

  • imagePullPolicy: IfNotPresent: ローカルでイメージが見つからない場合にのみイメージをpullします。
    • ローカルというのはマスターノードのローカルです。
    • イメージのタグが:lastestではない場合、デフォルト値がimagePullPolicy: IfNotPresent
  • imagePullPolicy: Always: Podの起動時に常にイメージをpullします。
    • 毎回レポジトリからイメージをダウンロードするため、イメージが大きい場合、Podの起動が遅くなります。
    • イメージのタグが:lastestの場合、デフォルト値がimagePullPolicy: Always
      • タグが省略した場合、lastestと認識されます。
  • imagePullPolicy: Never: 常にローカルでイメージを探そうとします。ない場合にもイメージはpullしません。

設定例

manifestのリソース指定:
spec.containers[].imagePullPolicy

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    imagePullPolicy: Always  # myapp-containerコンテナは、Alwaysに設定する
    command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']

よくある話

kubernetsを初めて触るエンジニアは、よく以下の問題で戸惑ってしまうことがあります。

イメージを上書き更新して、Pod再作成したのに、なんで更新が反映されないでしょうか。

これは、Kubernetesのイメージ キャッシュの仕様による現象となります。

現象の原因

  • マスターノードはイメージキャッシュ機能を持っている(イメージをマスターノードのローカルにダウンロードされる)
  • 同じ<イメージ名>:<タグ>の場合、以前ダウンロードしたイメージをキャッシュとして使用される

解決策

  • manifestファイルにspec.template.spec.containers[].imagePullPolicy: Alwaysの設定を追
    • これで毎回イメージをダウンロードするようになる
    • デメリット:毎回ダウンロードするので、オーバーヘッドが発生します。(podの起動が遅くなる)
  • イメージのタグを更新するたびに変更する
    • バージョンの意味でも、こちらの方がお勧め

※ 他に解決策をご存じの方は、コメント欄にヒントをいただけたら幸いです。

コメント

  1. Art より:

    純サッポト。

タイトルとURLをコピーしました