application update 하는 deployment strategies로 두 가지 방법이 있다.
Recreate
기존에 배포된 모든 application을 삭제하고 updated된 application을 한 번에 배포하는 전략
삭제되고 생성되는 과정에서 application이 작동이 안되는 downtime이 존재한다.
Rolling update
Rolling Update
rolling update: application이 downtime 없이 점진적으로 updated 되는 것 rollout: application을 update하는 것
따로 설정하지 않으면 rolling update가 default이다.
deployment가 rollout을 trigger한다.
pod template이 변경되면 updated 된다.
replica가 변하는 것 등은 해당되지 않는다.
rollout 될 때마다 해당 버전이 관리되는데 revision이라고 한다.
rollout 상태 확인: kubectl rollout status deployment/myapp-deployment
rollout 히스토리 확인: kubectl rollout history deployment/myapp-deployment
특정 버전 정보를 보려면 --revison 사용(kubectl rollout history deployment/myapp-deployment --revision=2)
Rollback
적용한 rollout을 되돌 릴 수 있다.
kubectl rollout undo deployment/myapp-deplyment
특정 버전으로 되돌리려면 to-revisioin 사용(kubectl rollout undo deployment/myapp-deployment --to-revisiion=2)
◼ Configure Application
Command & Arguments
docker에서 쓰이는 entrypoint와 cmd를 k8s에서는 command와 args라는 이름으로 바꿔서 쓰이고 있다.
경우의 수는 아래와 같다. https://kubernetes.io/ko/docs/tasks/inject-data-application/define-command-argument-container/
Configuring environment variables in applications
TL;DR 크게 3가지 방법(plain, configMap, Secretes)으로 설정이 가능하다.
ConfigMap
크게 세 가지 방법으로 주입 가능(file 형태, configmap 중 개별로 주입, volume으로 사용)
Secretes
base64로 인코딩 된 값을 사용
누구나 decoding이 가능하기 때문에 안전하게 secret을 다루려면 다른 solution이 필요하다.(i.e. vault)
크게 세 가지 방법으로 주입이 가능하다.
volume으로 주입할 경우 각각의 key가 하나의 file로 저장이 된다.