접근
쿠버네티스의 POD리소스를 생성 시 우리는 Pod를 구성하는 컨테이너의 이미지를 명시한다. 해당 이미지는 Pod가 실행되는 워커노드에 존재해야 한다. 만약 Pod를 실행하려는 워커 노드에 해당 이미지가 없다면 어떻게 그것을 받아와서 실행할 지 알아본다. 간단한 접근은 다음과 같다.
POD
를 실행하려는 워커노드는 해당POD
를 구성하는 컨테이너 이미지를 가지고 있어야한다.POD
를 명세하는YAML
파일에 이미지의 풀(pull) 관련된 방식을 적는다.
imagePullPolicy
간단하게 nginx
이미지를 사용하는 Pod를 만든다고 가정하자. 그리고 이 pod를 생성하는 yaml
파일이 있다면 다음과 같은 형상일 것이다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
해당 yaml 파일에 이미지 풀 정책을 명시해줘야하는데 일단 관련된 이미지 풀 정책은 키(key)로 imagePullPolicy
로 쓴다. 밸류(value)는 다음의 3가지가 있다.
IfNotPresent
이미지가 해당 노드에 존재하지 않는다면 연결된 레지스트리에서 내려 받는다.
Always
Pod가 해당 컨테이너를 실행할 때마다 이미지의 버전 일치여부를 판단하고 다를 경우에 이미지를 내려받는다. 레지스트리의 이미지와 현재 노드가 가지고 있는 이미지가 동일하다면 새롭게 내려받지는 않는다.
Never
노드가 이미지를 이미 가지고있다면 Pod를 실행하지만 현재 이미지를 가지고 있지 않다면 컨테이너를 실행하지 않는다.
위와 같은 키와 밸류를 명시 한다면 형상은 다음과 같은 yaml 파일을 구성한다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
imagePullPolicy: Always
imagePullPolicy
를 명시하지 않을 때
항상 사용자가 헷갈리지 않도록 사용할 수 있는 옵션들을 명시하면 좋다. 너무나 능숙해서 해당 옵션같은 것들을 않은 상황일 때 이미지를 받아올 때의 내부적인 정책에 대해서 알아본다.
-
전제:
imagePullPolicy
필드를 생략함 - 이미지의 태그가
:latest
인 경우, 이미지 풀 정책은Always
- 이미지의 태그를 적지 않은 경우, 이미지 풀 정책은
Always
- 이미지의 태그가
:latest
가 아닌 경우, 이미지 풀 정책은IfNotPresent
로 설정된다.
ImagePullBackOff
쿠버네티스 리소스 생성 시 해당 에러가 발생했다면 주로 리소스 안에 포함된 컨테이너의 이미지에 문제가 있을 수 있다. 이미지 이름이 잘못 되었거나, 시크릿 정보가 없이 사설 레지스트리에서 이미지를 요청하려했거나 등의 쿠버네티스가 리소스를 구성하는 컨테이너 이미지를 가져올 수 없음을 뜻 한다.
댓글남기기