본문 바로가기
기술, 개발/DevOps

Rocky Linux에서 Kubernetes 설치하기 Part 1: 기본 환경 설정

by Jaejin Sim 2025. 9. 18.
반응형

안녕하세요! 이번 블로그 포스트에서는 Rocky Linux 환경에서 Kubernetes를 설치하는 과정을 단계별로 자세히 정리해보겠습니다.


1. 컨테이너 런타임 설치하기 (Containerd)

가장 먼저 컨테이너를 실행할 런타임을 설치해야 합니다. 여기서는 containerd.io를 사용합니다.

참고 문서: Docker Engine 설치 가이드 (CentOS)

  1. 필수 유틸리티 설치
    sudo yum install -y yum-utils
    
  2. Docker 리포지토리 추가
    sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    
  3. containerd.io 설치
    sudo yum install containerd.io
    

2. 네트워크 설정: IPv4 패킷 포워딩 활성화

Kubernetes 클러스터가 제대로 통신하려면 필요한 커널 모듈을 로드하고 네트워크 설정을 변경해야 합니다.

  1. 커널 모듈 로드 overlay와 br_netfilter 모듈을 시스템 부팅 시 자동으로 로드하도록 설정합니다.
    cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
    overlay
    br_netfilter
    EOF
    
    sudo modprobe overlay
    sudo modprobe br_netfilter
    
  2. sysctl 파라미터 설정 네트워크 브리지와 IP 포워딩 관련 파라미터를 설정합니다. 이렇게 하면 재부팅 후에도 설정이 유지됩니다.
    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
    
  3. 설정 적용 재부팅 없이 바로 sysctl 파라미터를 적용합니다.
    sudo sysctl --system
    

3. Containerd Cgroup 드라이버 변경

Kubernetes는 기본적으로 Cgroup 드라이버로 systemd를 사용합니다. containerd의 기본값인 cgroupfs를 systemd로 변경해야 합니다.

  1. containerd 설정 파일 생성 초기 설치 시 비활성화된 CRI 설정을 포함한 기본 설정 파일을 생성합니다.
    # containerd 기본 설정 확인 명령어
    containerd config default
    
    # 기본 설정으로 config.toml 파일 생성
    containerd config default | sudo tee /etc/containerd/config.toml
    
  2. Cgroup 드라이버 변경 config.toml 파일을 열어 SystemdCgroup 값을 true로 변경합니다.
    # 파일 내에서 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] 섹션을 찾아 수정
    ...
            SystemdCgroup = true # false를 true로 변경
    ...
    
    sudo vi /etc/containerd/config.toml
    
  3. containerd 재시작 및 활성화
    sudo systemctl restart containerd
    sudo systemctl enable containerd
    

4. Swap 비활성화

Kubernetes는 노드의 안정성과 예측 가능한 성능을 보장하기 위해 Swap 메모리를 비활성화할 것을 강력히 권장합니다.

  • 예측 가능한 성능: 스왑 사용 시 발생하는 디스크 I/O로 인한 성능 저하를 방지합니다.
  • 노드 안정성: 메모리 부족 상황에서 노드가 불안정해지는 것을 막습니다.
  • 정확한 리소스 관리: 컨테이너의 리소스 사용량을 정확하게 관리합니다.
  1. Swap 비활성화 명령어 실행
    sudo swapoff -a
    
  2. 재부팅 시에도 적용되도록 fstab 파일 수정 /etc/fstab 파일에서 swap 관련 라인을 주석 처리합니다.
    # /etc/fstab 파일을 열어 swap 라인을 찾아 맨 앞에 #을 추가합니다.
    sudo vi /etc/fstab
    
    # 예시:
    # UUID=75705064-32a7-4839-bf61-ad50e9dd4882 none swap defaults 0 0
    
    # 또는 아래 명령어를 사용하여 한번에 처리할 수 있습니다.
    sudo sed -i '/ swap / s/^/#/' /etc/fstab
    

5. Kubeadm, Kubelet, Kubectl 설치

이제 Kubernetes 클러스터를 구성하는 핵심 도구들을 설치합니다.

  1. SELinux 비활성화
    SELinux를 permissive 모드로 설정하여 컨테이너가 파일 시스템에 접근할 수 있도록 합니다.
    sudo setenforce 0
    sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
  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
    
  3. 도구 설치 kubelet, kubeadm, kubectl을 설치하고, kubelet 서비스를 활성화합니다.
    sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
    sudo systemctl enable --now kubelet
    

6. CNI (컨테이너 네트워크 인터페이스) 선택

CNI는 쿠버네티스 클러스터 내에서 Pod 간의 네트워킹을 설정하고 관리하는 중요한 역할을 합니다. 다양한 CNI 플러그인이 있으며, 대표적인 것은 다음과 같습니다.

  • Calico: 고성능 네트워킹과 강력한 네트워크 정책을 지원합니다.
  • Flannel: 간단한 설정과 기본적인 네트워킹 기능을 제공합니다.
  • Weave: 간단한 설정과 네트워크 정책을 지원합니다.
  • Cilium: 고성능 네트워킹과 eBPF 기반의 보안 기능을 제공합니다.

💡 이번 가이드에서는 Calico를 사용하여 클러스터를 구축할 예정입니다. (이유: 많은 온라인 강의 및 자료에서 사용되어 참고하기 용이함)

이제 모든 준비가 끝났습니다. 다음 단계에서는 kubeadm을 사용하여 실제로 Kubernetes 클러스터를 초기화하고 노드를 추가하는 과정을 진행하게 됩니다.

반응형