본문 바로가기

Kubernetes

쿠버네티스 VMware 실습 환경 세팅

쿠버네티스 노드 공통 환경 구성

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