무지개곰
article thumbnail

싱글노드 클러스터로 연습을 하려고 하였지만 멀티 노드 클러스터 환경을 구축해 보는 것도 경험이고 kubernetes의 다양한 기능을 직접 체험해 보기 위해서는 멀티 노드 클러스터를 활용하는 것이 좋을 것 같아 kubeadm을 이용하여 kubernetes를 설치하였습니다. 그 과정에 있었던 문제들과 해결법을 기록하도록 하겠습니다.

목차

Ubuntu 서버 설치

Docker 설치

Kubernetes 설치

겪은 문제와 해결 방법


Ubuntu Server 설치 및 설정

Ubuntu Server 설치

Ubuntu desktop도 있지만 저는 Server을 설치하며 설정해보고 싶은 마음에 Server를 설치하였습니다.

https://ubuntu.com/download/server

 

Get Ubuntu Server | Download | Ubuntu

Get Ubuntu Server one of three ways; by using Multipass on your desktop, using MAAS to provision machines in your data centre or installing it directly on a server.

ubuntu.com

위의 링크를 들어가 Ubuntu Server를 설치하고 Virtual Box에서 작업을 진행합니다.

Virtual Box에서 새로 만들기를 선택합니다.

 

다운로드하였던 Ubuntu Server를 ISO Image로 선택하고 다음을 눌러줍니다.

자료를 찾아보았을 때 CPU는 2개 이상, 기본 메모리는 3GB 이상으로 설정하라고 보았지만 저는 넉넉하게 기본 메모리는 4096, CPU는 2개로 설정하였습니다.

 

Hard Disk의 경우 25GB로 한 결과 오류가 발생하여 40GB로 넉넉하게 설정하였습니다.

Ubuntu Server 네트워크 설정

위의 설정이 끝나게 되면 Ubuntu가 실행됩니다. 이 상태로 Kubernetes를 활용하려고 한다면 master node와 work ndoe가 같은 IP를 가지게 되어 문제가 발생합니다. 이 부분에 대한 자료를 찾기 어려워 책을 보며 시스템에 대한 기초적인 설명을 듣고 해결하였습니다.

설정을 변경할 Ubuntu Server를 선택하고 위의 사진과 같이 설정을 클릭합니다.

설정창에서 네트워크를 선택하고 네트워크 방식을 어댑터에 브리지로 설정하였습니다. 이렇게 되면 Ubuntu Server가 각각 다른 IP를 부여받게 됩니다. putty로 접근하는 경우는 Ubuntu Server가 받은 IP와 22번 포트로 접근하시면 됩니다.

 

이후의 내용은 별 다를게 없이 기본 설정대로 가면 됩니다. 단 SSH를 선택하는 경우 선택하여 설치해 줍니다.


Docker 설치

많은 자료들이 인터넷에 있지만 공식 문서가 가장 정확할 것이고 시간이 지남에 따라 업데이트될 것이라고 생각하여 Docs의 방식으로 설치하는 방법을 준비하였습니다.

https://docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multiple methods to install.

docs.docker.com

자세한 내용은 위의 사이트에 소개되어 있기에 저는 현시점의 Docs를 따라 설치한 과정을 기록하겠습니다.

 

0. 충돌하는 모든 패키지를 제거하는 경우 다음 명령을 실행합니다.

for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done

1. Docker의 저장소를 설정합니다.

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

2. 최신 버전의 Docker를 설치합니다.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

위의 작업이 완료된다면 docker를 실행시켜 보거나 'docker version' 명령어를 이용하여 설치를 확인합니다.

docker version을 실행하면 위와 같은 결과를 얻을 수 있습니다.


Kubernetes 설치

Docker와 마찬가지로 업데이트가 이루어지는 Docs의 내용이 가장 정확하다고 생각하여 Docs의 내용을 참고하여 설치를 진행하였습니다. 

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

 

Installing kubeadm

This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you have performed this installation process, see the Creating a cluster with kubeadm page. Before you begin A compatible Linux host. The Kuber

kubernetes.io

자세한 내용과 업데이트된 정보를 확인하기 위하여 위의 사이트를 참고해 주세요.

 

master node, work node 공통 과정

현시점에서 Docs를 따라 설치한 과정을 기록하겠습니다.

1.  Kubernetes 저장소를 사용하는 데 필요한 패키지 색인 및 설치 패키지를 업데이트합니다.

sudo apt-get update
# apt-transport-https may be a dummy package; if so, you can skip that package
sudo apt-get install -y apt-transport-https ca-certificates curl

2. Kubernetes 패키지 저장소의 공개 서명 키를 다운로드합니다.

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

3. 적절한 Kubernetes 저장소를 추가합니다.

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

4. 패키지 인덱스를 업데이트하고 kubelet, kubeadm 및 kubectl을 설치하고 해당 버전을 고정합니다.

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

여기까지 master node와 work노드가 같은 진행을 합니다.


master node 과정

swap 기능을 사용하지 않아야 하므로 아래의 명령어를 실행하여 줍니다.

sudo swapoff -a

 

swap을 제거하였다면 아래의 명령을 순서대로 실행하여 줍니다.

sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
sudo kubeadm init

3 가지의 명령 중 kubeadm init을 진행하여도 되는 경우가 있는 것 같지만 저의 경우 [ERROR CRI]: container runtime is not running 문제가 발생하여 3 가지 모두 실행하였습니다.

 

init이 완료되면 아래와 같은 내용이 나오게 되며 이를 복사하여 저장해 둡니다.

 

마지막으로 아래의 명령어를 사용하여 root가 아닌 사용자에 대해 kubectl이 작동하도록 설정합니다.

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

여기까지가 master node 설정이었습니다.


work node 과정

swap을 제거해 주시고 container runtime 파일을 제거하고 containerd를 재 실행합니다.

sudo swapoff -a
sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd

 

위의 작업이 완료되었다면 master node에서 kubeadm init의 결과로 나왔던 내용을 복사하여 붙여 넣어줍니다.

sudo kubeadm join 172.30.1.14:6443 --token zoulj4.mfo7d79buy4slc3v \
        --discovery-token-ca-cert-hash sha256:3197fcc4ab0083b9c30d7c53983143b5aaa8245a1f022819afeefaf465b5a0e3

 

붙여 넣은 후 실행을 하고 기다리면 아래와 같은 내용이 나온다면 work node가 master node에 join 되었습니다.

master node에서 kubectl get nodes를 입력하면 아래와 같이 출력되고 node1이 추가된 것을 확인할 수 있습니다.

아직 STATUS가 NotReady입니다. 이에 대하여 다음 글에서 다루도록 하겠습니다.


겪은 문제와 해결 방법

설치를 하며 겪었던 문제들과 해결 방법들을 기록해 두겠습니다.

user is not running as root

root 계정으로 명령을 내리지 않아서 그렇다는 의미로 생각하여 root 계정으로 접속하였더니 해결되었습니다.

container runtime is not running

위에서 설명 들였던 것처럼 config.toml 파일을 제거하여 해결하였습니다. 아래의 순서대로 입력해 주시면 됩니다.

sudo rm /etc/containerd/config.toml
sudo systemctl restart containerd
sudo kubeadm init

Running pre-flight checks에서 멈춤

master node의 ip와 work node의 ip가 동일하여 작업이 멈추었습니다. 네트워크 설정을 어댑터에 브리지로 변경하여 해결하였습니다.

did you specify the right host or port?

저의 경우에 root계정으로 다운을 진행하니 오류가 생겼습니다. 따라서 sudo 명령을 사용하여 설치를 진행하였더니 문제가 없었습니다.

profile

무지개곰

@무지개곰

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!