-
[쿠버네티스] 설치하기카테고리 없음 2025. 6. 1. 03:42
다음은 온프레미스 환경에서 MacOS + Rocky Linux + UTM 기반으로 Kubernetes 클러스터를 구성하는 과정을 정리한 가이드입니다. 아래 내용은 실습과 학습에 최적화된 구조로, Kubernetes 설치의 핵심 개념과 실제 구현 절차를 함께 설명합니다.
설치 환경 준비
- Linux 배포판: Rocky Linux 9.2 (aarch64)
- 가상화 도구: UTM (macOS에서 VirtualBox 미지원 시 대안)
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)
- 이렇게 설정하는 이유는 다음과 같습니다.
- 고정 IP 필요
- Kubernetes 클러스터에서는 마스터 노드와 워커 노드가 서로 통신하기 위해 고정된 IP 주소를 사용하는 것이 필수입니다. DHCP로 할당된 IP는 재부팅 시 변경될 수 있기 때문에 클러스터가 정상적으로 동작하지 않을 수 있습니다.
- 게스트 네트워크 대역과 일치
- 앞서 UTM에서 설정한 네트워크 대역(192.168.56.0/24)과 일치하는 IP를 지정함으로써, 호스트와 VM 간 또는 VM 간 통신이 가능해집니다.
- 게이트웨이 설정
- 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