今日、私のKubernetesクラスター(LAB)はインターネットから切断されました。明らかに私のポッドのどれも起動できないからです(しかし、kubeシステムのポッドには問題ありません)。
Normal Pulling 40m (x4 over 42m) kubelet Pulling image "nginx:latest"
Warning Failed 40m (x4 over 42m) kubelet Error: ErrImagePull
Warning Failed 40m kubelet Failed to pull image "nginx:latest": failed to pull and unpack image "docker.io/library/nginx:latest": failed to resolve reference "docker.io/library/nginx:latest": failed to do request: Head "https://registry-1.docker.io/v2/library/nginx/manifests/latest": dial tcp: lookup registry-1.docker.io on 127.0.0.53:53: read udp 127.0.0.1:46391->127.0.0.53:53: i/o timeout
Warning BackOff 39m (x7 over 41m) kubelet Back-off restarting failed container nginx in pod nginx-deployment-5b9455bc67-j9sh9_default(46e9f74f-8d35-467b-b294-b8c469f95fa6)
Warning Failed 37m kubelet Failed to pull image "nginx:latest": failed to pull and unpack image "docker.io/library/nginx:latest": failed to resolve reference "docker.io/library/nginx:latest": failed to do request: Head "https://registry-1.docker.io/v2/library/nginx/manifests/latest": dial tcp: lookup registry-1.docker.io on 127.0.0.53:53: read udp 127.0.0.1:45430->127.0.0.53:53: i/o timeout
Warning Failed 7m52s (x3 over 18m) kubelet (combined from similar events): Failed to pull image "nginx:latest": failed to pull and unpack image "docker.io/library/nginx:latest": failed to resolve reference "docker.io/library/nginx:latest": failed to do request: Head "https://registry-1.docker.io/v2/library/nginx/manifests/latest": dial tcp: lookup registry-1.docker.io on 127.0.0.53:53: read udp 127.0.0.1:49261->127.0.0.53:53: i/o timeout
Normal BackOff 2m58s (x150 over 42m) kubelet Back-off pulling image "nginx:latest"
クラスタで起動されたすべてのポッドは、まずそのコンテナイメージをローカルレジストリまたはローカルコンテナランタイムにダウンロードし、そこからイメージを使用すると思ったので、これを驚かせました。明らかに私は間違っていた。
質問: kubernetseクラスタがイメージをローカルレジストリにダウンロード/インポートするように強制する方法は?
また、インターネット接続が失われても(ローカル)リポジトリからイメージをエクスポートできます。どうですか? ? ?
sudo ctr -n k8s.io image export --local testimage docker.io/library/nginx@sha256:18090843a20ba39719ca4f389d509063ea4fcce9d16c7168f62404b6d630bc3e
[アップデート/解決策]
私の推測が正しい場合、私が見ることができるすべての画像はsudo ctr -n k8s.io image list
実際にはローカルレジストリにあります。
ポッドの起動を妨げる要素はマニフェストに設定されています。imagePullPolicy: Always
つまり、ポッドが起動するたびに、リモート/ローカルレジストリで最新のイメージを探します。
テスト用に新しいPOD設定を作成し、imagePullPolicy: IfNotPresent
インターネットに接続しているときに機能するポッド/コンテナのイメージ名を指定しました。ポッドが正常に作成されました。
これは次のことを意味します。 imagePullPolicy:IfNotPresent - 実行時にリモート/ネイティブレジストリにアクセスできない場合は、以前(最初の展開)にローカルリポジトリまたはローカルコンテナランタイムにダウンロード/インポートされたイメージを使用します。
kubeシステム配布マニフェストがこのように設定されていることがわかりましたが、これがおそらくインターネットなしで動作する理由です。