JUST WRITE

AWS EC2 Kubernetes Cluster 설치(2) Kubeadm - Master,Worker 설정 본문

MLOps/Kubernetes

AWS EC2 Kubernetes Cluster 설치(2) Kubeadm - Master,Worker 설정

천재보단범재 2022. 12. 1. 00:12

Kubeadm - Master, Worker 설정

 

 

Kubeadm - Master, Worker 설정

Kubernetes Cluster 모든 Node에 containerd 설치가 완료하고 나면

이제 Kubeadm 설치하고 Kubeadm을 통해 Kubernetes Master, Worker 설정을 하겠다.

Kubeadm 설치

모든 Node에 Kubeadm과 필요한 패키지를 설치한다.

설치가 필요한 패키지는 아래와 같다.

  • Kubeadm : Kubernetes Cluster를 Bootstrap
  • Kubelet : Node내 Pod의 Container를 각종 작업을 수행
  • Kubectl : Kubernetes Cluster를 control 할 수 있는 command interface

위 패키지를 설치하기 위해 Kubernetes apt Repository를 추가한다.

# Repository 추가하기 전에 필요한 패키지 설치
$ sudo apt-get update
$ sudo apt-get install -y apt-transport-https ca-certificates curl

# 구글 키 download
$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

# Repository 추가
$ 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

패키지 설치을 위한 Repository를 추가한 후 필요한 패키지를 추가한다.

$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl

Kubeadm으로 Cluster 설치

필요한 패키지 설치 후 Kubernetes Cluster를 설치한다.

Master와 Worker에서 하는 작업이 다르다.

Master 설치

Mater Node는 Kubernetes Control plane으로 동작한다.

Kubeadm init 명령어를 통해 세팅한다.

$ sudo kubeadm init --control-plane-endpoint=k8smaster --apiserver-advertise-address=${k8smaster ip} --pod-network-cidr=10.244.0.0/16

Your Kubernetes control-plane has initialized successfully!

Master Node를 Control plane으로 설치했다는 메시지와 함께 몇 가지 안내가 나온다.

첫 번째는 Kubectl로 설치한 Kubernetes Cluster에 접속하기 위한 명령어 안내가 나온다.

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a Pod network to the cluster.

두 번째는 Worker Node를 Kubernetes Cluster에 합류하기 위한 명령어가 나온다.

해당 명령어를 복사해서 각 Worker Node에서 실행시키면 된다.

You can now join any number of machines by running the following on each node
as root:

  kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

Worker 설치

Control plane 설치 때 나온 kubeadm join 명령어를 각 Worker Node에 실행한다.

$ sudo kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

명령어를 살펴보면 알겠지만 token값이 들어가는 것을 알 수 있다.

설치 시 join 명령어를 복사하지 못했다면 Master Node에서 아래 명령어를 통해 token 값을 확인한다.

$ sudo kubeadm token list

Kubectl은 Worker에서도 Master에 세팅한 것처럼 가능하다.

해당 포스팅에서는 Master에서만 설정하고 모든 Kubectl 명령어는 Master에서만 실행하였다.

$ kubectl get nodes
NAME         STATUS   ROLES              AGE   VERSION
k8smaster    NotReady    control-plane   1m    v1.25.4
k8sworker1   NotReady    <none>          50s   v1.25.4
k8sworker2   NotReady    <none>          45s   v1.25.4
k8sworker3   NotReady    <none>          40s   v1.25.4

kubectl 명령어를 통해 Worker가 join 한 것을 확인했지만 status가 NotReady이다.

node사이에 Network 세팅을 추가로 해줘야 하기 때문이다.

Network add-on 설치

Node간 Network통신을 위해서 Network add-on을 설치해야 한다.

Calico, Flannel, Weave-net 등이 있으며 Flannel로 설치하려 한다.

아래 명령어를 통해 설치가 가능하다.

$ wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
$ kubectl apply -f kube-flannel.yml

Daemonset으로 모든 Node에 Pod가 실행된다.

아래 kubectl 명령어로 모든 Node에 flannel Pod가 실행된 것을 알 수 있다.

$ kubectl get all -n kube-flannel -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
pod/kube-flannel-ds-d97p4   1/1     Running   0          23h   172.31.40.69    k8sworker1   <none>           <none>
pod/kube-flannel-ds-fjm9x   1/1     Running   0          23h   172.31.56.88    k8sworker3   <none>           <none>
pod/kube-flannel-ds-vmn27   1/1     Running   0          23h   172.31.56.190   k8smaster    <none>           <none>
pod/kube-flannel-ds-x5b87   1/1     Running   0          23h   172.31.54.28    k8sworker2   <none>           <none>

NAME                             DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE   CONTAINERS     IMAGES                                                  SELECTOR
daemonset.apps/kube-flannel-ds   4         4         4       4            4           <none>          23h   kube-flannel   docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2   app=flannel

Network add-on과 DaemonSet에 대해서는 따로 포스팅하려 한다.

이제 모든 Node의 status가 NotReady에서 Ready 바뀐 것을 확인할 수 있다.

$ kubectl get nodes
NAME         STATUS   ROLES           AGE   VERSION
k8smaster    Ready    control-plane   23h   v1.25.4
k8sworker1   Ready    <none>          23h   v1.25.4
k8sworker2   Ready    <none>          23h   v1.25.4
k8sworker3   Ready    <none>          23h   v1.25.4

[참고사이트]

더보기
728x90
반응형
Comments