
사전준비
1. Rocky Linux 9.x Version
- 마스터 노드 1대 (CPU 4 Core, Memory 8 GB, DISK 75 GB)
- 워커노드 3대 (CPU 2 Core, Memory 8 GB, DISK 50 GB)
2. None Swap Memory 서버 구축

서버 구축 시 Swap 메모리 없이 구축한다.
혹은 아래 명령어로 Swap 메모리를 비활성화 한다.
스왑메모리 비활성화
sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab
3. hosts 설정

Master, Worker 서버 구성
방화벽 중지
systemctl disable --now firewalld
SELinux 중지
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
컨테이너의 네트워크 패킷이 호스트머신의 iptables 설정에 따라 제어되도록 하는 설정
cat << EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
설정 로드
sysctl --system
도커 설치 전 패키지 충돌 방지로 기존 컨테이너 패키지 삭제
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman \
runc
리포지터리 유틸리티 설치
dnf install -y dnf-utils
도커 리포지터리 추가
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
도커 설치
sudo dnf -y install docker-ce docker-ce-cli containerd.io docker-compose-plugin
cgroup 관리에 systemd를 사용하도록 설정
cat << EOF | tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
docker 자동 재시작 설정
systemctl enable --now docker
K8S 설치
cat << EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
cat <<EOF | tee /etc/yum.repos.d/cri-o.repo
[cri-o]
name=CRI-O
baseurl=https://pkgs.k8s.io/addons:/cri-o:/prerelease:/main/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/addons:/cri-o:/prerelease:/main/rpm/repodata/repomd.xml.key
EOF
yum install -y kubelet kubeadm kubectl cri-o
systemctl daemon-reload
systemctl enable --now crio
Master Node 구성
K8S 초기화
kubeadm init --pod-network-cidr=172.16.0.0/16 --cri-socket /var/run/crio/crio.sock

위의 커맨드를 따로 기록해줘야 한다.
K8S Worker Node 에서 해당 명령어를 통해 Master 와 Join 작업을 진행한다.
쿠버네티스 클러스터 통신 설정
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubelet 서비스 실행
systemctl enable --now kubelet
칼리코 설정
curl https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/tigera-operator.yaml > calico.yaml
kubectl create -f calico.yaml
리소스 설정(환경에 맞게 cidr 설정)
curl https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/custom-resources.yaml > calico-conf.yaml
vi calico-conf.yaml
calicoNetwork:
# Note: The ipPools section cannot be modified post-install.
ipPools:
- blockSize: 26
cidr: 172.16.0.0/24
encapsulation: VXLANCrossSubnet
natOutgoing: Enabled
nodeSelector: all()
kubectl create -f calico-conf.yaml
K8S 설치 확인

kubectl get --all-namespaces pods
Worker 서버 구성
Join
kubeadm join 10.0.0.100:6443 --token vyq93s.ogcnmku4p0ox5yoj \
--cri-socket /var/run/crio/crio.sock \
--discovery-token-ca-cert-hash sha256:62d34a7ff0e770bbf1a0d5c86b9bcc9a63b9bf859c93ebdd549f7969714e60aa
위 내용의 값은 Master 서버에서 초기화 시 나오는 값으로 진행해야 한다.
--cri-socket 옵션으로 컨테이너를 crio 로 지정한다.
Master Node
Node Join 확인

kubectl get nodes
Worker Node 에 Role 부여하기
kubectl label node worker01 node-role.kubernetes.io/worker=
kubectl label node worker02 node-role.kubernetes.io/worker=
kubectl label node worker03 node-role.kubernetes.io/worker=

Kubernetse Pods 확인

kubectl get --all-namespaces pods
'Orchestration > Kubernetes' 카테고리의 다른 글
[쿠버네티스] K9S 설치하기 (0) | 2025.04.02 |
---|---|
[쿠버네티스] CNI(Container Network Interface)란? (0) | 2025.03.26 |