LabHub

CKA — 쿠버네티스 관리자 · 워크로드와 스케줄링 · 실습

컨트롤러로 워크로드 굴리기

LabHub 에서 이어서 보기

목표

Deployment, ReplicaSet, DaemonSet, StatefulSet 네 컨트롤러의 차이를 손으로 확인하고, 롤링 업데이트 파라미터를 조정해 실제 롤아웃과 롤백을 수행합니다.

왜 중요한가

시험에서 "이미지를 올리고 문제가 생기면 되돌려라" 는 단골 문제입니다. 그런데 되돌리기가 되는 이유를 모르면 함정에 빠집니다. rollout undo 는 마법이 아니라 레플리카 0 으로 남아 있는 옛 ReplicaSet 을 다시 키우는 것입니다. 그래서 revisionHistoryLimit 을 0 으로 두면 되돌릴 수 없고, 이미지를 손으로 되돌리면 되돌린 게 아니라 리비전이 하나 더 쌓입니다.

네 컨트롤러의 선택 기준도 명확합니다. 서로 구분할 필요 없는 복제본이면 Deployment, 노드마다 정확히 하나면 DaemonSet, 이름·순서·볼륨이 고정돼야 하면 StatefulSet 입니다. StatefulSet 이 헤드리스 서비스를 요구하는 이유는 파드마다 DNS 이름을 주기 위해서입니다.

단계

1. 네임스페이스 cka-workloads 를 만들고 Deployment web 을 만든다. 이미지 nginx:1.25, 레플리카 2.
2. web 을 레플리카 4로 스케일하고 4/4 Ready 를 확인한다.
3. web 의 전략을 RollingUpdate 로 두고 maxSurge: 2, maxUnavailable: 0, revisionHistoryLimit: 3 으로 설정한다.
4. Deployment api 를 만든다 (이미지 nginx:1.25, 레플리카 3). 그 다음 이미지를 nginx:1.27 로 교체하고 롤아웃이 끝날 때까지 기다린다.
5. api 의 롤아웃 히스토리를 /root/cka-workloads/history.txt 에 저장한다. 리비전이 2개 이상 보여야 한다.
6. api 를 직전 리비전으로 되돌린다. 되돌린 뒤 이미지는 다시 nginx:1.25 여야 한다.
7. cka-workloads 에 DaemonSet node-agent 를 만든다. 이미지 busybox:1.36, 컨테이너가 바로 종료되지 않도록 오래 도는 명령을 준다. 모든 노드에 하나씩 Ready 여야 한다.
8. 헤드리스 서비스 db-headless (clusterIP None, 포트 5432, 셀렉터 app=db)를 만들고, StatefulSet db 를 만든다. serviceName db-headless, 레플리카 2, 이미지 nginx:1.27, updateStrategy 는 RollingUpdatepartition: 1. 2/2 Ready 를 확인한다.

참고

단계 8개

  1. Deployment 만들기
  2. 스케일하고 Ready 확인하기
  3. 롤링 업데이트 파라미터 조정하기
  4. 이미지 교체하고 롤아웃 완료 기다리기
  5. 리비전 히스토리 확인하고 저장하기
  6. 이전 리비전으로 되돌리기
  7. DaemonSet 배포하기
  8. 헤드리스 서비스와 StatefulSet 묶기