Kubernetes 1.30 을 Ubuntu 24.04에 설치

Jake·2025년 4월 20일

Setting-Server

목록 보기
4/6

Kubernetes 1.30 버전을 Ubuntu 24.04 LTS 에 설치해보며 이 과정중에 발생했던 에러도 함께 살펴보겠습니다.

Kubernetes 설치 실습을 하기 위한 조건은 아래와 같습니다.

  • Ubuntu 24.04 LTS system
  • system 접근 권한
  • internet 연결
  • 2GB RAM
  • 2 CPU cores
  • 20 GB

Kubernetes Install

Step 1: Ubuntu update

우분투를 업데이트 합니다

sudo apt update && sudo apt upgrade -y

Step 2: Disable Swap (all nodes)

Swap을 Disable 합니다.

sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

그리고 Reboot시 이 설정은 초기화 되므로 다시 설정해주어야 합니다.
만약 하지 않는다면 이후에 kubeadm init 시 아래 에러 메시지와 함께 설치를 실패합니다.

Please disable Swap!

swap이 적용되었는지 확인하는 방법은 아래 명령어를 입력 후 출력이 없으면 비활성화된 상태 = 정상 입니다.

swapon --show

Step 3: Add Kernel Parameters (all nodes)

커널 파라미터를 추가합니다.

sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

변경사항을 load하는 명령어

sudo sysctl --system

잘 적용되었는지 확인하는 명령어는 아래와 같습니다.

lsmod | grep -E 'overlay|br_netfilter'
sysctl net.bridge.bridge-nf-call-iptables
sysctl net.ipv4.ip_forward
sysctl net.bridge.bridge-nf-call-ip6tables

Step 4: Install Containerd Runtime (all nodes)

Containerd를 설치하고 그와 관련된 의존성을 설치합니다.

sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

그리고 설치된 containerd와 패키지를 업데이트 합니다.

sudo apt update
sudo apt install -y containerd.io

Systemd를 Cgroup으로 사용하여 containerd를 구성합니다.

containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

containerd를 재시작 및 활성화를 합니다.

sudo systemctl restart containerd
sudo systemctl enable containerd

Step 5: Add Apt Repository for Kubernetes (all nodes)

Kubernetes Repository를 추가합니다.

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

Step 6: Install Kubectl, Kubeadm, and Kubelet (all nodes)

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

Step 7: Initialize Kubernetes Cluster with Kubeadm (master node)

마지막으로 Kubernetes CLuster를 초기화 해줍니다.

sudo kubeadm init

그러면 아래와 같이 initialized successfully 가 나오게 됩니다.

이후 log에도 나온 것 처럼 cluster에서 이 master node를 사용하기 위해서는 아래 명령어를 추가적으로 입력해야 합니다.

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가 잘 동작하는지 확인하는 명령어는 nodes를 확인하는 것입니다.

kubectl get nodes

Step 8: Add Worker Nodes to the Cluster (worker nodes)

만약 Master node와 Worker node를 따로 구성한다면 worker Node에 아래 kubeadm join를 추가적으로 수행해야 합니다.

아래에 적힌 join 명령어는 예시이며 최초로 kubeadm init 을 성공하게되면 가장 아래에 나오는 부분을 복사하여 붙여넣기를 해야합니다.

kubeadm join 138.197.184.45:6443 --token 72ww2b.6orffywqcf5s4p2z \
        --discovery-token-ca-cert-hash sha256:aafb79cdd45a6e3b3fac01fb3efba0817360b01f90a4b6c3f11567108a36ba67

Step :9 Install Kubernetes Network Plugin (master node)

pod와 cluster 사이에서의 통신을 위해 네트워크 플러그인을 설치합니다.

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml

Step 10: Verify the cluster and test (master node)

최종적으로 확인합니다.

kubectl get pods -n kube-system
kubectl get nodes

Step 11: Deploy test application on cluster (master node)

Nginx 를 배포 테스트를 해봅니다.

kubectl run nginx --image=nginx

Status Check

그리고 containerd, kubelet 설정 확인은

sudo systemctl status containerd
sudo systemctl status kubelet

Error handling

sudo kubeadm init

명령어 이후

E0420 24114 memcache.go:265 couldn't get current server API group list: GET "https://192.168.0.100:6443/api?timeout=32s": connect: connection refused

에러 발생

이는 kube-apiserver에 연결하려 했지만 API 서버가 열려 있지 않아서 실패한 것 입니다.


아래 순서로 체크하였습니다.

  1. sudo systemctl status kubelet 으로 kubelet 상태 확인
    a. 만약 active가 아니라면 sudo journalctl -u kubelet -f 로 로그 확인
    b. Please disable swap 이 나오면 sudo swapoff -a 명령어
  2. sudo crictl ps | grep kube-apiserver 로 api server 동작확인

sudo crictl ps | grep kube-apiserver 을 하니 아래와 같이 warn 발생

warn0000 runtime connect using default endpoints [unix"///run/containerd/containerd.sock ... as the default settings are now deprecated, you should set the endpoint instaed.
warn000 image connect using default endpoints: [unix:///run/containerd/containerd.sock ... as the default settings are now deprecared, you should set the endpoint instaed.

위 에러가 발생하여 이전에 hosts 관련 변경사항이 원인이 되는 것 같아 수정해주었습니다.

127.0.0.1 localhost j[onghunserver -> 추가]
...

그래도 실패하였습니다. 알고 보니 sudo iptables -F 는 영구적인 삭제가 아니고 현재 메모리에 있는 데이터에 대해 삭제된 것이고 이후 reboot 시에는 다시 이전에 저장되었던 내용들을 reload해오고 있었습니다.

iptables에 저장되어있던 기본 정책은 허용한 port 이외에는 모두 DROP 하고 있었습니다. 그래서 api server port가 DROP 되어있어 연결에 실패하였던 것 같습니다.


참고 블로그

0개의 댓글