쿠버네티스(10) : ubuntu 24.04 Cluster 생성 (kubeadm 사용)

NOHHYEONGJUN·2024년 10월 3일

쿠버네티스

목록 보기
11/23

나는 주로 AWS의 EKS를 사용했고,
온프레미스에서 사용할 때에는 kubespary를 사용했다.

이번에 OpenStack을 사용하면서 ubuntu 24.04를 사용해야 한다.
그래서 kubeadm을 이용해 cluster를 구축해보려 한다.


 

 


0. 전제 조건

  • ubuntu 24.04가 설치된 인스턴스
  • root or sudo 접근 권한
  • 인터넷 연결 활성화
  • CPU(vCPU) 2 , RAM 2GB , Storage 20GB 이상

 

 


0-1. 노드 구성

나는 먼저 마스터 노드 1 , 워커 노드 2 구성으로 구축하려 한다.
kubeadm을 이용하면 언제든지 노드를 추가하기 쉽다.


 

 


1. 우분투 최신화 (모든 노드)

sudo apt update && sudo apt upgrade -y

 

 


2. Swap 비활성화 (모든 노드)

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

 

 


3. 커널 파라미터 설정 (모든 노드)

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

 

sudo sysctl --system

 

 


4. 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"

 

sudo apt update
sudo apt install -y containerd.io

 

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

 

sudo systemctl restart containerd
sudo systemctl enable containerd

 

 


5. K8s Apt 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

 

 


6. Kubectl, Kubeadm, Kubelet 설치 (모든 노드)

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

 

 


7. Kubeadm을 이용한 K8s 초기화 (마스터 노드)

sudo kubeadm init

kubeadm join 123.123.123.45:5555 --token 123asd.123qweqweqwe344 \
        --discovery-token-ca-cert-hash sha256:adssdfs3424sdf234dsfdsf234wdfsdf324sdffs324sdfsdf342 

→ kubeadm join ~~~ 복사해 두기 (워커 노드 추가 시 사용)

 

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

 

kubectl get no

 

NotReady 일 경우

1. CNI (Container Network Interface) 부재

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

  → Calico 설치

 

2. kubelet 재시작

sudo systemctl restart kubelet

 

 


8. 워커 노드 추가 (워커 노드)

kubeadm join 123.123.123.45:5555 --token 123asd.123qweqweqwe344 \
        --discovery-token-ca-cert-hash sha256:adssdfs3424sdf234dsfdsf234wdfsdf324sdffs324sdfsdf342 

 

아래와 같은 오류 발생 시,

[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR IsPrivilegedUser]: user is not running as root
[preflight] If you know what you are doing, you can make a check non-fatal with --ignore-preflight-errors=...
To see the stack trace of this error execute with --v=5 or higher

→ 권한 문제. sudo 를 붙여서 재 실행


 

 


9. 클러스터 구성 확인 (마스터 노드)

kubectl get no


 

 


10. 노드 추가 필요 시 (마스터 노드)

kubeadm token create --print-join-command

참고 : https://hbayraktar.medium.com/how-to-install-kubernetes-cluster-on-ubuntu-22-04-step-by-step-guide-7dbf7e8f5f99


 

 


11. 클러스터에서 노드 삭제 필요 시

마스터 노드

 
1. 노드 드레인

kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

<node-name> : 제거하려는 노드의 이름
--ignore-daemonsets : DaemonSet에 의해 관리되는 파드를 무시
--delete-emptydir-data : emptyDir 볼륨을 사용하는 파드 삭제

 

  1. 클러스터에서 노드 삭제
kubectl delete node <node-name>

 

 

워커 노드

 

  1. kubeadem reset 실행
sudo kubeadm reset -f

 

  1. K8s 네트워크 설정 정리
sudo rm -rf /etc/cni/net.d/*
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -X

 

  1. kubelet 설정 정리
sudo rm -rf /var/lib/kubelet/*

 

  1. 클러스터 구성 제거
sudo rm -rf $HOME/.kube

 

  1. containerd 재시작 및 시스템 재부팅
sudo systemctl restart containerd

sudo reboot
profile
Cloud/DevOps & Network Virtualization에 관심 있는 Engineer입니다. 🐳⚓️👨‍✈️

0개의 댓글