AOC55

Backend, Devops, Cloud, kubernetes

Container/kubernetes (k8s)

쿠버네티스 :: GCP(VM)에 kubernetes Cluster 직접 구축하기 - 3 (23.01 수정)

aoc55.soft@gmail.com 2022. 3. 12. 19:18

 

 

목표

구글에서 제공하는 GKE를 활용하는 것이 아니라,

GCP의 Compute Engine을 통해서 VM을 생성한 뒤 Master Node, Worker Node를 직접 생성한 뒤,

Docker Engine 설치 및 Kubeadm을 통해 Kubernetes Cluster를 직접 구현해보겠습니다.

 

이전편 보기

https://aoc55.tistory.com/53?category=979845

 

이번편 주요내용

  • kubeadm, kubelet, kubectl 설치하기
  • 쿠버네티스 클러스터 구축하기
  • 네트워킹을 위한 CNI 설치하기
  • 샘플용 POD 실행시켜보기

 


kubeadm, kubelet, kubectl 설치하기

 

(중요) 아래 작업은 VM 4개 모두 공통으로 각각 진행해줍니다.

 

 

이제 kubernetes 클러스터 설치를 진행하도록 하겠습니다.

kubernetes 설치를 위해서는 kubeadm, kubelet, kubectl 등이 필요한데 한꺼번에 설치하도록 하겠습니다.

설치 관련한 자세한 내용은 아래 링크를 참고하시면 됩니다.

https://kubernetes.io/ko/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

 

아래 절차 과정이 현재 낯설으시더라도, 사실 그대로 복붙하시면 됩니다! 

 

참고사항

kubeadm: 클러스터를 부트스트랩하는 명령이다.
kubelet: 클러스터의 모든 머신에서 실행되는 파드와 컨테이너 시작과 같은 작업을 수행하는 컴포넌트이다.
kubectl: 클러스터와 통신하기 위한 커맨드 라인 유틸리티이다.

 

 

 

패키지 업데이트 및 설치 시 필요한 패키지 다운로드

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

 

쿠버네티스 Reposiotry 추가

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

 

kubelet, kubeadm, kubectl 설치

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

 

열심히 설치중...x4

 

 

 

 


쿠버네티스 클러스터 생성하기

드디어 쿠버네티스 환경 및 클러스터 구축에 필요한 설치 과정이 모두 끝났습니다. (docker, kubeadm, .....)

 

이제 kubeadm을 통해 나만의 쿠버네티스 클러스터를 초기화 시키도록 하겠습니다..!

 

 

kubeadm init 으로 클러스터 초기화하기

이 과정은 "마스터 노드" 역할을 수행하는 VM에서만 진행합니다.

 

아래 명령어를 master node(의 역할을 하는 VM)와 연결되어 있는 터미널 창에 입력합니다.

kubeadm init

 

클러스터 초기화 결과

명령어를 입력한 뒤 잠시 대기하면 위와 같은 출력이 뜨게 됩니다.

그림에 표시해놓은 빨간색 박스 기준으로

 

첫번째 박스: 쿠버네티스 클러스터가 정상적으로 초기화 되었다고 합니다..!

두번째 박스: 막 만들어진 클러스터를 여러분들(user)이 사용하기 위해서는 아래와 같이 설정을 해주어야 합니다.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 그대로 복붙해서, 마스터 노드 VM의 터미널에 입력해주도록 합시다.

 

세번째 박스: 

"kubeadm join...." 이라는 명령어에서 알 수 있듯이,

방금 막 여러분이 구축한 클러스터에 다른 노드들을 join 시키기 위한 명령어로 토큰과 함께 구성되어 있습니다.

이를 복사해서, 각 워커노드의 역할을 하는 VM과 연결된 터미널에 붙여넣기 해주도록 하겠습니다.

 

 

kubeadm join... 으로 워커노드를 클러스터에 추가하기

이 과정은 "워커노드" 역할을 수행하는 VM(1~3)에서만 진행합니다.

마스터 노드에서 출력된 "kubeadm join..." 명령어를 복사해서 각 워커노드 터미널에 모두 붙여넣기 해줍니다.  (단, 복사 시 개행 등 주의)

# 예시입니다
kubeadm join XXXXX:6443 --token XXXXXXXX \
	--discovery-token-ca-cert-hash sha256:XXXXXXXX

수행결과

잠시 후에 이 노드는 클러스터에 Join 되었다고 뜨면 성공입니다.

 

 

정상적으로 워커노드가 join 되었는지 확인하기

모든 노드(즉, VM들)이 join 되었는지 확인하기 위해서 아래 명령어를  마스터 노드에서 입력해줍니다.

kubectl get nodes

우리가 생성한 k8s-worker1,2,3이 보이기는 하는데 NotReady라 표기 되어 있습니다.

이는 노드가 join이 되어 있지만 정상적으로 pod 간에 네트워킹이 되지 않는 상태로 CNI를 설치하도록 하겠습니다.

 

 

 


Pod network add-on (CNI) 설치하기

구성한 클러스터 내에 CNI (Container Network Interface)를 설치하여, Pod들이 서로 통신이 가능하도록 해줘야 합니다.

 

CNI에는 여러종류가 있으며, 저는 WeaveNet을 설치하였습니다. (참고)

https://www.weave.works/docs/net/latest/kubernetes/kube-addon/#install

 

설치는 사실 아래 명령어를 마스터 노드에서 실행해주면 다입니다.

kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave-daemonset-k8s.yaml

 

노드 상태 다시 확인해보기

CNI(실질적으로는 WeavNet)을 설치한 뒤 잠시 대기 후에 다시 마스터 노드에서 조회해보겠습니다.

 

kubectl get nodes

조회 결과 노드 상태가 기존 NotReady에서 -> 이제 Ready 상태로 바뀌었습니다!

 

 

 

 


테스트용 Pod  확인차 띄어보기

정상적으로 쿠버네티스 클러스터가 만들어졌는지 확인하기 위해서 간단한 Pod를 띄어보도록 하겠습니다.

nginx Pod 띄어보기

아래 명령을 마스터 노드에서 실행합니다.

kubectl run test-nginx --image=nginx:1.14

 

결과 확인

우리가 만든 pod가 정상적으로 실행됬는지 조회해보도록 하겠습니다.

kubectl get pods -o wide

그 결과로 우리가 만든 pod가 worker 노드 1번에서 정상적으로 Running인걸 확인할 수 있습니다!

 

 


 

마무리

지금까지 Goolge의 Compute Enginge VM 4개를 통해서,

직접 kubeadm을 통해서 kubernetes 클러스터를 구축해보았습니다. 

 

 

끝.