공부/Kubernetes

Ubuntu Server 22.04 LTS에 Kubernetes 설치하기

G.K. 2023. 9. 15. 16:38

마인크래프트 서버를 독커로 돌리다가 쿠버네티스에도 흥미를 가지게 되어 설치해보려 한다.

구글링을 해보니 대부분 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 설치법

 

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

을 입력하면 코드가 나오는데, 그 코드를 워커 노드에 입력해주면 된다.