Home [K8S] kubernetes imagepullpolicy 는 무엇이고 언제 적용될까?
Post
Cancel

[K8S] kubernetes imagepullpolicy 는 무엇이고 언제 적용될까?

kubernetes imagepullpolicy 는 무엇이고 언제 적용될까?

imagepullpolicy

해석 그대로 컨테이너를 생성할때 사용하는 Image의 Pull 정책에 대한 설정값이다.

IfNotPresent

이미지가 로컬에 없는 경우에만 내려받는다.

Always

kubelet이 컨테이너를 기동할 때마다, kubelet이 컨테이너 이미지 레지스트리에 이름과 이미지의 다이제스트가 있는지 질의한다. 일치하는 다이제스트를 가진 컨테이너 이미지가 로컬에 있는 경우, kubelet은 캐시된 이미지를 사용한다. 이외의 경우, kubelet은 검색된 다이제스트를 가진 이미지를 내려받아서 컨테이너를 기동할 때 사용한다.

Never

kubelet은 이미지를 가져오려고 시도하지 않는다. 이미지가 어쨌든 이미 로컬에 존재하는 경우, kubelet은 컨테이너 기동을 시도한다. 이외의 경우 기동은 실패한다. 보다 자세한 내용은 미리 내려받은 이미지를 참조한다.

IfNotPresent

  • 이미지가 Local에 없는 경우에만 내려받음

Always

  • kubelet이 컨테이너를 가동할 때마다 컨테이너 이미지의 이름과 이미지의 Digest가 있는지 확인한다.
  • 로컬에 있는 경우 캐시된 이미지를 사용, 이외의 경우는 다시 이미지를 내려받음

Never

  • 이미지를 가져오려고 시도하지 않음.
  • 로컬에 이미지가 존재하지 않는다면 컨테이너 실행은 실패한다.

그렇다면 어떤 특정 시기에 이 값이 영향을 미칠까?

나 같은 경우는 일반적으로 Always값을 사용한다.
위의 설명에서 확인할 수 있듯이 컨터이너 실행에서 정책이 영향을 미친다.
즉, Deployment 가 항상 새로운 이미지를 바라보는 것이 아니다. 컨테이너가 Run할때 어떤식으로 동작할 것인지를 본다.
그렇다면 언제 컨테이너를 실행할까?


Pod의 Life cycle

Pod에는 1개 이상의 Container가 실행될 수 있는데, 언제 컨테이너가 실행되는지 알기 위해서는 Pod의 Life Cycle을 확인할 필요가 있다.

  • Pending에서 시작해서 컨테이너 중 하나라도 OK로 시작되면 Running 으로 바뀐다.
  • 컨테이너가 실패로 종료되었는지 여부에 따라 Succeeded or Failde 로 바뀜.

CrashLoopBackOff 에서의 ImagePullPolicy

Pod가 crashloopbackoff 상태일때는 ImagePullPolicy가 어떻게 적용될까?

CrashLoopBackOff

  • CrashloopBackOff 는 Pod가 Starting -> Crashing -> Starting Again 을 계속 반복한다는 것을 의미한다.
  • 즉, 컨테이너 실행 중 Crashing 이 발생하면 Pod가 반복적으로 Restart를 수행한다.
  • Pod가 CrashloopBackOff 상태일때 Restart 값을 확인해보면 계속 증가하는 것을 확인할 수 있다.

즉, container가 새로 생성될 때마다 imagepull을 하게된다.

crashloopbackoff 이면 pod가 pending -> restart -> running 으로 가는거니깐 container 새로 생성. 즉 image 받아옴.

참고 : https://stackoverflow.com/a/45906651/14995221

This post is licensed under CC BY 4.0 by the author.