-
쿠버네티스 Docker Hub-Private Image 가져오는 방법
Private Image를 가져와야 할 때 쿠버네티스의 secret을 이용하면 됩니다. 이 글에서는 Docker Hub을 기준으로 작성 합니다. 우선 Private Image 가져오는 방법인 만큼 아래와 같이 이미 Docker Hub에 이미지가 등록되어 있다는 가정하에 진행 합니다.
-
쿠버네티스 매니페스트 파일 작성
저는 아래와 같이 간단한 Deployment를 설정해주는 매니페스트 파일(.yaml)을 작성 하였습니다.
Private Image를 가져와서 사용할 매니페스트 파일을 vi편집기로 여신 후 spec.template.spec.ImagePullSecrets.name 필드에 임의의 값을 설정 해줍니다. 이 값은 이후 생성할 secret name 이므로 참고하여 작성해주시면 됩니다. 또한 image 명도 재대로 입력 해주셔야 합니다.
* 매니페스트 파일에 필요한 필드만 작성 후 아직 apply는 하지 말아주세요.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nirsa/nginx ## docker hub 이미지 지정
ports:
- containerPort: 80
imagePullSecrets: ## 참조할 secret name
- name: dockersecret
- spec.template.spec.containers.image → Docker Hub에 등록된 이미지의 이름을 등록 합니다. 일반적으로 [DockerHub사용자명]/[이미지이름] 의 형태를 가지며 뒤에 버전이 추가될 수 있습니다. 이미지명을 모른다면 docker hub 홈페이지에 접속하여 로그인 후 확인하시면 됩니다.
- spec.template.spec.ImagePullSecrets.name → 어떤 name을 가진 secret을 참조할 지 설정하는 부분 입니다. 이후 커맨드를 통해 생성할 name을 지정하게 되는데, 우선 저는 dockersecret으로 설정 하였습니다.
-
쿠버네티스 secret 생성
쿠버네티스의 마스터 노드에서 아래와 같이 명령어를 입력 해줍니다. []으로 묶어준 부분들은 모두 상황에 따라 작성 해주셔야 하는 부분 입니다. 아래 내용을 참고하여 커맨드 작성 후 엔터를 치시면 secret이 생성된걸 확인할 수 있습니다.
- [secret name] 은 위에서 작성했던 매니페스트 파일에 기입한 name을 작성해주셔야 합니다. (~ImagePullSecrets.name 부분에 작성한 내용으로, 저같은 경우 dockersecret 이 됩니다.)
- Docker Hub 계정과 패스워드는 실제로 Private Image가 등록되어 있는 Docker Hub의 계정과 패스워드를 작성해주어야 합니다.
kubectl create secret docker-registry [secret name] --docker-username="[Docker Hub 계정]" \
--docker-password="[Docker Hub 패스워드]" --docker-server=https://index.docker.io/v1/
-
Private Image 파일을 잘 가져오는지 확인
이제 Docker Hub의 Private Image 파일을 가져올 준비는 모두 되었으니, 작성해두었던 매니페스트 파일을 apply 하여 실제로 잘 가져오는지 확인만 하면 됩니다.
kubectl describe [pod name] | grep Image 명령어를 통해 정상적으로 원하는 이미지 파일을 가져 왔는지도 볼 수 있습니다.
-
ImagePullBackOff 발생 시
만약 매니페스트 파일에 작성한 spec.template.spec.ImagePullSecrets.name 필드에 작성한 secret name이 다르다면 정상적으로 이미지 파일을 가져올 수 없습니다. 또는 secret에 등록한 docker hub 계정 정보가 달라 docker hub에 접근할 수 없어 이미지를 못가져와서 발생할수도 있습니다.
- 매니페스트 파일에 작성한 secret name과 생성한 secret name이 같은지 다시 한번 확인 해보세요. (secret name은 kubectl get secret 으로 확인할 수 있습니다. 만약 없다면 생성되지 않은것입니다)
- secret을 생성할때 등록한 docker hub의 계정 정보가 맞는지 확인 해보세요.
아래 예시는 secret name이 dockersecret으로 되어 있지만, 매니페스트 파일에는 dockersecret2로 저장하였고 그 후 apply 할 때 secret을 참조할 수 없어 이미지를 못가져오고 ImagePullBackOff가 발생합니다.
'Container > Kubernetes' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 RBAC-클러스터롤바인딩(clusterrolebinding) 개념 및 설정 (1) | 2020.03.05 |
---|---|
[Kubernetes] 쿠버네티스 RBAC-롤바인딩(rolebinding) 개념 및 설정 (1) | 2020.03.05 |
[Kubernetes] 쿠버네티스 크론잡(cronjob) 개념 (2) | 2020.02.21 |
[Kubernetes] 쿠버네티스 잡(job) 개념 (0) | 2020.02.21 |
[Kubernetes] 쿠버네티스 데몬셋(Daemonset) 개념 (생성, 확인, 실행중인 파드의 노드 확인, 업데이트) (1) | 2020.02.18 |