반응형
Kubernetes 가 v1.24버전 이후로는 docker에 대한 지원을 안하고 containerd로 서비스를 하게된다. 현업에서 v1.28버전을 사용중이서 여러가지 서비스를 돌려보는 와중에 private registry에 들어있는 image가 pull이 안되어 문제를 해결하려고 한다.
k8s상황과 에러구문은 다음과 나타난다.
# k8s status
(pytorch) ubuntu@vm:~$ kubectl get pods
# NAME READY STATUS RESTARTS AGE
# jaeyung-668c67cd6b-g97w2 0/1 ImagePullBackOff 0 5s
(pytorch) ubuntu@vm:~$ kubectl describe pod jaeyung-668c67cd6b-c6mjm
#Events:
# Type Reason Age From Message
# ---- ------ ---- ---- -------
# Normal Scheduled 31s default-scheduler Successfully assigned maf-service/jaeyung-668c67cd6b-c6mjm to moreh-k8s-worker-vm01
# Normal Pulling 15s (x2 over 31s) kubelet Pulling image "IMAGE_NAME"
# Warning Failed 15s (x2 over 31s) kubelet Failed to pull image "IMAGE_NAME": failed to pull and unpack image "IMAGE_NAME":
# failed to resolve reference "IMAGE_NAME": failed to do request: Head "IMAGE_NAME":
# http: server gave HTTP response to HTTPS client
# Warning Failed 15s (x2 over 31s) kubelet Error: ErrImagePull
# Normal BackOff 1s (x3 over 30s) kubelet Back-off pulling image "IMAGE_NAME"
# Warning Failed 1s (x3 over 30s) kubelet Error: ImagePullBackOff
위와같은 현상이 나타나면 아래와같이 containerd에 대한 설정이 필요하다. 참고로 아래 설정은 모든 k8s노드에 대해서 설정이 필요하다.
# containerd default config 세팅 진행
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
그리고 config.toml파일에서 아래와같은 부분에서 수정이 필요하다.
- PRIVATE_REGISTRY_URL은 자기가 생성한 private registry url를 입력해주면된다
...
[plugins."io.containerd.grpc.v1.cri".registry.auths]
[plugins."io.containerd.grpc.v1.cri".registry.configs]
[plugins."io.containerd.grpc.v1.cri".registry.configs."PRIVATE_REGISTRY_URL".auth]
username = "admin"
password = "admin"
[plugins."io.containerd.grpc.v1.cri".registry.configs."PRIVATE_REGISTRY_URL".tls]
insecure_skip_verify = true
[plugins."io.containerd.grpc.v1.cri".registry.headers]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.crt".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."PRIVATE_REGISTRY_URL"]
endpoint = ["http://PRIVATE_REGISTRY_URL"]
...
마지막으로 containerd 서비스를 재시작 해주면 된다.
sudo systemctl restart containerd
반응형
'Develop > DevOps' 카테고리의 다른 글
CoreDNS 관련 정리 (0) | 2024.03.02 |
---|---|
[FastAPI] 인증 정보 추가하기 (1) | 2024.02.13 |
[K8S] containerd runtime사용 Error while dialing dial unix /var/run/dockershim.sock 에러 해결 (0) | 2023.09.08 |
[k8s] deployment 생성중 만난 문제 (0) | 2023.08.01 |
[Grafana] docker로 띄워진 grafana 데이터 백업 (0) | 2023.01.25 |