쿠버네티스 09. 배포 자동화와 플랫폼
3주 과정, 하루 1~2시간

쿠버네티스 09. 배포 자동화와 플랫폼

앞 사이트까지 클러스터를 직접 운영해 본 사람이 Helm과 Kustomize로 배포물을 포장하고, Git과 Argo CD로 자동 배포하고, 카나리로 안전하게 내보내고, 팀들이 스스로 쓰는 플랫폼을 설계하는 과정입니다. 위에서부터 하나씩 체크하세요.

다음 할 일

…

실습 방법 보기
전체 진행0 / 0
진행 상황: 이 브라우저에 저장

공부하는 방법

매일 1시간몰아서 8시간보다 매일 1시간이 오래 남습니다. 과제마다 예상 시간이 적혀 있습니다.
읽기 20%, 손 80%배포하기 전에 helm template이나 kubectl kustomize로 렌더링 결과를 먼저 눈으로 확인합니다.
일부러 부수기설정을 틀리게 바꾸고, 에러 메시지만 보고 원인을 찾습니다.
소리 내 설명하기단계 끝의 자가 점검에 답을 보지 않고 말해 봅니다. 막히면 그 과제로 돌아갑니다.
맥북에서 실습하기Windows에서 한다면 건너뛰세요

맥에서는 Ubuntu 가상 머신(VM)을 하나 띄워 그 안에서 실습합니다. 그러면 이 사이트의 명령을 Windows(WSL)와 똑같이 쓸 수 있습니다. 사이트에 "WSL Ubuntu 터미널"이라고 나오면 "VM 터미널"로 읽으세요.

  1. Homebrew 설치 (맥용 설치 관리자)회사 맥이면 설치 전에 IT팀 승인을 확인하세요.
    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  2. Ubuntu 가상 머신 만들고 들어가기Multipass는 무료입니다. 이 VM이 Windows의 WSL 역할을 합니다.
    brew install --cask multipass                                  # 가상 머신 관리 도구 설치
    multipass launch --name ubuntu --cpus 2 --memory 4G --disk 20G  # Ubuntu VM 만들기 (쿠버네티스는 --memory 8G 권장)
    multipass shell ubuntu                                          # VM 터미널로 들어가기
    # 여기서부터 사이트의 "WSL Ubuntu 터미널" 명령을 그대로 실행
  3. 맥 브라우저에서 VM 안의 서비스 열기WSL과 달리 localhost가 자동으로 연결되지 않습니다.
    multipass info ubuntu | grep IPv4  # VM의 IP 확인 (예: 192.168.64.5)
    # 브라우저에서 localhost 대신 http://<VM IP>:<포트> 로 접속
    # kubectl port-forward 는 --address 0.0.0.0 을 붙여야 맥에서 열림
  4. 끝나면 정리VM은 켜 두면 맥의 메모리를 계속 씁니다.
    multipass stop ubuntu            # VM 끄기 (내용은 남음)
    multipass start ubuntu           # 다시 켜기
    multipass delete --purge ubuntu  # 완전히 삭제

kind 클러스터와 Docker는 VM 안에서 설치하고 만듭니다. 멀티 노드 실습은 VM 메모리를 8G 이상으로 주세요.

WSL 설치, PowerShell 명령건너뜁니다. 위 2번 VM이 대신합니다.
Apple Silicon(M1 이후) 맥VM에서 uname -m이 aarch64면 다운로드 주소의 amd64를 arm64로 바꿉니다. arm64 버전이 없는 이미지는 exec format error가 날 수 있습니다.
Docker Desktop맥도 큰 회사는 유료입니다. VM 안의 Docker Engine을 쓰고, 맥에서 직접 쓰려면 무료인 Colima를 씁니다.
파일 주고받기multipass transfer 파일 ubuntu: 또는 multipass mount ~/study ubuntu:/home/ubuntu/study
브라우저로 열기localhost 대신 VM IP를 씁니다 (위 3번).

