쿠버네티스 10. 확장과 전문가 과정
4주 과정, 하루 1시간

쿠버네티스 10. 확장과 전문가 과정

API 서버의 동작 원리부터 CRD, 오퍼레이터, 어드미션 정책, 서비스 메시, 멀티 클러스터, 관리형 GKE, 비용, 자격증, 오픈소스 기여까지 다루는 마지막 과정입니다. 끝나면 가상의 회사에 맞는 운영 플랫폼을 설계하고 트레이드오프를 설명할 수 있습니다.

다음 할 일

…

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

공부하는 방법

매일 1시간몰아서 8시간보다 매일 1시간이 오래 남습니다. 과제마다 예상 시간이 적혀 있습니다.
읽기 20%, 손 80%개념을 읽었으면 kubectl get --raw, managedFields, 이벤트로 API 서버가 실제로 무엇을 기록했는지 눈으로 확인합니다.
일부러 부수기설정을 틀리게 바꾸고, 에러 메시지만 보고 원인을 찾습니다.
소리 내 설명하기단계 끝의 자가 점검에 답을 보지 않고 말해 봅니다. 막히면 그 과제로 돌아갑니다.
맥북에서 실습하기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에서만 됩니다.

처음 보는 용어

API 그룹과 버전리소스를 묶는 이름(apps, batch 등)과 그 양식 판(v1, v1beta1)입니다. core 그룹은 /api/v1, 나머지는 /apis/그룹/버전 URL을 씁니다.
디스커버리API 서버가 "나는 이런 그룹과 리소스를 안다"고 알려 주는 안내판입니다. kubectl api-resources가 이것을 읽습니다.
resourceVersion객체가 바뀔 때마다 새로 붙는 장부 쪽 번호입니다. watch 시작점과 동시 수정 충돌 검사에 쓰입니다.
낙관적 동시성잠그지 않고, 저장할 때 내가 읽은 resourceVersion이 아직 최신인지 확인하는 방식입니다. 다르면 409 Conflict가 납니다.
서버 사이드 어플라이API 서버가 필드마다 주인(field manager)을 기록하고 병합하는 apply 방식입니다. 다른 주인의 필드를 바꾸려 하면 충돌로 알려 줍니다.
애그리게이션 레이어특정 API 그룹 요청을 APIService에 등록된 다른 서버로 넘기는 기능입니다. metrics-server가 대표 예입니다.
CEL쿠버네티스가 검증 규칙에 쓰는 짧은 식 언어입니다. CRD의 x-kubernetes-validations와 ValidatingAdmissionPolicy에서 씁니다.
status 서브리소스status를 /status 경로로만 바꿀 수 있게 분리하는 기능입니다. spec은 사용자, status는 컨트롤러라는 역할이 나뉩니다.
변환 웹훅CRD의 여러 버전 사이에서 필드 모양을 바꿔 주는 외부 서버입니다. 버전 간 구조가 다를 때만 필요합니다.
리컨사일원하는 상태와 현재 상태를 비교해 차이를 없애는 컨트롤러의 한 번의 작업입니다. 여러 번 불려도 결과가 같아야 합니다.
informerlist와 watch로 객체 변화를 받아 로컬 캐시를 채우는 client-go 부품입니다. lister로 캐시를 읽고 workqueue로 처리할 키를 넘깁니다.
레벨 트리거이벤트 하나하나가 아니라 현재 상태 전체를 보고 동작하는 방식입니다. 이벤트를 놓쳐도 결국 맞는 상태가 됩니다.
ownerReferences이 객체의 주인이 누구인지 적은 기록입니다. 주인이 지워지면 가비지 컬렉터가 딸린 객체를 지웁니다.
파이널라이저삭제 전에 정리할 일이 있다는 표시입니다. 목록이 빌 때까지 객체는 deletionTimestamp만 찍힌 채 남습니다.
Kubebuildercontroller-runtime 기반 오퍼레이터 프로젝트를 만들어 주는 도구입니다. 마커 주석으로 CRD와 RBAC YAML을 생성합니다.
ValidatingAdmissionPolicyCEL 식으로 요청을 검사하는 API 서버 내장 어드미션 정책입니다. 웹훅 서버 없이 동작합니다.
ztunnelIstio ambient 모드에서 노드마다 도는 L4 프록시입니다. 워크로드 사이 트래픽을 mTLS(HBONE)로 암호화합니다.
waypointIstio ambient 모드에서 L7 기능(라우팅, 트래픽 분할, L7 인가)이 필요할 때만 추가하는 Envoy 프록시입니다.
Workload Identity Federation for GKEPod의 쿠버네티스 ServiceAccount로 구글 클라우드 API를 키 파일 없이 호출하게 해 주는 GKE 기능입니다.
OpenCost쿠버네티스 비용을 네임스페이스, 레이블, 워크로드별로 나눠 계산하는 CNCF 오픈소스 프로젝트입니다.

계속 쓰게 될 자료