오늘 내 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 시스템 배포 매니페스트가 이와 같이 설정되어 있다는 것을 알았는데, 이것이 아마도 인터넷 없이도 작동하는 이유일 것입니다.