# [k8s hard way] 02-Jumpbox 설정

02-Jumpbox (opens new window)

실행환경 - M3 Pro mac + vmware fusion

# Jumpbox 설정하기

이 실습에서는 4대의 머신 중 하나를 jumpbox로 설정합니다. 이 머신은 이 튜토리얼 전체에서 명령어를 실행하는 데 사용될 관리용 머신입니다. 일관성을 위해 전용 머신을 사용하는 것이지만, macOS나 Linux가 설치된 개인 워크스테이션에서도 충분히 실행할 수 있습니다.

jumpbox는 Kubernetes 클러스터를 처음부터 구성할 때 모든 작업의 출발점이 되는 관리용 터미널이라고 생각하시면 됩니다. 본격적으로 시작하기에 앞서, 몇 가지 커맨드라인 유틸리티를 설치하고 튜토리얼에서 사용할 Git 리포지토리를 클론합니다.

# Jumpbox 접속

vagrant ssh jumpbox
sudo su -

모든 명령어는 root 사용자로 실행됩니다. 이는 단순화를 위해서이며, 명령어 수를 줄이고 설정을 더 간단하게 하기 위함입니다.

# 필수 커맨드라인 유틸리티 설치

jumpbox에 접속한 후 다음 패키지를 설치합니다:

apt-get update
apt-get -y install wget curl vim openssl gi

# GitHub 리포지토리 동기화

이제 이 튜토리얼에서 사용할 설정 파일과 템플릿을 포함한 리포지토리를 클론합니다:

git clone --depth 1 \
  https://github.com/kelseyhightower/kubernetes-the-hard-way.git

디렉토리로 이동:

cd kubernetes-the-hard-way

이 디렉토리는 앞으로 모든 실습에서 사용할 작업 공간입니다. 경로가 헷갈릴 경우, 아래 명령어로 현재 디렉토리를 확인할 수 있습니다:

pwd

출력 예시:

/root/kubernetes-the-hard-way

# 바이너리 다운로드

Kubernetes를 구성하는 여러 컴포넌트의 바이너리를 다운로드합니다. 이들은 모두 downloads 디렉토리에 저장되며, 각 머신에 따로따로 다운로드하지 않고 공유하여 대역폭을 절약할 수 있습니다.

현재 머신의 아키텍처(amd64 또는 arm64)에 따라 다운로드할 바이너리 목록을 확인합니다:

root@jumpbox:~/kubernetes-the-hard-way# cat downloads-$(dpkg --print-architecture).txt
https://dl.k8s.io/v1.32.3/bin/linux/arm64/kubectl
https://dl.k8s.io/v1.32.3/bin/linux/arm64/kube-apiserver
https://dl.k8s.io/v1.32.3/bin/linux/arm64/kube-controller-manager
https://dl.k8s.io/v1.32.3/bin/linux/arm64/kube-scheduler
https://dl.k8s.io/v1.32.3/bin/linux/arm64/kube-proxy
https://dl.k8s.io/v1.32.3/bin/linux/arm64/kubelet
https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-arm64.tar.gz
https://github.com/opencontainers/runc/releases/download/v1.3.0-rc.1/runc.arm64
https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-arm64-v1.6.2.tgz
https://github.com/containerd/containerd/releases/download/v2.1.0-beta.0/containerd-2.1.0-beta.0-linux-arm64.tar.gz
https://github.com/etcd-io/etcd/releases/download/v3.6.0-rc.3/etcd-v3.6.0-rc.3-linux-arm64.tar.gz

다운로드 실행:

wget -q --show-progress \
  --https-only \
  --timestamping \
  -P downloads \
  -i downloads-$(dpkg --print-architecture).txt
