본문 바로가기

쿠버네티스

쿠버네티스(kubernetes) 이미지 업데이트(update) 또는 이미지 자동 업데이트 막는 방법

오늘은 두 가지로 나누어 설명을 할게요.

 

1. 쿠버네티스(Kubernetes) 에서 내가 사용중인 이미지(image) 의 최신 버전이 나올 때 마다 지속적으로 최신본으로 반영하기 위한 방법

2. 반대로 이미지(image) 가 자동 업데이트(update) 되어 저절로 최신본이 되는 걸 막는 방법

 

두 가지 입니다.

 

저 같은 경우는 2번에 해당이 되어 자꾸 자동으로 업데이트가 되다보니 그때마다 손봐주고 어쩔 때는 패치가 되느라 서비스가 멋대로 중단되어있던 경험이 있어서 의외로 2번의 경우를 찾으시는 분들도 있을 것 같았습니다.

 

 

1. 쿠버네티스(Kubernetes) 에서 내가 사용중인 이미지(image) 의 최신 버전이 나올 때 마다 지속적으로 최신본으로 반영하기 위한 방법

 

사실 간단 합니다.

 

저는 nextcloud 를 서비스 하고 있기 때문에 이를 예로 들어 설명할게요.

 

위 그림과 같은 경우에는 최신 버전의 이미지가 나올 때마다 스스로 새 이미지를 받아 옵니다. 그리고 파드가 재기동 될 때 바로 반영을 해 버리죠.

 

즉,

 

image 부분에 이미지 이름과 태그로 :latest 가 붙어있고, imagePullPolicy 가 Always 로 되어있다면 새 이미지 버전이 나오면 docker hub 에서 이미지를 바로 받아오게 되고 다음 Pod 재기동 시 반영 시킵니다.

 

반드시 latest 태그, imagePullPolicy: Always 이 두 가지 모두 되어 있어야 합니다.

 

팁으로

docker images

위와 같이 도커 이미지 목록을 보면 새 이미지 버전이 나올 때마다 바로 받아오는 것을 보실 수 있을 겁니다.

 

근데 사실 운영을 하기에는 새 이미지를 바로바로 반영시키는 건 권장이 아니라고 하네요.

 

이유는 Pod 가 문제가 생겨서 killed 되고 다시 생성이 되는데 그때 버전이 올라간 새 이미지가 바로 반영이 되고 버전 업으로 인한 또 다른 문제 또는 패치 과정 중에 수동 작업이 필요한 부분이 생긴다면 서비스는 멈추게 되고 그대로 멈춰있게 될겁니다...

 

 

2. 반대로 이미지(image) 가 자동 업데이트(update) 되어 저절로 최신본이 되는 걸 막는 방법

 

보통 Kubernetes 에서 deployment 를 만들고 대부분 latest 를 붙여 사용하시는데 이러면 대개 이미지 자동 업데이트가 적용이 되어 있습니다.

 

따라서 이 경우에는,

 

위와 같이 image 에 이미지 이름 뒤에 latest 란 태그는 절대 하지 마시고, imagePullPolicy 를 IfNotPresent 로 해 주시면 자동으로 이미지가 업데이트 되지 않습니다.

 

 

imagePullPolicy 옵션

옵션 종류 설명
Always 항상 이미지를 새로 받아옴
IfNotPresent 만약 존재하는 이미지가 있다면 새로 받아오진 않고, 없다면 새로 받아옴
Never 절대 이미지를 새로 받아오지 않음

 

 

본인의 경우에 맞게 imagePullPolicy 의 옵션을 맞춰 사용하시면 될 것 같습니다.

 

끝.