kubernetesクラスタにローカルレジストリを使用するように強制する方法は?

kubernetesクラスタにローカルレジストリを使用するように強制する方法は?

今日、私の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システム配布マニフェストがこのように設定されていることがわかりましたが、これがおそらくインターネットなしで動作する理由です。

ベストアンサー1

おすすめ記事