kubectl               100%[========================>]  53.25M  9.87MB/s    in 5.5s    
kube-apiserver        100%[========================>]  86.06M  2.67MB/s    in 31s     
kube-controller-manag 100%[========================>]  79.56M  2.33MB/s    in 35s     
kube-scheduler        100%[========================>]  61.25M  2.13MB/s    in 31s     
kube-proxy            100%[========================>]  62.25M  10.3MB/s    in 7.4s    
kubelet               100%[========================>]  71.75M  10.5MB/s    in 6.8s    
crictl-v1.32.0-linux- 100%[========================>]  16.98M  9.36MB/s    in 1.8s    
runc.arm64            100%[========================>]  10.78M  8.21MB/s    in 1.3s    
cni-plugins-linux-arm 100%[========================>]  47.17M  10.1MB/s    in 5.0s    
containerd-2.1.0-beta 100%[========================>]  33.60M  5.05MB/s    in 7.4s    
etcd-v3.6.0-rc.3-linu 100%[========================>]  20.87M  5.79MB/s    in 4.0s

약 500MB의 바이너리를 다운로드하게 되며, 완료 후에는 다음과 같이 확인할 수 있습니다:

ls -oh downloads
-rw-r--r-- 1 root 48M Jan  6 16:13 cni-plugins-linux-arm64-v1.6.2.tgz
-rw-r--r-- 1 root 34M Mar 18 02:33 containerd-2.1.0-beta.0-linux-arm64.tar.gz
-rw-r--r-- 1 root 17M Dec  9 09:16 crictl-v1.32.0-linux-arm64.tar.gz
-rw-r--r-- 1 root 21M Mar 27 23:15 etcd-v3.6.0-rc.3-linux-arm64.tar.gz
-rw-r--r-- 1 root 87M Mar 12 03:31 kube-apiserver
-rw-r--r-- 1 root 80M Mar 12 03:31 kube-controller-manager
-rw-r--r-- 1 root 54M Mar 12 03:31 kubectl
-rw-r--r-- 1 root 72M Mar 12 03:31 kubelet
-rw-r--r-- 1 root 63M Mar 12 03:31 kube-proxy
-rw-r--r-- 1 root 62M Mar 12 03:31 kube-scheduler
-rw-r--r-- 1 root 11M Mar  4 12:14 runc.arm64

# 바이너리 압축 해제 및 정리

각 컴포넌트의 바이너리를 적절한 폴더로 압축 해제 및 이동합니다:

ARCH=$(dpkg --print-architecture)
mkdir -p downloads/{client,cni-plugins,controller,worker}
tar -xvf downloads/crictl-v1.32.0-linux-${ARCH}.tar.gz -C downloads/worker/
tar -xvf downloads/containerd-2.1.0-beta.0-linux-${ARCH}.tar.gz \
  --strip-components 1 -C downloads/worker/
tar -xvf downloads/cni-plugins-linux-${ARCH}-v1.6.2.tgz -C downloads/cni-plugins/
tar -xvf downloads/etcd-v3.6.0-rc.3-linux-${ARCH}.tar.gz -C downloads/ \
  --strip-components 1 \
  etcd-v3.6.0-rc.3-linux-${ARCH}/etcdctl \
  etcd-v3.6.0-rc.3-linux-${ARCH}/etcd
mv downloads/{etcdctl,kubectl} downloads/client/
mv downloads/{etcd,kube-apiserver,kube-controller-manager,kube-scheduler} downloads/controller/
mv downloads/{kubelet,kube-proxy} downloads/worker/
mv downloads/runc.${ARCH} downloads/worker/runc

압축 파일 정리:

rm -rf downloads/*gz

실행 권한 부여:

chmod +x downloads/{client,cni-plugins,controller,worker}/*

# kubectl 설치

공식 Kubernetes CLI 도구인 kubectl을 설치합니다. 이 도구는 Kubernetes 컨트롤 플레인과 상호작용할 때 사용됩니다.

kubectl 바이너리를 /usr/local/bin/으로 복사:

cp downloads/client/kubectl /usr/local/bin/

설치 확인:

kubectl version --client

출력 예시:

Client Version: v1.32.3
Kustomize Version: v5.5.0

# 마무리

이제 jumpbox에는 이 튜토리얼을 진행하는 데 필요한 모든 커맨드라인 도구가 준비되었습니다.