# [k8s hard way] 02-Jumpbox 설정
실행환경 - 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
에는 이 튜토리얼을 진행하는 데 필요한 모든 커맨드라인 도구가 준비되었습니다.