AKS - pod 배포 시 ErrImagePull/ImagePullBackOff 오류
ACR로 배포한 이미지를 사용하는 컨테이너를 AKS에서 실행 시,
C:\docker_test\azure-voting-app-redis> kubectl apply -f test.yaml
deployment.apps/sample-backend created
deployment.apps/sample-frontend created
서비스가 정상적으로 구동되지 않고 다음과 같은 오류가 발생한다면?
C:\docker_test\azure-voting-app-redis> kubectl get pods
NAME READY STATUS RESTARTS AGE
sample-backend-5b848bb4ff-jwvsl 0/1 ErrImagePull 0 31s
sample-frontend-5567464bc5-2rn9c 0/1 ErrImagePull 0 31s
C:\docker_test\azure-voting-app-redis> kubectl get pods
NAME READY STATUS RESTARTS AGE
sample-backend-5b848bb4ff-jwvsl 0/1 ImagePullBackOff 0 2m21s
sample-frontend-5567464bc5-2rn9c 0/1 ImagePullBackOff 0 2m21s
좀 더 확실한 테스트를 위해 해당 yaml 파일에 담고 있는 서비스 중 하나를 "kubectl run"으로 실행해 봅니다.
C:\docker_test\azure-voting-app-redis> kubectl run test1 --image=ariestest.azurecr.io/oss/bitnami/redis
pod/test1 created
C:\docker_test\azure-voting-app-redis> kubectl get pods
NAME READY STATUS RESTARTS AGE
test1 0/1 ErrImagePull 0 5s
보는 바와 같이 오류가 발생한다면 yaml 파일 내의 image가 등록된 ACR에 대한 접근 거부가 되는 것일 수 있습니다.
...[생략]...
spec:
containers:
- name: sample-backend
image: ariestest.azurecr.io/oss/bitnami/redis
env:
- name: ALLOW_EMPTY_PASSWORD
value: "yes"
ports:
...[생략]...
기본적으로
AKS는 서비스 생성 시점에, 함께 통합될 ACR 주소를 지정할 수 있습니다. 그런데 만약 그 과정을 생략하고 진행했다면 별도로 만들어진 ACR에 대한 권한이 없어 저런 식의 오류가 발생하는 것입니다.
따라서, 이럴 때는 현재 서비스 중인 AKS에 ACR을 명시적으로 연결해야 하는데, 다음의 문서에 이 과정이 잘 나와 있습니다.
Configure ACR integration for existing AKS clusters
; https://docs.microsoft.com/en-us/azure/aks/cluster-container-registry-integration?tabs=azure-cli#configure-acr-integration-for-existing-aks-clusters
az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-name>
[또는,]
az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-resource-id>
따라서 제가 만든 테스트 환경에서는 다음과 같은 식으로 실행할 수 있습니다.
C:\docker_test> az aks update --resource-group TestAKS --name aks-jennifer-demo --attach-acr ariestest
AAD role propagation done[############################################] 100.0000%{
...[생략]...
"windowsProfile": null
}
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]