쿠버네티스 설치 복잡하다. 노드니 클러스터니 이론적인 것을 보는 것보다 설치부터 해보고 싶은 사람이 있을거라고 생각한다. (내가 그런 사람이라)
쿠버네티스 설치 전 참고
쿠버네티스는 단일 노드 클러스터로도 구축이 가능하다. 정리된 명령어를 준비된 환경에 갖다 붙여넣기만 하면 클러스터를 만드는 것까지는 크게 어렵지 않을 것이다.
Ubuntu Server 24.04 LTS 를 설치하고 아무것도 설치되지 않은 환경을 가정한다.
각 코드 박스에 있는 # 주석은 참고 정도하고 무시하면 된다. (나중에 내 기억을 더듬기 위한 주석 정도로)
빠른 설치를 위한 쿡북 정도로 보면 되고 올바른 테크트리를 원하는 참 개발자는 공식 문서를 참고하여 설치하길 바란다.
쿠버네티스 설치
설치 전 준비
sudo apt update
sudo apt upgrade -y
# 설치 전 환경설정
# 1. Swap 끄기 (kubernetes는 기본적으로 swap 기능을 끄는걸 권장이 아닌 강제함)
sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab
# 2. 방화벽 끄고 사용하지 않기 master, worker node간 통신 문제가 발생할 수 있음.
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 3. iptable bridge 설정
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
containerd 설치
### containerd 설치 ###
# 계속 오류가 났던건.. containerd 가 설치되어있지 않았기 떄문이었다.
sudo apt-get install -y containerd
# 모든 worker node 에서도 containerd config.toml 파일 설정
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# containerd 옵션 수정 SystemdCgroup = true
# 직접 들어가서 바꿔도 되고
sudo vi /etc/containerd/config.toml
# 아래 명령어로 SystemdCgroup 옵션을 true 로 바꿔줘도 됨.
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
Docker 설치 (옵션)
# Docker 설치 -- 옵션 : kubernetes runtime 에는 현재 Docker가 아닌
# Containerd 가 사용되고 있음.
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# Docker 최신 버전 설치
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Docker 설치 확인
sudo docker run hello-world
필요 패키지 설치
sudo apt install -y apt-transport-https gnupg-agent software-properties-common
curl -s https://packagsudo apt ines.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
쿠버네티스 설치
# kubernetes 저장소 도메인 변경됨.
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# kubernetes 설치
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
# kubelet kubeadm kubectl 의 update 를 막음
sudo apt-mark hold kubelet kubeadm kubectl
# kubelet 재시작
sudo systemctl daemon-reload
sudo systemctl restart kubelet
sudo systemctl enable kubelet
# 클러스터 초기화 전 IP포워딩 활성화 필요 (안하면 init 과정에서 오류남. 마스터, 워커 모두 적용)
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
클러스터 초기화 (생성)
이 부분만 간략하게 설명을 해야겠다. 처음으로 나온 커스텀이 필요한 영역이라.
아래 명령어에 –pod-network-cidr=172.16.0.0/16 는 pod 가 사용할 IP 대역을 설정하는 것이기 때문에 생략해도 생성이 된다. 생략할 경우 이후 네트워크 플러그인 (플러그인이라니깐 마치 옵션 같지만 필수로 설치해야한다)을 설치 할 때 지정하거나 플러그인의 기본 CIDR 를 사용하게 된다.
CIDR 를 뭘 쓸지 고민된다면 우리집 사설 네트워크 IP CIDR 와 명확히 구분될 수 있는 것으로 지정하는게 좋다.
예를들면 우리집 공유기 아래 단말의 사설 IP 대역이 192.168.0.0/16 이라면
10.0.0.0/8 이나 172.16.0.0/12 대역으로 사용해서 명확히 구분되도록 지정하면 좋겠다. (헷갈리지 않기 위해서)
사설 IP주소에 대한 GPT 형님의 답변
1. 10.0.0.0/8
- IP 범위: 10.0.0.0 – 10.255.255.255
- 서브넷 마스크: 255.0.0.0 (또는 /8)
- 호스트 수: 약 1,670만 개
- 설명: 이 대역은 대규모 네트워크에서 주로 사용됩니다. 하나의 대역에 대규모 네트워크를 설정할 수 있어, 주로 대기업이나 큰 네트워크 환경에서 사용됩니다. 예를 들어, 대규모 사무실이나 대기업의 내부 네트워크에서 여러 부서가 이 범위를 나누어 사용할 수 있습니다.
2. 172.16.0.0/12
- IP 범위: 172.16.0.0 – 172.31.255.255
- 서브넷 마스크: 255.240.0.0 (또는 /12)
- 호스트 수: 약 104만 개
- 설명: 이 대역은 중규모 네트워크에서 자주 사용됩니다. 예를 들어, 중소기업의 네트워크에서 부서 간의 구분 없이 전체적으로 사용할 수 있습니다. 이 범위는 비교적 다양한 용도로 활용되며, 가정용 라우터보다는 주로 기업 환경에서 사용됩니다.
3. 192.168.0.0/16
- IP 범위: 192.168.0.0 – 192.168.255.255
- 서브넷 마스크: 255.255.0.0 (또는 /16)
- 호스트 수: 약 6만 5천 개
- 설명: 이 대역은 가정용 네트워크와 소규모 네트워크에서 매우 일반적으로 사용됩니다. 가정용 라우터나 소규모 사무실의 기본 IP 대역으로 널리 사용되며, 기본적으로 많은 가정용 라우터가 192.168.0.1 또는 192.168.1.1을 게이트웨이 주소로 사용합니다.
# Kubernetes 클러스터 초기화 * 마스터 노드만 실행
# sudo kubeadm init --pod-network-cidr=10.244.0.0/16
sudo kubeadm init --pod-network-cidr=172.16.0.0/16
와우. 클러스터 생성이 됐다.
여기까지 정상이라면 대략 아래와 같은 문구가 나올 것이다.
kubeadm join 192.168.100.101:6443 --token qjuyl0.8lu10et30xfj6dep \
--discovery-token-ca-cert-hash sha256:a2193b2b0481f4dc0e1def5835bcfa110848f7f39bee844b2dcb18defb63d59b
쿠버네티스 접근 정보 저장
마스터 노드, 이후 추가할 워커 노드에도 적용이 필요하다.
root계정, 사용자 계정 모두 실행 필요.
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
네트워크 애드온 설치
네트워크 애드온은 여러 종류가 있다. 이중 Calico 를 이용한 설치를 진행한다.
# calico 네트워크 애드온 설치
sudo kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
노드 상태 확인
kubectl get nodes
이렇게 나오면 작업이 완료된 것.
여기서 명령어만 더 나열할까 하다가 이젠 부족한 지식을 채워넣고 갈 때가 된 것 같아 이쯤에서 끊어주는게 좋을 것 같다.