쿠버네티스 기반 서비스를 구성하기 위해서 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 <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload
systemctl restart docker
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 '\n')"
선택지 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 명령어로 모든 노드가 준비되었는지 확인해주세요.
여기까지 완료하셨다면, 쿠버네티스 클러스터 구성이 완료되었습니다 :)
'Web > Infra' 카테고리의 다른 글
Kubernetes CKA 합격 후기 [2021-10-20] (4) | 2021.10.21 |
---|---|
[Kubernetes] Replica Set, 파드의 개수을 항상 유지 (0) | 2020.10.04 |
[Kubernetes] Pod, 쿠버네티스의 가작 작은 단위 (0) | 2020.10.04 |
도커 컨테이너의 로그 조회 및 저장 (0) | 2020.09.13 |
도커 네트워크의 구조 (0) | 2020.09.06 |
댓글