개 요
처음으로 Deployment, StatefulSet, Pod 혹은 Pod Template를 포함하고 있는 다른 Object들을 처음 만들 때 Image 저장소로 부터 kubelet은 Image를 가져 온다. 이미지를 가지고 올 때 항상 Image 저장소에서 가져올지, 변동 사항이 없는 Image라면 Local(Worker Node)에 저장되어 있는지 Image를 사용할지 정책을 정할 수 있다.
1. Image Pull Policy
Image Pull Policy와 Image 이름 및 Tag는 kubelet이 Image를 어떻게 가져올지에 대해 영향을 준다.
- IfNotPresent
Image Pull Policy에 Default 값이다. Local(Woker Node)에 Image가 존재하지 않는 경우에만 Image 저장소로부터 Image를 가져온다. 만약, Image 이름 및 Tag가 변경되는 경우 Image 저장소로부터 새 이미지로 인식하여 Image를 가져온다. - Always
매번 kubelet은 Image를 Image 저장소로 부터 가져온다. Image 이름과 digest값을 kubelet이 확인한다. Always여도 Image 이름과 digest 값이 변경되지 않는 다면 Image 저장소로 부터 Image를 새로 가져오지 않는다. - Never
kubelet은 Image 가져오기를 시도하지 않는다. Local(Worker Node)에 있는 경우 컨테이너를 시작하고 그렇지 않은 경우 실패하게 된다.
2. Always인 경우에도 Image Pull을 안하는 경우
ImagePullPolicy를 Always로 설정해도 Image가 갱싱되지 않는 경우가 있다.
이러한 현상이 발생하는 경우는 저장소의 Image와 Local에 있는 Image가 동일하기 때문이다. 저장소에 저장되는 Docker Image는 name, tag,외에 Push할때 마다 유니크 하게 부여되는 Digest값이 존재한다.
이로 인해 동일한 name, tag를 가지는 이미지라고 할지라도 그 중에 여러 버전이 존재할 수 있고 Pull할 경우 가장 마지막에 Push된 Image의 name + tag + Digest 비교값으로 사용하게 된다.
저장소에 마지막에 Push된 Image name + tag + Digest 값과 로컬 저장소에 있는 마지막의 name + tag + Digest가 같다면 Image Pull Policy Always인 경우에도 Image를 갱신하지 않는다.
2.1. TEST
Docker 환경에서 같은 Image를 2번 다운로드 해보면 알 수 있다.
첫 번째인 경우 아래와 같이 Image를 Download하는 것을 확인 할 수 있다.
root@storage:~/room# docker pull www.harbor.co.kr/tsp/room:v1
v1: Pulling from tsp/room
7478e0ac0f23: Already exists
7a32e1b67191: Already exists
2a8b4e9fc4e8: Already exists
4f4fb700ef54: Already exists
82b326b33dd5: Already exists
9e0e2d6e2e25: Already exists
Digest: sha256:9753ec96b2c5f5ed3eb836b7e20c6c1a0da5fcb20f6d16fb8351b3ddbdb872ed
Status: Downloaded newer image for www.harbor.co.kr/tsp/room:v1
www.harbor.co.kr/tsp/room:v1
두번째 경우 Image Pull할 때 아래와 같은 메시지가 발생하면서 Image를 다운로드하지 않는다.
root@storage:~/room# docker pull www.harbor.co.kr/tsp/room:v1
v1: Pulling from tsp/room
Digest: sha256:9753ec96b2c5f5ed3eb836b7e20c6c1a0da5fcb20f6d16fb8351b3ddbdb872ed
Status: Image is up to date for www.harbor.co.kr/tsp/room:v1
ImagePullPolicy: Always에 의해 Image를 갱신하려고 하는 경우 Image 저장소에 매번 새롭게 Push하여 Image 마지막 버전의 Digest를 갱신 해줘야 Image를 새로 받아오게 된다.
'Kubernetes' 카테고리의 다른 글
[Kubernetes] ingress-nginx 도메인주소 rerwite 설정 (0) | 2024.10.16 |
---|---|
[Kubernetes] Ingress 413 에러 해결 방법 (0) | 2024.10.15 |
[Kubernetes] Ingress Sticky Session 적용하기 (0) | 2024.10.15 |
[Kubernetes]구성형 쿠버네티스 설치 Ubuntu (0) | 2024.08.14 |
[Kubernetes]에러 모음집 (0) | 2023.08.30 |