Kubernetes는 컨테이너 오케스트레이션을 위한 대표적인 도구로, 클러스터 환경을 구성하여 애플리케이션의 배포, 확장, 관리를 자동화할 수 있습니다. 이 글에서는 Rocky Linux 8 환경에서 Kubernetes 클러스터를 구성하는 과정을 정리합니다.
모든 노드는 동일한 사전 작업을 거치며, 이후 마스터 노드와 워커 노드에서 수행하는 설정이 나뉘어집니다.
본 포스팅에서 설정한 기준은 Master 1, Worker 3개의 cluster를 구성했습니다.
공통으로 설정되는 내용은 하나의 cluster에 설정 후 해당 이미지를 복사하여 다른 cluster를 구성하는 것을 추천합니다.
1. 기본 설정 (모든 노드에서 수행)
# 시스템 업데이트 및 시간대 설정
dnf update -y
timedatectl set-timezone Asia/Seoul
# 방화벽 및 SELinux 설정
systemctl disable --now firewalld
setenforce 0
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
# 모듈 로드 설정
tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# sysctl 설정
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
# 필수 패키지 설치
dnf install -y dnf-utils device-mapper-persistent-data lvm2 iproute-tc
# containerd 설치
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf update -y && dnf install -y containerd.io
# containerd 설정
mkdir -p /etc/containerd
containerd config default | sudo 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 --now containerd
2. Kubernetes 패키지 설치 (모든 노드에서 수행)
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable --now kubelet
3. /etc/hosts 설정 (모든 노드에서 수행)
cat <<EOF >> /etc/hosts
10.255.255.73 master
10.255.255.74 worker1
10.255.255.75 worker2
10.255.255.76 worker3
EOF
이후 모든 노드(Cluster)를 재부팅합니다.
4. 마스터 노드 설정
마스터 노드에서는 클러스터 초기화를 진행합니다.
kubeadm init --apiserver-advertise-address=<본인의 master ip 입력> --pod-network-cidr=10.244.0.0/16
초기화가 완료되면 아래와 같은 kubeadm join 명령어가 출력됩니다. 해당 내용을 따로 메모장에 저장해둡니다.
kubeadm join <본인 master ip>:6443 --token l44bjq.gfi9e0izqrqf66n8 \
--discovery-token-ca-cert-hash sha256:61b2f9b49e2770f6e69baa45974e9900f86a18b0e45fca652c680f40bf45f2ff
kubectl 명령어를 sudo 명령어 없이 사용할 수 있도록 설정합니다.
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
Flannel 네트워크 애드온을 설치합니다.
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
설치가 완료되었는지 확인
kubectl get pods --all-namespaces
kubectl 자동완성 기능의 편의성을 위해 bash-completion을 설치 및 활성화 합니다.
dnf install -y bash-completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
5. 워커 노드 설정
위에서 저장한 마스터 노드에서 출력된 kubeadm join 명령어를 각 워커 노드에서 실행합니다.
kubeadm join <본인 master ip>:6443 --token l44bjq.gfi9e0izqrqf66n8 \
--discovery-token-ca-cert-hash sha256:61b2f9b49e2770f6e69baa45974e9900f86a18b0e45fca652c680f40bf45f2ff
6. 확인
이제 마스터 노드에서 명령어로 클러스터 상태를 확인하면 워커 노드들이 정상적으로 등록된 것을 볼 수 있습니다.
kubectl get nodes
'Infra' 카테고리의 다른 글
[Kubernetes] Kubernetes Deployment 이해하기 (0) | 2025.07.15 |
---|---|
[Kubernetes] Kubernetes란 무엇인가? (0) | 2025.07.15 |
[Docker] Dockerfile 구성하기 (1) | 2025.07.03 |
[Docker] Docker 명령어 정리 (1) | 2025.07.01 |
[Docker] Docker와 Container에 대해 이해하기 (0) | 2025.06.30 |