[Kubernetes] kubeadm 설치하기

2021. 11. 17. 08:54Kubernetes/Kubernetes_Service

반응형

 

안녕하세요, 달콤한달팽이입니다.🐌🙂

 

이번 시간에는 Kubeadm(쿠베어드민)이라는 도구를 사용하여,

EC2에서 쿠버네티스 사용이 가능하도록 클러스터를 구축해보겠습니다.

 

클라우드를 주로 다룰 경우,

IDC에서 주로 사용되는 kubeadm을 사용할 일은 별로 없으므로

이러한 도구도 있고, 이러한 설치 방법이 있다 - 정도로만 봐주시면 될 것 같습니다 :) 


Kubeadm이란?

Kubeadm이란, 쿠버네티스 환경을 구성하는 다양한 방법 중 하나로

클러스터를 빠르고 쉽게 구축할 수 있도록 다양한 기능을 제공합니다.

 

주로 IDC에서 사용되기 때문에 앞으로 사용할 AWS EKS를 구축하는 것과는 차이가 있지만,

관리형 쿠버네티스인 EKS에서 수정하기 힘든 부분도 직접 커스터마이징 할 수 있다는 특징이 있습니다.


1) EC2 생성 및 설정

kubeadm을 설치하기 위해 서버를 3대 생성했습니다.

 

세 대 모두 Amazon Linux 2 기본 이미지를 사용하였으며, 

3대 중 1대는 마스터 노드(Control Plane), 2대는 워커 노드(Worker Node)로 구성할 예정입니다.

 

이제 세 대의 서버를 구분하기 용이하도록 Hostname을 변경해주세요!

sudo su -
hostnamectl set-hostname {Hostname}
hostname

 

이제 모든 서버의 swap 기능을 비활성화 시켜두겠습니다.

 

swap 기능이란, 가용 자원을 모두 소진할 경우 부족한 자원을 끌어 쓰는 기능을 의미합니다.

 

쿠버네티스의 특성상 컨테이너 자원을 제한하고 노드의 자원을 최대한으로 활용하는 것을 목표로 하나, 

swap 기능으로 인해 자원을 모두 소진했음에도 부가 워크로드 수행이 가능해지므로 비활성화가 진행되어야 합니다!

sudo su
swapoff -a
echo 0 > /proc/sys/vm/swappiness
sed -e '/swap/ s/^#*/#/' -i /etc/fstab
exit

 

이제 Docker를 설치하겠습니다.

(쿠버네티스는 Docker를 관리하는 도구이므로 Docker의 사용이 가능해야합니다!)

yum install -y docker
amazon-linux-extras install -y docker
systemctl start docker
systemctl enable docker

 

이제 쿠버네티스 패키지 리포지토리를 추가해줍니다.

tee /etc/yum.repos.d/kubernetes.repo <<EOF

[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

 

이후 kubeadm, kubelet, kubectl 패키지를 설치하고, kubelet을 시작합니다.

yum install -y kubeadm kubelet kubectl
systemctl start kubelet
systemctl enable kubelet

 

마지막으로 커널 파라미터를 설정합니다.

echo "net.bridge.bridge-nf-call-iptables=1" | sudo tee -a /etc/sysctl.conf
sysctl -p

 

2) 마스터 노드(Control Plane) 설정

이제 3대 중 한 대의 서버를 마스터 노드로 설정해주는 작업을 진행해보겠습니다.

 

kubeadm init

 

 

kubeadm을 초기화시켜주면 아래와같이

마스터 노드를 일반 사용자로 등록하는 명령어워커 노드를 등록할 수 있는 명령어를 제공해줍니다.

 

우선 첫 명령어 세 줄을 사용해 해당 마스터 노드를 일반 사용자로 등록해주세요!

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

 

이후 워커 노드를 등록하는 명령어를 복사해주세요!

 

만약 토큰값이 기입된 명령어를 복사해두지 못했다면, 아래와 같이 토큰 값을 재확인할 수 있습니다.

kubeadm token list

 

3) 워커 노드(Worker Node) 설정

이제 마지막으로 클러스터에 워커 노드를 설정해보도록 합시다.

 

앞서 마스터 노드를 초기화 했을 때, 워커 노드를 등록할 수 있는 명령어를 전달받았습니다.

kubeadm join {Control Plane IP}:6443 --token {token} \
--discovery-token-ca-cert-hash sha256:{discover token ca cert hash}

 

이를 그대로 복사하여 워커 노드가 될 서버에 기입하면 등록 완료 문구와 함께 워커 노드가 등록됩니다!

 

4) 클러스터 확인 및 에러 해결

위의 모든 과정이 정상적으로 수행되었다면,

마스터 노드에서 kubectl 명령어가 사용 가능해지며 이를 통해 모든 노드의 상태를 확인할 수 있게 됩니다.

kubectl get nodes

 

이후에 정상적으로 Pod이 올라왔는지 확인해봅시다.

(Pod이 무엇인지, Node가 무엇인지에 대해서는 다음 글에서 다뤄볼 예정입니다!)

kubectl get pods -A

 

하지만 다른 Pod와는 달리 coredns라는 이름의 Pod는 Pending 상태에서 멈춰있음을 확인할 수 있습니다.

 

이는 마스터 노드에서 컨테이너 간 통신을 위해 개발된 CNI가 설치되어있지 않기 때문입니다.

CNI는 Calico, Flannel 등 여러가지가 있지만, 이번 실습에서는 가장 유명한 Calico를 설치해보겠습니다.

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

 


지금까지 IDC에서 사용되는 대표적인 쿠버네티스 도구 Kubeadm을 설치하는 방법을 알아보았습니다.

 

Cloud환경에서 사용될 경우는 적으나,

쿠버네티스에 대해 더 자세히 공부해보시고 싶은 분들은 한 번 설치해보고

앞으로 사용할 EKS와의 차이점을 경험해보시는 데에 사용하시면 좋을 것 같습니다!

 

감사합니다.

반응형