쿠버네티스 노드 공통 환경 구성
OS : Ubuntu Server 24.04 기준
Master / Worker 노드 공통 설정
1. 서버 시간대 설정
쿠버네티스는 분산 시스템으로, 로그 분석, 이벤트 타임스탬프, 노드 간 통신 등 모든 작업에 정확한 시간 동기화가 필수적입니다.
기본값인 UTC 대신 한국으로 시간대를 통일합니다.
sudo timedatectl set-timezone Asia/Seoul
2. 노드 간 정밀 시간 동기화
각 노드의 시간이 더욱 정밀하게 동기화되도록 Chrony를 설치 및 사용합니다.
sudo apt -y install chrony
3. Swap 메모리 비활성화
쿠버네티스의 구성 요소인 Kubelet은 Swap이 활성화된 노드에서는 기본적으로 실행되지 않도록 설계되어 있습니다.
따라서 다음과 같이 Swap을 비활성화시켜 주는 작업이 필요합니다.
# Swap 비활성화
sudo swapoff -a
# 재부팅 이후에도 Swap 비활성화 유지
sudo sed -i '/\bswap\b/s/^/#/' /etc/fstab
4. 리눅스 커널 모듈 활성화
containerd 및 Kubernetes 네트워크 구성에 필요한 커널 모듈을 등록한다.
sudo cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
5. IP 포워딩 및 Bridge 필터링 설정
쿠버네티스 네트워크(CNI)가 정상 동작하려면 필요한 설정이다.
sudo cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
6. Docker 및 Containerd 설치
Docker 엔진과 containerd를 설치하여 CRI로 사용할 수 있도록 한다.
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg2
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
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 update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
7. Containerd 설정 (Cgroup Driver 변경)
Kubernetes 공식 권장 설정에 따라 containerd와 kubelet의 cgroup 드라이버를 systemd로 통일한다.
sudo sh -c "containerd config default > /etc/containerd/config.toml"
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
8. Docker Daemon 설정
containerd와 동일한 cgroup 설정을 적용한다.
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
9. 서비스 재시작 및 권한 설정
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo usermod -aG docker $USER
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
sudo systemctl restart containerd.service
10. 쿠버네티스 도구 설치
# kubeadm, kubelet, kubectl을 설치한다.
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/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.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt -y install kubelet kubeadm kubectl
# 쿠버네티스 자동 업그레이드 방지
sudo apt-mark hold kubelet kubeadm kubectl
# kubelet 서비스 활성화
sudo systemctl enable --now kubelet.service
Master 노드 설정
sudo kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=<마스터_노드_IP>
# 이때 출력된 명령어를 복사해둔다. (향후 Worker 노드 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 apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
Worker 노드 설정
아까 마스터 노드에서 초기화 kubeadm init으로 초기화한 후 복사해 둔 명령어를 입력하여 쿠버네티스 클러스터에 join 한다.
ex) sudo kubeadm join 머시기
'Kubernetes' 카테고리의 다른 글
| 쿠버네티스 네트워크 (0) | 2025.12.12 |
|---|---|
| 쿠버네티스 볼륨 (0) | 2025.12.10 |
| 쿠버네티스 아키텍처 (0) | 2025.12.09 |
| 쿠버네티스 명령어 정리 (kubectl) 및 yaml (0) | 2025.12.08 |
| 쿠버네티스 개념 및 용어 정리 (0) | 2025.12.08 |