쿠버네티스 교육/강의 내용 정리

220620_4_k8s_kubeadm을 이용한 쿠버네티스 클러스터 구성

kimhope 2022. 6. 20. 18:04
728x90
앞에서 kubespray를 이용하여 쿠버네티스 설치를 해보았으므로
이번에는 마스터 노드의 스냅샷을 1로 복원하고 kubeadm을 이용해 쿠버네티스 설치 진행

 

모든 VM에 docker-ce 설치


리포지토리를 이용한 설치

도커 리포지토리 설정

  • HTTPS를 통해 리포지토리를 사용할 수 있도록 패키지 인덱스 업데이트 및 apt 패키지 설치
vagrant@kube-master1:~$ sudo apt-get update
vagrant@kube-master1:~$ sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release

 

 

  • Docker 공식 GPG 키 추가
vagrant@kube-master1:~$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

 

  • 리포지토리 설정
vagrant@kube-master1:~$ echo \
>   "deb [arch=amd64 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

 

도커 엔진 설치

  • apt 패키지 업데이트 및 Docker Engine, containerd 설치
vagrant@kube-master1:~$ sudo apt-get update
vagrant@kube-master1:~$ sudo apt-get install docker-ce docker-ce-cli containerd.io

 


 

모든 VM에 kubeadm, kubelet, kubectl 설치


 

kubeadm 설치

kubeadm: 클러스터를 부트스트랩하는 명령

kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트

kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티

  • 구글 클라우드의 공개 사이닝 키 다운로드
vagrant@kube-master1:~$ sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg

 

  • 쿠버네티스 apt 리포지토리 추가
vagrant@kube-master1:~$ 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

 

  • apt 패키지 업데이트 및 kubelet, kubeadm, kubectl 설치
vagrant@kube-master1:~$ sudo apt-get update
vagrant@kube-master1:~$ sudo apt-get install -y kubelet=1.19.11-00 kubeadm=1.19.11-00 kubectl=1.19.11-00
vagrant@kube-master1:~$ sudo apt-mark hold kubelet kubeadm kubectl

 


 

Control-Plane 초기화


 

kubeadm으로 클러스터 생성

  • control-plane 초기화
vagrant@kube-master1:~$ sudo kubeadm init --control-plane-endpoint 192.168.56.11 --pod-network-cidr 10.233.0.0/16 --apiserver-advertise-address 192.168.56.11

Your Kubernetes control-plane has initialized successfully!

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.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join 192.168.56.11:6443 --token e1s1aa.vnseumbldt9vq4uu \
    --discovery-token-ca-cert-hash sha256:28b7199719f1409880704e77657ec30a527562501ec03870d7738c0aff5188cc \
    --control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.56.11:6443 --token e1s1aa.vnseumbldt9vq4uu \
    --discovery-token-ca-cert-hash sha256:28b7199719f1409880704e77657ec30a527562501ec03870d7738c0aff5188cc

 

  • worker 노드 추가를 위해 명령어 복사
# 실행 결과 마지막 부분
kubeadm join 192.168.56.11:6443 --token e1s1aa.vnseumbldt9vq4uu \
    --discovery-token-ca-cert-hash sha256:28b7199719f1409880704e77657ec30a527562501ec03870d7738c0aff5188cc

 

 

  • 루트 사용자가 아닌 일반 사용자 계정으로 실행
vagrant@kube-master1:~$ mkdir -p $HOME/.kube
vagrant@kube-master1:~$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
vagrant@kube-master1:~$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

vagrant@kube-master1:~$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

 

  • 노드 상태 확인
vagrant@kube-master1:~$ kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
kube-master1   Ready    master   12m   v1.19.11

 

 


 

worker 노드 추가


 

각각의 노드에 접속하여 노드를 클러스터에 추가

  • 위에서 복사해 놓은 kubeadm join 명령으로 추가
# kube-node1

vagrant@kube-master1:~$ ssh kube-node1
vagrant@kube-node1:~$ sudo kubeadm join 192.168.56.11:6443 --token e1s1aa.vnseumbldt9vq4uu \
>     --discovery-token-ca-cert-hash sha256:28b7199719f1409880704e77657ec30a527562501ec03870d7738c0aff5188cc

# kube-node2
vagrant@kube-master1:~$ ssh kube-node2
vagrant@kube-node2:~$ sudo kubeadm join 192.168.56.11:6443 --token e1s1aa.vnseumbldt9vq4uu \
>     --discovery-token-ca-cert-hash sha256:28b7199719f1409880704e77657ec30a527562501ec03870d7738c0aff5188cc

# kube-node3
vagrant@kube-master1:~$ ssh kube-node3
vagrant@kube-node3:~$ sudo kubeadm join 192.168.56.11:6443 --token e1s1aa.vnseumbldt9vq4uu \
>     --discovery-token-ca-cert-hash sha256:28b7199719f1409880704e77657ec30a527562501ec03870d7738c0aff5188cc

 

  • 노드 상태 확인
vagrant@kube-master1:~$ kubectl get nodes
NAME           STATUS     ROLES    AGE   VERSION
kube-master1   Ready      master   17m   v1.19.11
kube-node1     Ready      <none>   62s   v1.19.11
kube-node2     Ready      <none>   36s   v1.19.11
kube-node3     NotReady   <none>   12s   v1.19.11
728x90