ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [쿠버네티스] 설치하기
    카테고리 없음 2025. 6. 1. 03:42

    다음은 온프레미스 환경에서 MacOS + Rocky Linux + UTM 기반으로 Kubernetes 클러스터를 구성하는 과정을 정리한 가이드입니다. 아래 내용은 실습과 학습에 최적화된 구조로, Kubernetes 설치의 핵심 개념과 실제 구현 절차를 함께 설명합니다.

    설치 환경 준비

    VM 설정

    • "새로운 가상 머신 생성" 클릭

    • "가상화" 클릭

    • "Linux" 클릭

    • "찾아보기" 클릭 > "Rocky Linux 9.2" 선택

    • CPU 4 코어, Memory 4096 MiB 로 설정

    • 저장소의 드라이브 크기를 32GiB 로 설정

    • 공유 디렉터리는 선택하지 않고 "계속" 버튼 클릭

    • 이름에 "k8s-master" 라고 입력 후 "가상 머신 설정 열기" 에 체크 표시 후 "저장" 버튼 클릭

    • 네트워크 > "고급 설정 표시" 클릭 > 게스트 네트워크에 "192.168.56.0/24" 입력 후 "저장"
    • 이 설정은 VM과 호스트 간 통신이 가능한 내부 네트워크를 구성하기 위함이며, 이후 고정 IP 설정이나 노드 간 통신에 사용

    • "Install Rocky Linux 9.2" 선택

    • 원하는 언어 선택 후 "계속 진행" 버튼 클릭

    • 사용자 설정 > "Root 비밀번호" 선택 > root 비밀번호, root 비밀번호 확인 입력 > "root가 비밀번호로 SSH 로그인하도록 허용" 체크

    • 시스템 > 설치 목적지 > 저장소 구성 > 자동 설치 선택

    • 시스템 > 네트워크와 호스트 이름 > 호스트 이름에 "k8-master" 입력 후 적용 버튼 클릭

    • "이더넷 (enp0s1)" 설정 > [IPv4 설정] 탭 클릭 > Method : 수동 > 주소 : [Add] 클릭 후 -> 주소(192.168.56.30), 넷마스크(255.255.255.0), 게이트웨이(192.168.56.1)
    • 이렇게 설정하는 이유는 다음과 같습니다.
      1. 고정 IP 필요
      2. Kubernetes 클러스터에서는 마스터 노드와 워커 노드가 서로 통신하기 위해 고정된 IP 주소를 사용하는 것이 필수입니다. DHCP로 할당된 IP는 재부팅 시 변경될 수 있기 때문에 클러스터가 정상적으로 동작하지 않을 수 있습니다.
      3. 게스트 네트워크 대역과 일치
      4. 앞서 UTM에서 설정한 네트워크 대역(192.168.56.0/24)과 일치하는 IP를 지정함으로써, 호스트와 VM 간 또는 VM 간 통신이 가능해집니다.
      5. 게이트웨이 설정
      6. 192.168.56.1은 UTM의 NAT 라우터 역할을 하는 주소입니다. 이를 게이트웨이로 설정하면 Rocky Linux에서 외부 인터넷으로도 연결이 가능합니다.

    • "설치 시작" 버튼 클릭 > 설치 완료 메세지 확인 후 [재시작]

    • 상단에서 [전원버튼] 눌러서 Shutdown

    • 초기화 클릭 후 > 다음으로 [▶] 버튼 눌러서 VM 기동

    터미널로 원격 접속

    Linux 서버가 준비되면, 로컬 터미널에서 SSH로 접속합니다.

    ssh root@192.168.56.30

    Rocky Linux 기본 설정

    타임존 설정

    timedatectl set-timezone Asia/Seoul && timedatectl set-ntp true
    chronyc makestep

    패키지 설치

    yum install -y yum-utils iproute-tc

    OpenSSL 및 OpenSSH 업데이트

    yum update openssl openssh-server -y

    /etc/hosts 설정

    cat << EOF >> /etc/hosts
    192.168.56.30 k8s-master
    EOF

    kubeadm 설치 전 사전 작업

    방화벽 비활성화

    systemctl stop firewalld && systemctl disable firewalld

    Swap 비활성화

    swapoff -a && sed -i '/ swap / s/^/#/' /etc/fstab

    컨테이너 런타임 설치 (containerd)

    커널 모듈 및 네트워크 파라미터 설정

    cat <<EOF | tee /etc/modules-load.d/k8s.conf
    overlay
    br_netfilter
    EOF
    
    modprobe overlay
    modprobe br_netfilter
    
    cat <<EOF | 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
    
    sysctl --system

    containerd 설치 및 설정

    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum install -y containerd.io-1.6.21-3.1.el9.aarch64
    systemctl daemon-reload
    systemctl enable --now containerd
    
    containerd config default > /etc/containerd/config.toml
    sed -i 's/ SystemdCgroup = false/ SystemdCgroup = true/' /etc/containerd/config.toml
    systemctl restart containerd

    kubeadm, kubelet, kubectl 설치

    저장소 등록

    cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://pkgs.k8s.io/core:/stable:/v1.27/rpm/repodata/repomd.xml.key
    exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
    EOF

    SELinux 완화

    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

    설치 및 kubelet 등록

    yum install -y kubelet-1.27.2-150500.1.1.aarch64 kubeadm-1.27.2-150500.1.1.aarch64 kubectl-1.27.2-150500.1.1.aarch64 --disableexcludes=kubernetes
    systemctl enable --now kubelet

    클러스터 생성

    초기화

    kubeadm init --pod-network-cidr=20.96.0.0/16 --apiserver-advertise-address=192.168.56.30

    kubectl 설정

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

    CNI 설치 (Calico)

    kubectl create -f calico.yaml
    kubectl create -f calico-custom.yaml

    마스터 노드 taint 제거

    kubectl taint nodes k8s-master node-role.kubernetes.io/control-plane-

    편의 기능 설치

    kubectl 자동완성

    yum -y install bash-completion
    echo "source <(kubectl completion bash)" >> ~/.bashrc
    echo 'alias k=kubectl' >>~/.bashrc
    echo 'complete -o default -F __start_kubectl k' >>~/.bashrc
    source ~/.bashrc

    Dashboard 설치

    kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/dashboard-2.7.0/dashboard.yaml

    Metrics Server 설치

    kubectl create -f https://raw.githubusercontent.com/k8s-1pro/install/main/ground/k8s-1.27/metrics-server-0.6.3/metrics-server.yaml

    설치 확인

    kubectl get pods -A

    댓글

Designed by Tistory.