Infra/[강의] CKA with Practice Tests

5. Application Lifecycle Management

lartist 2023. 1. 13. 15:57

- 롤링 업데이트 / 롤백

deployment를 적용(신규/수정)하면 revision(일종의 버전)으로 실행되고 이를 rollout으로 관찰 가능

kubectl rollout status/history

업데이트란? 앱 버전이 올라갈 수 있고, 쿠버네티스 설정이 변경될 수 있음 (다양)

 

-- deployment 전략

--- recreate: 기존 pod을 전부 삭제하고 새 버전을 배포

사이에 downtime이 발생함

 

--- rolling update: pod를 한 개씩 삭제하고 새 버전을 배포 (디폴트)

 

-- 실행 흐름

--- 업데이트

deployment가 적용되면 이에 해당하는 새로운 replicaset이 생성되고,

기본값인 rolling update의 경우 새 replicaset에서 pod이 하나 생성되고 기존 replicaset에서 pod이 하나 삭제되는 방식

replicaset에서 pod이 전부 삭제되었어도 0/0 상태로 남아있다!

 

--- 롤아웃

kubectl rollout undo 명령어를 통해 수행하며, 기존 replicaset을 복원함

 

 

- 도커와 쿠버네티스의 command 차이

-- 도커

--- ENTRYPOINT: 실행 명령어 prefix

--- CMD: 실행 명령어. 아규먼트를 따로 명시하는 경우 무시

 

-- 쿠버네티스

--- pod.spec.containers.command: ENTRYPOINT, CMD 덮어씀

--- pod.spec.containers.args: CMD 덮어씀

--- pod.spec.containers.env.[name,value/valueFrom]: env 설정. valueFrom의 경우 별도 리소스에서 단일 env 획득

--- pod.spec.containers.envFrom: ConfigMap 등 별도 리소스에서 전체 env 획득

 

 

- ConfigMap: key-value 쌍을 별도로 저장

- Secrets: ConfigMap과 유사하지만 인코딩 적용

CLI로 써넣으면 자동으로 base64 인코딩해서 적용되고,

yaml 파일의 경우 평문으로 적으면 apply가 안돼서 직접 base64 인코딩 후 써넣어야한다

또 쿠버네티스 자원에 접근할 수 있으면 열람할 수 있으므로 RBAC를 잘 적용하라고 한다

'잘' 적용하면 좋지만, Helm Secrets, HashiCorp Valut같은 외부 툴을 권장하는 듯 하다

 

-- etcd에 저장된 secret 데이터의 보안

etcd에는 secret 데이터가 평문으로 저장된다

 

https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/

위 공식문서를 참고해서 etcd에 데이터를 암호화해서 저장할 수 있다

EncryptionConfiguration 리소스를 생성해서 어떤 리소스를 어떻게 암호화할지 설정하고,

kubeapiserver에 encryption-provider-config를 위 리소스 기반으로 활성화시킨다 (apiserver는 manifest니까 파일 수정)

 

 

- n개의 컨테이너로 구성된 pod가 볼륨을 공유하도록 하기

https://kubernetes.io/ko/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/

 

 

- initContainers: pod 안에서 부팅 시 한 번만 커맨드를 실행하고 종료될 컨테이너

https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers/

initContainers가 순차적으로 생성되고 실행 후 종료되고나서 컨테이너가 실행된다