본문 바로가기

Data/MLOps

[K8S] containerd private registry 접근하기

반응형

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
반응형