직접 쿠버네티스 클러스터를 구성해보자 With NCP

직접 쿠버네티스 클러스터를 구성해보자 With NCP

쿠버네티스 기반 서비스를 구성하기 위해서 AWS, GCP, NCP 등의 플랫폼을 사용할 때에는 두 가지 선택지가 있습니다.

1. 클라우드에서 제공해주는 쿠버네티스 서비스 이용하기

2. 직접 머신을 발급받아 쿠버네티스 구성하기

대부분의 상황에서는 클라우드 서비스에서 구성해주는 쿠버네티스 서비스를 이용하는 편이 손쉽고 간편하게 관리받을 수 있습니다. 하지만 쿠버네티스를 학습하고 있고, 어떻게 클러스터를 구성해야 할지 직접 핸즈온을 해보고 싶다면 2번 방법을 통해 간접적으로 간단하게 쿠버네티스 클러스터를 구성해볼 수 있습니다.

방화벽 포트 열기

쿠버네티스 설치를 위해서는 필수로 열려있어야 하는 포트가 있습니다.

공통

TCP 22번 포트를 열어주셔야 합니다. [SSH를 하기 위함]

마스터 노드

TCP Inbound 6443 Kubernetes API server All TCP Inbound 2379-2380 etcd server client API kube-apiserver, etcd TCP Inbound 10250 Kubelet API Self, Control plane TCP Inbound 10259 kube-scheduler Self TCP Inbound 10257 kube-controller-manager Self

워커 노드

TCP Inbound 10250 Kubelet API Self, Control plane TCP Inbound 30000-32767 NodePort Services† All

위 정보를 ACG 설정에서 설정해주어야 합니다.

노드 두 개 발급받기

쿠버네티스 클러스터는 클러스터를 관리하는 마스터 노드와 실제로 어플리케이션이 동작하는 워커 노드가 있습니다. 각각 여러개를 동작하게 만들 수도 있고 마스터와 워커노드 각 하나씩 동작하도록 만들수도 있습니다.

마스터와 워커노드 각 하나씩으로 동작하는 클러스터를 구성하기 위해서는 우선 기본 리눅스 머신을 발급받아야 합니다. NCP 콘솔에서 Server > 서버 생성으로 가신 후 Ubuntu 16.04 버전을 선택합니다. 그 후 적절히 CPU와 메모리 등을 선택해주시고 생성해주시면 됩니다. 서버 접속은 인증키를 이용하여 가능하기 때문에 인증키가 없으신 분들은 서버 생성 시 같이 생성해두시고, 소중히 보관해주시면 됩니다. 키 분실 시 서버 접속이 불가능해집니다!

서버 발급 이후에는 접속을 위해 포트 포워딩 설정을 진행해야 합니다. 서버 우클릭 > 포트 포워딩 설정으로 들어가면 되며, 포트는 아무 포트나 입력해주세요! 저는 각각 2222, 2223번 포트를 할당해주었습니다.

머신을 발급받으셨다면 XShell 등을 이용하여 접속해주세요. 아래 그림처럼 두 머신에 모두 연결해두고 작업하시면 왔다 갔다 하면서 작업할 때 편리하게 작업할 수 있습니다.

설정을 마치셨다면 서버 우클릭 > 관리자 비밀번호 확인을 통해 root계정의 비밀번호를 조회한 후 서버에 접속해주세요.

어떤 노드를 마스터로 두고 워커로 지정할지는 자유롭게 마음속으로 미리 결정해주세요.

마스터 / 워커 노드 공통

도커 설치

컨테이너 런타임을 설치해야 쿠버네티스 구성이 가능합니다. 컨테이너 런타임은 여러 종류가 있지만 그 중 가장 널리 쓰이는게 바로 도커입니다. 마스터와 워커노드 모두 도커를 설치해야 합니다. 도커 설치는 여기를 참고해주세요.

참고로, NCP는 sudo 명령어를 사용하면 에러가 발생합니다. sudo 없이 명령어를 사용해주세요! (루트 계정으로 로그인되어있음)

apt-get update apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 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 apt-get update apt-get install docker-ce docker-ce-cli containerd.io

docker 드라이버 교체

cat > /etc/docker/daemon.json <

Kubeadm, Kubelet, Kubectl 설치

쿠버네티스 클러스터를 구성할 때 가장 코어가 되는 3가지 툴을 설치해야 합니다. 간단하게 3가지 툴의 사용처를 알아보자면, 아래와 같습니다.

kubeadm은 클러스터를 구성하고, 업데이트할 때 사용

kubelet은 작업이 생겼을 때 실제로 머신에서 작업을 진행하는 머신마다 하나씩 있는 작업 관리자 역할

kubectl은 쿠버네티스 클러스터에 명령을 내리기위해 사용하는 CLI

apt-get update apt-get install -y apt-transport-https ca-certificates curl 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" | tee /etc/apt/sources.list.d/kubernetes.list apt-get update apt-get install -y kubelet kubeadm kubectl apt-mark hold kubelet kubeadm kubectl systemctl enable kubelet

스왑 메모리 비활성화

kubelet은 스왑 메모리를 사용하도록 설정할 시 에러가 발생할 수 있습니다. 그래서 마스터/워커노드 모두 스왑메모리를 사용하지 않도록 설정해야 합니다.

# 아래 명령어를 모두 실행해야 합니다. # 현재 스왑메모리 비활성화 swapoff -a # 영구적으로 비활성화 sed -i '2s/^/#/' /etc/fstab

마스터/워커 노드에서 공통적으로 진행할 작업은 여기까지입니다.

마스터 노드 세팅

쿠버네티스 클러스터를 구성해봅시다.

kubeadm config images pull kubeadm init

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 Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf 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/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 10.41.82.130:6443 --token 48u8a5.w5auxkwgbxgl3jj5 \ --discovery-token-ca-cert-hash sha256:4d3bf6f22cdb64474342878435c89948b5d4d128576320a40c9b15628049de22

위 명령어를 입력하면 워커 노드를 클러스터로 참여시키기 위하 명령어가 출력됩니다. 잘 보관해둡시다. 워커 노드에서는 아래쪽 두줄의 명령어만 입력해도 바로 조인이 가능합니다.

kubeadm으로 클러스터 구성을 완료하셨다면, kubectl 설정을 진행해주시면 됩니다.

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

이후 파드 끼리의 통신을 위해 네트워크 플러그인을 설치해주세요. 아래 중 하나를 자유롭게 선택해서 설치해주시면 됩니다.

선택지 1번, Weave

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '

')"

선택지 2번, Flannel

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

선택지 3번, Calico

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

워커 노드 세팅

마스터 노드에서 kubeadm init을 할 때 출력된 문구를 입력하기만 하면 됩니다.

kubeadm join 10.41.82.130:6443 --token 48u8a5.w5auxkwgbxgl3jj5 \ --discovery-token-ca-cert-hash sha256:4d3bf6f22cdb64474342878435c89948b5d4d128576320a40c9b15628049de22

모두 완료되었다면 kubectl get node 명령어로 모든 노드가 준비되었는지 확인해주세요.

여기까지 완료하셨다면, 쿠버네티스 클러스터 구성이 완료되었습니다 :)

from http://deveric.tistory.com/122 by ccl(A) rewrite - 2021-11-17 02:00:52