VM 없이 맥에서 바로 하고 싶다면 brew install kubectl kind helm colima docker 로 도구를 깔 수 있습니다. 단, 리눅스 내부(namespace, cgroup, systemd, iptables)를 들여다보는 실습은 VM에서만 됩니다.

처음 보는 용어

차트(Chart)쿠버네티스 앱을 설치하는 Helm 패키지입니다. Chart.yaml, values.yaml, templates 폴더로 이루어집니다.
릴리스(Release)차트를 클러스터에 한 번 설치한 실체입니다. 같은 차트를 이름만 바꿔 여러 번 설치할 수 있고, 업그레이드마다 revision이 늘어납니다.
values차트의 빈칸에 채울 값입니다. values.yaml이 기본이고 -f 파일과 --set으로 덮어씁니다.
헬퍼(_helpers.tpl)define으로 이름 붙인 템플릿 조각을 모아 둔 파일입니다. include로 불러 이름과 레이블을 일관되게 만듭니다.
훅(Hook)설치, 업그레이드, 삭제 전후나 helm test 때 따로 실행되는 리소스입니다. 주석 helm.sh/hook으로 지정합니다.
OCI 레지스트리컨테이너 이미지를 담는 표준 창고입니다. Helm 차트도 같은 창고에 oci:// 주소로 올리고 받을 수 있습니다.
KustomizationKustomize가 읽는 kustomization.yaml입니다. 어떤 리소스를 모으고 어떤 패치와 변환을 붙일지 적습니다.
오버레이(Overlay)base를 가져와 환경별 차이만 덧붙인 Kustomize 폴더입니다. dev, prod처럼 환경마다 하나씩 둡니다.
strategic merge patch쿠버네티스 스키마를 알고 목록을 이름 같은 키로 합치는 패치입니다. 바꿀 필드만 적으면 됩니다.
JSON 패치(RFC 6902)op, path, value로 정확한 위치를 추가, 교체, 삭제하는 패치입니다. 목록 항목 삭제에 편합니다.
GitOpsGit을 원하는 상태의 유일한 기록으로 두고, 클러스터 안의 에이전트가 Git과 같아지도록 계속 맞추는 운영 방식입니다.
ApplicationArgo CD에서 '이 Git 경로를 이 클러스터 네임스페이스에' 배포하라는 요청서 CRD입니다. 동기화 상태와 건강 상태를 기록합니다.
OutOfSync와 driftGit의 원하는 상태와 클러스터 실제 상태가 다른 것입니다. 사람이 손으로 바꾸거나 다른 컨트롤러가 바꾸면 생깁니다.
selfHeal과 pruneselfHeal은 drift를 자동으로 되돌리고, prune은 Git에서 사라진 리소스를 클러스터에서도 지웁니다.
ApplicationSet생성기(목록, Git 폴더, 클러스터 목록)로 Application을 여러 개 자동으로 찍어 내는 Argo CD 리소스입니다.
AppProjectArgo CD에서 팀별로 쓸 수 있는 저장소, 대상 클러스터와 네임스페이스, 리소스 종류, 역할을 묶는 권한 경계입니다.
RolloutArgo Rollouts가 Deployment 대신 쓰는 리소스입니다. 카나리와 블루그린 단계, 분석을 정의합니다.
AnalysisRunAnalysisTemplate을 실행한 결과입니다. 지표나 Job으로 새 버전을 판정하고, 실패하면 Rollout이 자동으로 중단됩니다.
SealedSecret과 ExternalSecretSealedSecret은 클러스터 공개키로 암호화해 Git에 두는 시크릿이고, ExternalSecret은 외부 금고 값을 가져와 Secret을 만드는 요청서입니다.
골든 패스와 개발자 포털골든 패스는 플랫폼 팀이 미리 닦아 둔 권장 배포 경로이고, 개발자 포털(예: Backstage)은 그 경로와 서비스 목록을 한 화면에서 제공하는 도구입니다.

계속 쓰게 될 자료