IT기술/쿠버네티스 (k8s)

RKE2 v1.30.4 클러스터 10분 구축 가이드: AWS EC2로 프로덕션급 쿠버네티스 환경 만들기

후스파 2025. 7. 8. 21:38
반응형

2025년 최신 RKE2 버전(v1.30.4)으로 10분 만에 안정적인 쿠버네티스 클러스터를 구축하는 방법을 공개합니다. 실습용 AWS EC2 2대면 충분합니다.


필수 준비 사항

OS

Ubuntu 24.04 LTS (Master/Worker 동일)

사양

  • Master: 2vCPU, 4GB RAM, 30GB SSD
  • Worker: 1vCPU, 2GB RAM, 20GB SSD

공통 설정

# 스왑 메모리 완전 비활성화
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab

# 시스템 업데이트
sudo apt update && sudo apt upgrade -y

# 방화벽 비활성화 (실습 환경)
sudo systemctl disable --now ufw

# 필수 패키지 설치
sudo apt install -y curl wget net-tools

# 시간 동기화
sudo timedatectl set-ntp true

AWS EC2 보안 그룹 설정

22TCP0.0.0.0/0SSH 접속
6443TCPVPC CIDRKubernetes API
9345TCPVPC CIDRRKE2 Supervisor
2379-2381TCPVPC CIDRetcd 통신
8472UDPVPC CIDRFlannel VXLAN
10250TCPVPC CIDRkubelet API

마스터 노드 설정

RKE2 설치

# RKE2 서버 설치 (최신 v1.30.4 자동 다운로드)
curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_TYPE="server" sh -

# 설치 확인
sudo ls -la /usr/local/bin/rke2*

설정 파일 작성

# 설정 디렉토리 생성
sudo mkdir -p /etc/rancher/rke2

# 마스터 노드 설정 파일 생성
sudo tee /etc/rancher/rke2/config.yaml > ~/.bashrc
source ~/.bashrc

# 클러스터 상태 확인
kubectl get nodes
kubectl get pods -A

워커 노드 추가

토큰 확인 (마스터 노드에서 실행)

# 노드 토큰 확인
sudo cat /var/lib/rancher/rke2/server/node-token

# 마스터 노드 IP 확인
hostname -I | awk '{print $1}'

워커 노드 설정

# RKE2 에이전트 설치
curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_TYPE="agent" sh -

# 설정 디렉토리 생성
sudo mkdir -p /etc/rancher/rke2

# 워커 노드 설정 파일 생성
sudo tee /etc/rancher/rke2/config.yaml :9345
token: 

# 노드 라벨 설정
node-label:
  - "node-type=worker"
  - "environment=production"

# kubelet 추가 설정
kubelet-arg:
  - "max-pods=110"
EOF

# 서비스 활성화 및 시작
sudo systemctl enable --now rke2-agent

# 서비스 상태 확인
sudo systemctl status rke2-agent
sudo journalctl -u rke2-agent -f

클러스터 검증

노드 상태 확인

# 마스터 노드에서 실행
kubectl get nodes -o wide

# 노드 상세 정보 확인
kubectl describe nodes

# 시스템 Pod 상태 확인
kubectl get pods -A

# 클러스터 정보 확인
kubectl cluster-info

테스트 앱 배포

# Nginx 배포
kubectl create deployment nginx --image=nginx:alpine

# 서비스 노출
kubectl expose deployment nginx --port=80 --type=NodePort

# 서비스 상태 확인
kubectl get svc nginx

# Pod 상태 확인
kubectl get pods -l app=nginx

# 서비스 테스트
NODE_PORT=$(kubectl get svc nginx -o jsonpath='{.spec.ports[0].nodePort}')
curl http://$(hostname -I | awk '{print $1}'):$NODE_PORT

네트워크 연결 테스트

# Pod 간 통신 테스트
kubectl run test-pod --image=busybox --rm -it -- sh

# 내부에서 실행
nslookup kubernetes.default
wget -qO- nginx.default.svc.cluster.local
exit

# Calico 네트워크 상태 확인
kubectl get pods -n calico-system
kubectl -n calico-system logs -l k8s-app=calico-node --tail=50

고급 설정 팁

Calico 네트워크 최적화

# /etc/rancher/rke2/config.yaml에 추가
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-calico
  namespace: kube-system
spec:
  valuesContent: |-
    installation:
      calicoNetwork:
        mtu: 9000
        ipPools:
        - blockSize: 26
          cidr: 10.42.0.0/16
          encapsulation: VXLAN
          natOutgoing: Enabled
          nodeSelector: all()

노드 라벨 자동 부여

# 워커 노드 설정에 추가
sudo tee -a /etc/rancher/rke2/config.yaml  9345`로 포트 개방 확인 |
| **Pod 네트워크 불안정** | `kubectl -n calico-system logs -l k8s-app=calico-node` |
| **이미지 풀 에러** | `sudo /var/lib/rancher/rke2/bin/crictl pull nginx:alpine` |
| **DNS 해결 실패** | `kubectl -n kube-system logs -l k8s-app=kube-dns` |
| **API 서버 접근 불가** | `sudo systemctl restart rke2-server` |

### **상세 트러블슈팅**

```bash
# 1. 서비스 상태 전체 확인
sudo systemctl status rke2-server
sudo systemctl status rke2-agent

# 2. 네트워크 연결 테스트
nc -zv  6443
nc -zv  9345

# 3. 컨테이너 런타임 상태
sudo /var/lib/rancher/rke2/bin/crictl ps
sudo /var/lib/rancher/rke2/bin/crictl images

# 4. etcd 상태 확인 (마스터 노드)
sudo /var/lib/rancher/rke2/bin/crictl exec $(sudo /var/lib/rancher/rke2/bin/crictl ps --name etcd --quiet) etcdctl endpoint health

# 5. 로그 분석
sudo journalctl -u rke2-server --since "1 hour ago"
sudo journalctl -u rke2-agent --since "1 hour ago"

일반적인 오류 해결

# ImagePullBackOff 오류
kubectl describe pod 
sudo /var/lib/rancher/rke2/bin/crictl pull 

# 노드 Not Ready 상태
kubectl describe node 
sudo systemctl restart rke2-agent

# 네트워크 정책 문제
kubectl get networkpolicies -A
kubectl -n calico-system get pods

추가 구성 요소 설치

Helm 설치

# Helm 3 설치
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# Helm 버전 확인
helm version

Ingress Controller 설치

# NGINX Ingress Controller
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace \
  --set controller.service.type=NodePort

모니터링 스택 설치

# Prometheus + Grafana
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install monitoring prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace

마무리

RKE2는 단 4개의 명령어로 프로덕션급 쿠버네티스 클러스터를 구축할 수 있습니다. 이 가이드를 따라 마스터 1대 + 워커 2대 환경을 구성한 후, Helm으로 Argo CD나 Prometheus를 추가해보세요. Edge Computing 환경 구축도 가능합니다.
핵심 포인트:

  • 10분 내 클러스터 구축 완료
  • AWS EC2 최소 사양으로 비용 효율적 구성
  • Calico CNI 기본 제공으로 안정적인 네트워킹
  • 프로덕션급 보안 설정 자동 적용
  • 확장성과 유지보수성 보장

RKE2 v1.30.4는 최신 Kubernetes 기능을 모두 지원하면서도 설치와 관리가 간편한 차세대 엔터프라이즈 플랫폼입니다. 이제 여러분만의 클라우드 네이티브 환경을 구축해보세요!

반응형