[쿠버네티스] Rocky 9.5 에서 Kubernetes 설치

 

etc-image-0

 

사전준비

 

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 서버 구축

etc-image-1

 

서버 구축 시 Swap 메모리 없이 구축한다.

 

혹은 아래 명령어로 Swap 메모리를 비활성화 한다.

 

스왑메모리 비활성화

sudo swapoff -a
sudo sed -i '/swap/d' /etc/fstab

 

 

3. hosts 설정

etc-image-2

 

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

 

etc-image-3

 

위의 커맨드를 따로 기록해줘야 한다.

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 설치 확인

etc-image-4

 

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 확인

 

etc-image-5

 

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=

 

 

etc-image-6

 

 

Kubernetse Pods 확인

 

etc-image-7

 

kubectl get --all-namespaces pods