환경은 세 가지를 섞어 쓴다
| 환경 | 좋은 점 | 한계 | 언제 |
|---|---|---|---|
| 이 사이트의 실습 터미널 | 설치 없음, 과제·자동 채점, 망가진 클러스터를 버튼 하나로 재현 | 동작을 흉내 낸 시뮬레이터 | 매일의 반복 연습, 트러블슈팅 감각 |
| kind (내 컴퓨터) | 진짜 쿠버네티스, 1분 만에 생성·삭제 | 노드가 컨테이너라 systemd·업그레이드 연습이 어색함 | 워크로드·네트워킹·스토리지 |
| 가상머신 + kubeadm | 시험장과 가장 비슷 | 준비가 번거로움 | 설치·업그레이드·etcd·노드 장애 |
그리고 시험을 사면 딸려 오는 killer.sh 시뮬레이터 2회는 시험 2주 전쯤 아껴 두었다가 씁니다. 실제 시험보다 어렵게 만들어져 있어서 거기서 60% 가 나오면 본 시험은 대체로 넉넉합니다.
1. 이 사이트의 실습 터미널
실습 터미널을 열면 왼쪽에 과제, 오른쪽에 터미널이 있습니다.
- 클러스터 구성:
controlplane(컨트롤 플레인),node01,node02세 노드. 버전은 v1.35. kubectl(별칭k),helm,etcdctl/etcdutl,kubeadm,systemctl,journalctl,crictl,ssh,vi를 쓸 수 있습니다.help를 치면 전체 목록이 나옵니다.vi 파일을 치면 편집기 창이 열립니다(저장Ctrl+S, 닫기Esc).kubectl edit도 같은 창을 씁니다.- 채점하기를 누르면 항목별로 통과·미통과가 나옵니다. 막히면 힌트를 한 단계씩 열고, 마지막에는 모범 답안을 볼 수 있습니다.
- 다시 시작은 과제의 처음 상태로 클러스터를 되돌립니다.
첫 과제로 연습해 봅시다. 아래 과제 버튼을 누르세요.
2. kind 로 내 컴퓨터에 클러스터 만들기
도커(Docker Desktop 또는 Linux 의 docker)가 있으면 됩니다.
# macOS
brew install kind kubectl
# Linux (x86_64) — 최신 버전 번호는 kind 공식 문서에서 확인
curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
chmod +x ./kind && sudo mv ./kind /usr/local/bin/kind
노드 3개(컨트롤 플레인 1 + 워커 2)짜리 설정 파일을 만듭니다.
# kind-cka.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
kind create cluster --name cka --config kind-cka.yaml
kubectl get nodes
kind delete cluster --name cka # 다 쓰면 지운다
kind 의 기본 CNI(kindnet)는 NetworkPolicy 를 강제하지 않습니다. 네트워크 정책을 실제로 확인하려면
networking.disableDefaultCNI: true로 만든 뒤 Calico 나 Cilium 을 설치하세요.
3. 가상머신 두 대에 kubeadm 으로 설치하기
시험장과 가장 비슷한 환경입니다. 가상머신은 Multipass, VirtualBox, UTM, 클라우드 VM 무엇이든 됩니다. Ubuntu 24.04, 각 2 vCPU · 4GB 메모리를 권장합니다. 여기서는 흐름만 잡고, 명령 하나하나의 의미는 kubeadm 으로 클러스터 만들기 강의에서 자세히 다룹니다.
# (Multipass 예시) 가상머신 두 대
multipass launch 24.04 --name cp --cpus 2 --memory 4G --disk 20G
multipass launch 24.04 --name w1 --cpus 2 --memory 4G --disk 20G
multipass shell cp
두 노드 모두에서:
# 1) swap 끄기
sudo swapoff -a && sudo sed -i '/ swap / s/^/#/' /etc/fstab
# 2) 커널 모듈과 네트워크 설정
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay && sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
# 3) 컨테이너 런타임(containerd) — systemd cgroup 드라이버 사용
sudo apt-get update && sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
# 4) kubeadm·kubelet·kubectl — pkgs.k8s.io 저장소는 '마이너 버전마다' 따로 있다
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.35/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
containerd 설정 파일의 모양은 버전에 따라 조금씩 다릅니다(containerd 2.x 는 경로와 섹션 이름이 바뀌었음).
SystemdCgroup줄이 없으면 공식 문서 “Container Runtimes” 의 해당 버전 안내를 따르세요.
컨트롤 플레인(cp)에서만:
sudo kubeadm init --pod-network-cidr=192.168.0.0/16
mkdir -p $HOME/.kube && sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
# CNI 설치(Calico 예시 — 최신 매니페스트 주소는 Calico 문서에서 확인)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.3/manifests/calico.yaml
kubeadm token create --print-join-command # 출력된 명령을 워커에서 sudo 로 실행
kubectl get nodes 에서 두 노드가 Ready 가 되면 완성입니다. 이 클러스터에서 업그레이드, etcd 백업·복구, kubelet 고장 내고 고치기를 한 번씩은 꼭 직접 해 보세요. 가상머신 스냅샷을 찍어 두면 망가뜨려도 되돌릴 수 있습니다.
4. 무료 온라인 실습장
설치가 부담스러우면 브라우저에서 진짜 클러스터를 잠깐 빌려 주는 서비스도 있습니다. Killercoda 의 쿠버네티스 놀이터는 무료로 노드 두 대짜리 클러스터를 한 시간 정도 줍니다. 시험을 사면 받는 killer.sh 시뮬레이터는 실제 시험과 가장 비슷한 환경입니다.