Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

쟝이의 세상

VMware에서 Ubuntu를 사용하여 Kubernetes 환경 구축 본문

자료

VMware에서 Ubuntu를 사용하여 Kubernetes 환경 구축

zyangee 2024. 11. 7. 11:38

** Master Node와 Worker Node에 환경 세팅하기 **

아래의 설명은 Master Node와 Worker Node 둘 다 실행해주기

(Worker Node에서만 하는 것 / Master Node에서만 하는 것은 따로 설명 있음)

 

 

중간에 ubuntu 환경이 오류가 생겨 ubuntu-worker에서 실행
오류가 생겨서 worker를 master node로 사용한거니까
참고 부탁드려용 :)

 

 

📌 시스템 요구사항 확인

✔️ 최소 사양

- CPU: 2개 이상의 코어

#코어 확인
nproc

- RAM: 최소 2GB(권장 4GB 이상)

#메모리 확인
free -h

- 디스크 공간: 최소 10GB

#디스크 공간 확인
df -h

 

 

📌 Ubuntu 시스템 업데이트

✔️시스템을 최신 상태로 유지

sudo apt upgrade -y
sudo apt update

 

 

📌 Swap 비활성화

쿠버네티스는 swap 메모리 비활성화를 요구한다.

→ 성능과 안정성 측면에서 중요한 역할을 하기 때문

 

먼저 swap 파티션을 사용하고 있는지 확인해준다

#swap 파티션 확인
swapon --show

 

swap 파티션을 사용하고 있다면?

#swap 비활성화
sudo swapoff -a

#swap 메모리 영구 비활성화하기 위해 편집기 열기
sudo vi /etc/fstab
📎 편집 내용 예시
# /swapfile none swap sw 0 0​
해당 내용을 주석처리한 후 저장

 

 

📌 필요한 포트 개방

sudo ufw allow 6443/tcp    		# API server
sudo ufw allow 2379:2380/tcp   	# etcd
sudo ufw allow 10250/tcp		# Kubelet API
sudo ufw allow 10251/tcp   		# kube-scheduler
sudo ufw allow 10252/tcp   		# kube-controller
sudo ufw reload
sudo ufw enable
sudo ufw allow 6443

 

 

📌 Containerd 설치

쿠버네티스는 기본적으로 컨테이너 런타임이 필요하다. 일반적으로 Docker 또는 containerd를 사용한다.

나는 containerd 설치!!

# 필요한 모듈 활성화
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 필요한 sysctl 매개변수 설정
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sudo sysctl --system

# containerd 설치
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd

 

 

📌 Kubeadm, Kubelet, Kubectl 설치

✔️ kube 관련 GPG 키 등록 

# apt 저장소 키 추가
sudo apt install -y apt-transport-https ca-certificates curl

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

# 저장소 추가
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

 

✔️ kubectl, kubeadm, kubelet 설치

→ 1.30~ 버전을 설치했을 때 kubectl 명령어 실행마다 오류가 발생하기 때문에 다운그레이드하여 kubectl, kubeadm, kubelet부터 재설치

# 패키지 설치
sudo apt update
sudo apt install -y kubelet kubeadm kubectl

# 패키지 자동 업데이트 방지
sudo apt-mark hold kubelet kubeadm kubectl

⚠️ 자동 업데이트 방지한 후에 다시 설치할 경우

더보기
#설치된 패키지의 hold 해제
sudo apt-mark unhold kubelet kubeadm kubectl

#기존 패키지 제거
sudo apt-get remove -y kubelet kubeadm kubectl

#1.29.0 버전 재설치
sudo apt-get install -y kubelet=1.29.0-1.1 kubeadm=1.29.0-1.1 kubectl=1.29.0-1.1

#새로 설치한 버전이 자동으로 업그레이드되지 않도록 hold
sudo apt-mark hold kubelet kubeadm kubectl

#설치된 버전 확인
kubelet --version
kubeadm version
kubectl version --client

 

📌 클러스터에 Worker Node 추가

✔️ Kubernetes 클러스터 초기화(Master Node에서만 실행)

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=[마스터노드 IP]
1️⃣ 아래의 --token 부분의 출력 결과 모두 저장해놓기
kubeadm join 192.168.133.140:6443 --token p1yugb.rudmluothk8he85j \
        --discovery-token-ca-cert-hash sha256:5ccd5eb6e56c32eff3a0917108b67bc2c1c9cf357185e36d98995a8fa90637eb​

 

2️⃣ Worker Node에 접속하여 위의 명령어 그대로 입력해주기 (단, sudo는 꼭 붙여서!)
sudo kubeadm join 192.168.133.140:6443 --token p1yugb.rudmluothk8he85j \
        --discovery-token-ca-cert-hash sha256:5ccd5eb6e56c32eff3a0917108b67bc2c1c9cf357185e36d98995a8fa90637eb​

 

✔️ kubectl 을 사용하여 클러스터에 접근 가능하도록 설정 (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

export KUBECONFIG=$HOME/.kube/config

 

✔️ CNI(Flannel) 설치

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

 

⚠️ controller-manager / proxy 전부 CrashLoopBackOff 뜨길래 log를 확인해보니 1.29.10 버전을 사용 → 잘못된 버전을 사용하고 있었음 ㅜㅜ

# controller-manager의 이미지 버전 수정
sudo sed -i 's|registry.k8s.io/kube-controller-manager:v1.29.10|registry.k8s.io/kube-controller-manager:v1.29.0|g' /etc/kubernetes/manifests/kube-controller-manager.yaml

# 모든 컴포넌트의 이미지 버전 한 번에 바꾸기
sudo find /etc/kubernetes/manifests/ -type f -name "*.yaml" -exec sed -i 's/v1.29.10/v1.29.0/g' {} \;

 

💡 세팅 전부 마치면 아래의 화면이 나온다~!~!

kubectl get pods -A