본문 바로가기
AWS Cloud School 8기/쿠버네티스

ubuntu 24.04에 쿠버네티스 클러스터 설치(kubeadm 사용)

by YUNZEE 2025. 4. 29.
728x90
더보기

sudo -i 

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

apt update && sudo apt upgrade -y

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

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

 

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

tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

 

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

 

sysctl --system

 

4. Containerd 런타임 설치 (모든 노드)

apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates

 

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

 

apt update
apt install -y containerd.io

 

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

 

systemctl restart containerd
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/ /" | tee /etc/apt/sources.list.d/kubernetes.list
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

 

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

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

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

 클러스터 설치를 위한 이미지 풀링

kubeadm config images pull --cri-socket unix:///run/containerd/containerd.sock --kubernetes-version v1.30.3

 

kubeadm init --pod-network-cidr=10.244.0.0/16 --upload-certs --kubernetes-version=v1.30.3  --cri-socket unix:///run/containerd/containerd.sock --ignore-preflight-errors=all

 

 join 명령 - 워커에도 아래 명령어 복붙해주기

kubeadm join 10.10.1.141:6443 --token gdj792.1sufh8g1o9web61b \
	--discovery-token-ca-cert-hash sha256:cde54c97134bf8d9fffcaea33503c1faa0a92e312e76d1765f91cf8a0945c157

 마스터 - vi token.txt 에 내용 입력해 주기

kubeadm join 10.10.1.141:6443 --token gdj792.1sufh8g1o9web61b --discovery-token-ca-cert-hash sha256:cde54c97134bf8d9fffcaea33503c1faa0a92e312e76d1765f91cf8a0945c157 --cri-socket unix:///run/containerd/containerd.sock

 

- kubectl 명령을 치려면 결국 kubectl 명령어 설치는 물론 config 파일도 구성을 해줘야 됨.

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

 8. 추가 설정 (모든 노드)

잘 연결된 걸 확인했으니까 추가로 설정을 해주자

먼저 docker가 설치가 안돼 있으니까 설치해 주자

curl -fsSL https://get.docker.com -o get-docker.sh
chmod +x get-docker.sh
./get-docker.sh

 

자동 재시작 스크립트

- ec2에서 docker가 부팅 시 불안정하게 동작할 때

- CNI플러그인과 충돌 시 Docker 브릿지가 사라지는 이슈가 있을 때

- 한 번이라도 pod IP가 안 뜬 경험이 있거나 docker0브릿지가 사라지는 문제를 겪었다면 적용하는 게 좋음

tee /root/check_ip_and_restart_docker.sh<<EOF
#!/bin/bash
 
if ! ip add | grep -q 172.17; then
	systemctl restart docker
fi
EOF
chmod 777 /root/check_ip_and_restart_docker.sh
crontab -e
# 스케쥴 관리. 2번 기본 vim 편집기

- 이건 위의 스크립트를 매 분마다 실행해서 체크하겠다는 의미임

- 무거운 작업 아니기 때문에 시스템 부담은 거의 없음

* * * * * /root/check_ip_and_restart_docker.sh

yaml 수정 도구

vi ~/.vimrc

" Enable file type detection
filetype on

" Enable syntax highlighting
syntax on

" Enable auto-indentation for YAML files
autocmd FileType yaml setlocal autoindent smartindent expandtab shiftwidth=2 tabstop=2
autocmd FileType yml setlocal autoindent smartindent expandtab shiftwidth=2 tabstop=2

 

728x90