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の起動が遅くなる)
- イメージのタグを更新するたびに変更する
- バージョンの意味でも、こちらの方がお勧め
※ 他に解決策をご存じの方は、コメント欄にヒントをいただけたら幸いです。
コメント
純サッポト。
nice support!