쿠버네티스 02. 아키텍처와 핵심 오브젝트
3주 과정, 하루 1~2시간

쿠버네티스 02. 아키텍처와 핵심 오브젝트

WSL 안에 kind로 멀티 노드 클러스터를 만들고, 본사(control plane)와 지점(노드)을 직접 열어 보며 kubectl, API 오브젝트, Deployment가 어떻게 움직이는지 끝까지 파고듭니다. 위에서부터 하나씩 체크하세요.

다음 할 일

…

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

공부하는 방법

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

처음 보는 용어

선언형 모델(Declarative)원하는 최종 상태를 적어 두면 시스템이 알아서 맞추는 방식입니다. 쿠버네티스 YAML이 바로 이 원하는 상태입니다.
조정 루프(Reconcile loop)컨트롤러가 원하는 상태와 현재 상태를 계속 비교하고 차이를 없애는 반복 동작입니다. 에어컨 온도 조절기와 같습니다.
kube-apiserver모든 요청을 받는 접수 창구입니다. 인증, 인가, admission, 검증을 거쳐 etcd에 쓰는 유일한 컴포넌트입니다.
etcd클러스터의 모든 오브젝트를 저장하는 분산 키-값 저장소입니다. 쿠버네티스의 장부입니다.
kube-scheduler노드가 정해지지 않은 Pod를 보고 조건에 맞는 노드를 골라 연결(binding)하는 배치 담당입니다.
kube-controller-managerDeployment, ReplicaSet, Node, 가비지 컬렉터 등 기본 컨트롤러 수십 개를 한 프로세스로 돌리는 컴포넌트입니다.
cloud-controller-manager클라우드 API와 연결해 LoadBalancer, 노드 수명, 라우트를 처리하는 컨트롤러 묶음입니다. kind에는 없습니다.
kubelet노드마다 돌며 자기 노드에 배정된 Pod를 CRI로 실제로 띄우고 상태를 보고하는 지점 현장 책임자입니다.
kube-proxyService와 EndpointSlice를 보고 노드에 패킷 전달 규칙을 만드는 교환원입니다.
CRI, CNI, CSI각각 컨테이너 런타임, 네트워크, 저장소를 쿠버네티스에 꽂는 표준 인터페이스입니다.
static Podkubelet이 API 서버 없이 노드의 파일을 보고 직접 띄우는 Pod입니다. kubeadm 계열 control plane이 이렇게 뜹니다.
kubeconfig, contextkubectl이 읽는 접속 설정 파일과, 그 안에서 클러스터, 사용자, 기본 namespace를 묶은 즐겨찾기입니다.
Server-Side Apply병합 계산을 API 서버가 하고 필드마다 주인(managedFields)을 기록하는 apply 방식입니다.
ownerReferences자식 오브젝트가 주인을 가리키는 필드입니다. 가비지 컬렉터가 이것을 따라 연쇄 삭제합니다.
finalizer삭제 전에 정리 작업이 끝났다는 확인이 필요하다는 표시입니다. 전부 떼어져야 실제로 삭제됩니다.
generation, observedGenerationspec이 바뀔 때마다 오르는 세대 번호와, 컨트롤러가 마지막으로 처리한 세대 번호입니다.
resourceVersion오브젝트가 저장될 때마다 바뀌는 버전 값입니다. 동시 수정 충돌 감지와 watch 재개에 쓰입니다.
EndpointSliceService 뒤에 있는 Ready Pod들의 IP와 포트 목록입니다. kube-proxy가 이것을 보고 규칙을 만듭니다.
kindDocker 컨테이너를 노드로 삼아 로컬에 쿠버네티스 클러스터를 만드는 도구입니다.

계속 쓰게 될 자료