rocky linux 9 k8s 단일노드 구성

1. 필요한 패키지 설치 및 설정

SELinux를 permissive 모드로 설정

$ sudo setenforce 0
$ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  • setenforce 0 : 현재 세션에서 SELinux를 즉시 permissive 모드로 전환
  • sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config : /etc/selinux/config 파일을 수정하여 재부팅 후에도 permissive 모드 유지

방화벽 비활성화 (선택사항, 보안상 주의 필요)

$ sudo systemctl stop firewalld
$ sudo systemctl disable firewalld

스왑 비활성화

$ sudo swapoff -a
$ sudo sed -i '/swap/d' /etc/fstab
  • swapoff -a : 현재 활성화된 모든 스왑 비활성화
  • sed -i '/swap/d' /etc/fstab : /etc/fstab에서 스왑 관련 항목을 제거하여 재부팅 후에도 스왑이 활성화 되지 않게 함

필요한 모듈 로드

$ sudo modprobe br_netfilter
$ sudo modprobe overlay
  • br_netfilter : 브리지 네트워크 필터링을 위한 모듈 로드
  • overlay : 오버레이 파일시스템 지원을 위한 모듈 로드

시스템 설정

$ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

$ sudo sysctl --system

$ sudo reboot
  • 네트워크 브리지를 통과하는 IPv4와 IPv6 패킷이 iptables에 의해 관리되도록 설정
  • IP 포워딩 활성화
  • sysctl --system : 변경사항 즉시 적용

2. 컨테이너 런타임(Docker) 설치

$ sudo yum install -y yum-utils
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install -y docker-ce docker-ce-cli containerd.io
$ sudo systemctl enable --now docker

3. 쿠버네티스 레포지토리 추가 및 패키지 설치

$ cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
$ sudo systemctl enable --now kubelet
  • --pod-network-cidr=10.244.0.0/16 : Flannel 네트워크 플러그인을 위한 Pod 네트워크 대역 지정

4. 쿠버네티스 클러스터 초기화

$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16

5. kubectl 설정

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

6. 네트워크 애드온 설치 (flannel)

$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

7. 마스터 노드에서 Pod 스케줄링 허용

$ kubectl taint nodes --all node-role.kubernetes.io/control-plane-

8. 클러스터 상태 확인

$ kubectl get nodes
$ kubectl get pods --all-namespaces