Kubernetes

Kubernetes Master Node only 설치 방법

호랑범고래 2023. 1. 25. 11:07
반응형

kubernetes 환경 구성 시 VM을 이용한 Master Node x1, Worker Node x2 를 기본으로 합니다.

실제 운영 서버가 아닌 가상화 환경이나 테스트 용도의 Bare Meta에 1개의 Node만 구성하여 테스트 할 수 있는 환경을 설정하고자 할 때, Master Node x1에서 어떻게 설치를 해야하는지에 대한 설명을 하려고 합니다.

0. 설치 환경

Ubuntu 20.04.05 LTS( $ lsb_release -a )

Kubernets 1.23.16 ($ kubeadm version )

Container Runtime: Docker 20.10.22 ($ docker version )

Kubernetes 1.24이후 버전은 DockerShim이 k8s 기본패키지에서 삭제되어 지원을 위해서는 cri-dockerd라는 써드파티 어댑터를 사용해야 합니다. 자세한 내용은 공식 사이트를 참고하세요.
https://kubernetes.io/ko/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd/

 

1.  필수 패키지 설치

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg lsb-release

 

2. Swap Disable

sudo swapoff -a && sudo sed -i '/swap/s/^/#/' /etc/fstab

 

3. 방화벽 비활성화

sudo systemctl stop firewalld
sudo systemctl disable firewalld

 

4. Docker 설치

4.1 Docker GPG Key 추가

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

4.2 Docker Repository 등록

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4.3 Docker 패키지 설치

sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

4.4 설치 상태 확인

sudo systemctl status docker

4.5 시스템 시작 시 Docker 실행

sudo systemctl enable docker
sudo systemctl start docker

 

5. Node간의 통신을 위한 네트워크 브릿지 설정 (Optional)

나중에 Worker Node를 추가할 계획이라면 아래 설정을 해놓는 것이 좋다. 이 설정은 Worker Node에도 동일하게 해주어야 합니다.

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

# Apply sysctl params without reboot
sudo sysctl --system

 6. Kubernetes 설치

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/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=1.23.16-00 kubeadm=1.23.16-00 kubectl=1.23.16-00
sudo apt-mark hold kubelet kubeadm kubectl

7. Master Node 초기화

# 마지막 인자값인 사설IP 주소는 시스템에 따라 자유롭게 설정하면 된다.
sudo kubeadm init --pod-network-cidr 10.174.0.0/16
# 일반 유저 일 때
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# Root User 일 경우 추가로 아래 명령어 까지
export KUBECONFIG=/etc/kubernetes/admin.conf

마지막의 kubeadm join ---- 이후의 토큰값은 Worker Node 추가 계획이 있다면 별도로 저장해 두면 좋습니다.

node 상태를 체크해 봅시다.

만약 일반 계정에서 아래와 sudo 명령어 없이 kubectl 명령어 사용시 아래와 같은 오류가 발생하면
error: error loading config file "/etc/kubernetes/admin.conf": open /etc/kubernetes/admin.conf: permission denied
아래 명령어를 입력하면 sudo 없이 사용 가능합니다.
$ export KUBECONFIG=$HOME/.kube/config
kubectl get nodes

Status가 NotReady 상태입니다. kube-system namespace를 확인합니다.

kubectl get all -n kube-system

coredns pod가 Pening상태임을 확인할 수 있습니다.

coredns 활성화를 위해 CNI를 설치해 줍니다.

 

8. CNI(Container Network Interface)

파드 간 통신을 위한 Kubernetes 네트워크 인터페이스 라고 생각하시면 좋을 것 같습니다.

8.1 Calico 설치

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/master/manifests/calico.yaml

모두 설치 이후 pod상태를 확인해봅니다.

kubectl get all -A

 

8.2 Flannel 설치 ( coredns가 여전히 동작하지 않을 시 )

kubectl apply -f https://github.com/coreos/flannel/raw/master/Documentation/kube-flannel.yml

MasterNode의 Status가 Ready로 바뀌었는지 확인힙니다.

9. Control-Plain에 Pod 생성을 위한 Taint 설정

kubectl taint node master node-role.kubernetes.io/master-

10. 동작 확인 테스트

간단한 nginx pod를 만들어 생성에 문제가 없는지 확인해 봅니다.

kubectl run test --image=nginx
kubectl get pod/test

여기까지 설치가 완료 되었습니다.

kubernetes는 설치 준비과정이 많아 설치하는데 어려움이 있을 수 있습니다. 순서대로 진행하신다면 환경 구성에 어려움을 없을 것으로 생각됩니다. 추가 질문은 댓글 남겨주시면 답변 드리겠습니다.

 

다음에는 1.24이후 버전에서 k8s설치하는 방법에 대한 포스팅을 다뤄보도록 하겠습니다.

 

참고

https://kubernetes.io/ko/docs/tasks/tools/install-kubectl-linux/

https://kubernetes.io/ko/docs/tasks/administer-cluster/migrating-from-dockershim/migrate-dockershim-dockerd/

반응형