Ubuntu Server 22.04 LTS에 Kubernetes 설치하기
마인크래프트 서버를 독커로 돌리다가 쿠버네티스에도 흥미를 가지게 되어 설치해보려 한다.
구글링을 해보니 대부분 20.04 LTS 기반이었고, 내 메인보드의 이더넷 어댑터(리얼텍 2.5G 어쩌구)와는 호환이 안 되어서 22.04 환경에서 진행해야 했으며, 수많은 우여곡절이 있었다. (Container Runtime으로 containerd를 선택했더니 무한 재시작이라던가)
다음에 우분투 서버 22.04를 다시 설치하게 될 때를 위하여, 그리고 나와 같은 상황에 처한 중생들을 위하여 이 글을 적는다.
minikube는 사용하지 않는다. kubeadm, kubectl, kubelet 등을 설치한다.
https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
kubeadm 설치하기
이 페이지에서는 kubeadm 툴박스 설치 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm으로 클러스터 생성하기 페이지를 참고한다.
kubernetes.io
Prerequisit
- 호환되는 리눅스 머신. 여기서는 Ubuntu Server 22.04 LTS 머신 두 대를 사용했다.
- 2 GB 이상의 램을 장착한 머신.
- 2 이상의 CPU.
- 클러스터의 모든 머신에 걸친 전체 네트워크 연결. (공용 또는 사설 네트워크면 괜찮음)
- 스왑의 비활성화. kubelet이 제대로 작동하게 하려면 반드시 스왑을 사용하지 않도록 설정한다.
모든 머신에 아래 작업을 해준다.
스왑의 비활성화.
스왑의 비활성화 방법.
sudo su 혹은 sudo -i 로 root 권한으로 들어간다.
swapoff -a
sudo nano /etc/fstab
# sudo vi /etc/fstab 도 가능. 무엇이든 /etc/fstab을 수정하면 된다.
# swap과 관련된 부분 (대체로 맨 마지막 줄이었다)을 주석 처리한다.
Container Runtime, CRI로 docker를 사용한다. containerd를 사용하는 가이드는 많았지만 직접 사용해보니 재시작만 300번을 넘겨서 포기했다.
Docker 설치법
마인크래프트 서버를 독커로 돌려보려고 한다. GUI 버전보다 가벼울테고... https://docs.docker.com/engine/install/ubuntu/ Install Docker Engine on Ubuntu Jumpstart your client-side server applications with Docker Engine on Ubuntu. T
grantkim725.tistory.com
cri-dockerd 설치
kubernetes의 cri로 docker를 사용하려면 cri-dockerd 어댑터를 따로 설치해줘야 한다.
https://github.com/Mirantis/cri-dockerd
GitHub - Mirantis/cri-dockerd: dockerd as a compliant Container Runtime Interface for Kubernetes
dockerd as a compliant Container Runtime Interface for Kubernetes - GitHub - Mirantis/cri-dockerd: dockerd as a compliant Container Runtime Interface for Kubernetes
github.com
root 권한으로 들어간 뒤, go를 설치해주고, advanced 셋업을 진행해준다.
go 설치법
sudo snap install go --classic
cri-dockerd advanced 설치법
git clone https://github.com/Mirantis/cri-dockerd.git
cd cri-dockerd
mkdir bin
go build -o bin/cri-dockerd
mkdir -p /usr/local/bin
install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
cp -a packaging/systemd/* /etc/systemd/system
sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
systemctl daemon-reload
systemctl enable cri-docker.service
systemctl enable --now cri-docker.socket
아래의 메세지를 확인하여 설치를 확인한다
Created symlink /etc/systemd/system/multi-user.target.wants/cri-docker.service → /etc/systemd/system/cri-docker.service.
Created symlink /etc/systemd/system/sockets.target.wants/cri-docker.socket → /etc/systemd/system/cri-docker.socket.
대망의 kubernetes 설치.
https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
kubeadm 설치하기
이 페이지에서는 kubeadm 툴박스 설치 방법을 보여준다. 이 설치 프로세스를 수행한 후 kubeadm으로 클러스터를 만드는 방법에 대한 자세한 내용은 kubeadm으로 클러스터 생성하기 페이지를 참고한다.
kubernetes.io
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /etc/apt/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | 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
Control-plane 설정
sudo kubeadm init \
--apiserver-advertise-address=<Internal IP> \
--node-name <Desired Name> \
--pod-network-cidr=172.16.0.0/16
pod-network-cidr 경우에는 calico를 사용하기에, 192.168.0.0/16 대역폭을 쓰라고 되어있지만, 혼선을 방지하기 위해 172.16.0.0./16을 사용했다.
Initialization이 끝난 후,
root 권한이 아닌 사용자 권한으로
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
를 입력해 주고, root 권한으로 다시
export KUBECONFIG=/etc/kubernetes/admin.conf
를 입력해준다.
CNI 설정
https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises
Install Calico networking and network policy for on-premises deployments | Calico Documentation
Install Calico networking and network policy for on-premises deployments.
docs.tigera.io
curl https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml -O
그리고 받은 calico.yaml 파일을 수정하여 CALICO_IPV4POOL_CIDR 부분의 주석처리를 해제하고 주소를 172.16.0.0/16 으로 바꿔 저장해준다.
그 다음,
kubectl apply -f calico.yaml
으로 실행해준다.
워커 노드에서 join
아까 설정해둔 control plane에서
kubeadm token create --print-join-command
을 입력하면 코드가 나오는데, 그 코드를 워커 노드에 입력해주면 된다.