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

RKE2 아키텍처 완벽 가이드: 차세대 엔터프라이즈 쿠버네티스 구조 분석

후스파 2025. 7. 6. 07:30
반응형

RKE2는 기업과 정부 기관을 위한 강화된 보안과 간소화된 운영을 제공하는 쿠버네티스 배포판입니다. 이 글에서는 RKE2의 핵심 구성 요소와 아키텍처를 상세히 분석합니다.


RKE2 아키텍처 개요

RKE2는 단일 바이너리로 설치되며, Server와 Agent 노드로 구성됩니다. 전통적인 Docker 대신 containerd를 사용하며, 제어 평면 컴포넌트를 정적 Pod로 관리합니다.

컨테이너 런타임DockerContainerd
제어 평면Docker 컨테이너정적 Pod (kubelet 관리)
보안CIS 수동 설정CIS 자동 통과
설치YAML 파일 복잡단일 바이너리
메모리 사용량높음60% 절감
업스트림 호환성Docker 의존Kubernetes 표준

RKE2 핵심 설계 원칙

RKE2는 K3s의 사용 편의성과 RKE1의 엔터프라이즈 기능을 결합하여 다음과 같은 오픈소스 기술을 통합합니다:

  • K3s: 경량화된 배포 모델
  • Kubernetes: 업스트림 호환성
  • etcd: 분산 키-값 저장소
  • containerd/CRI: 컨테이너 런타임
  • CNI: Canal, Cilium, Calico 지원
  • CoreDNS: 클러스터 DNS
  • Ingress NGINX Controller: 트래픽 라우팅
  • Helm: 패키지 관리

핵심 구성 요소

Kubelet

  • 역할: 노드의 파드 생명주기 관리
  • 특징: 정적 Pod 매니페스트(/var/lib/rancher/rke2/agent/pod-manifests/) 감시
# kubelet 설정 예시
cat > /etc/systemd/system/kubelet.service  /etc/containerd/config.toml  /etc/crictl.yaml > /etc/rancher/rke2/config.yaml

# Go BoringCrypto 검증
rke2 --version | grep BoringCrypto

클러스터 관리: Server vs Agent

Server 노드

  • 기능: 제어 평면(API 서버·스케줄러 등) 운영
# Server 노드 설치 명령어
curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_TYPE="server" sh -
systemctl enable rke2-server
systemctl start rke2-server

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

Agent 노드

  • 역할: 워커 노드로 Pod 실행
# /etc/rancher/rke2/config.yaml
server: https://:9345
token: 
node-label:
  - "node-type=worker"
  - "environment=production"
# Agent 노드 설치
curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_TYPE="agent" sh -
systemctl enable rke2-agent
systemctl start rke2-agent

고급 아키텍처: 전용 노드 구성

전용 etcd 노드

# /etc/rancher/rke2/config.yaml
disable-apiserver: true
disable-controller-manager: true
disable-scheduler: true
etcd-expose-metrics: true
etcd-snapshot-schedule-cron: "0 */12 * * *"
etcd-snapshot-retention: 5

전용 제어 평면 노드

# /etc/rancher/rke2/config.yaml
disable-etcd: true
server: https://:9345
token: 
tls-san:
  - "api.example.com"
  - "10.0.0.100"

정적 Pod 추가 배포

# 커스텀 정적 Pod 디렉토리
mkdir -p /var/lib/rancher/rke2/agent/pod-manifests/

# 모니터링 에이전트 정적 Pod 예시
cat > /var/lib/rancher/rke2/agent/pod-manifests/node-exporter.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
  name: node-exporter
  namespace: kube-system
spec:
  hostNetwork: true
  hostPID: true
  containers:
  - name: node-exporter
    image: prom/node-exporter:latest
    args:
    - '--path.procfs=/host/proc'
    - '--path.sysfs=/host/sys'
    - '--collector.filesystem.ignored-mount-points'
    - '^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)'
    ports:
    - containerPort: 9100
      hostPort: 9100
    volumeMounts:
    - name: proc
      mountPath: /host/proc
      readOnly: true
    - name: sys
      mountPath: /host/sys
      readOnly: true
  volumes:
  - name: proc
    hostPath:
      path: /proc
  - name: sys
    hostPath:
      path: /sys
EOF

제어 평면 컴포넌트 관리

kube-controller-manager 정적 Pod

apiVersion: v1
kind: Pod
metadata:
  name: kube-controller-manager
  namespace: kube-system
spec:
  hostNetwork: true
  containers:
  - name: kube-controller-manager
    image: registry.k8s.io/kube-controller-manager:v1.32.3
    command:
    - kube-controller-manager
    - --allocate-node-cidrs=true
    - --authentication-kubeconfig=/etc/kubernetes/controller-manager.kubeconfig
    - --authorization-kubeconfig=/etc/kubernetes/controller-manager.kubeconfig
    - --bind-address=0.0.0.0
    - --client-ca-file=/etc/kubernetes/ssl/ca.pem
    - --cluster-cidr=10.42.0.0/16
    - --cluster-name=kubernetes
    - --kubeconfig=/etc/kubernetes/controller-manager.kubeconfig
    - --leader-elect=true
    - --root-ca-file=/etc/kubernetes/ssl/ca.pem
    - --service-account-private-key-file=/etc/kubernetes/ssl/service-account-key.pem
    - --service-cluster-ip-range=10.43.0.0/16
    - --use-service-account-credentials=true
    volumeMounts:
    - name: k8s-certs
      mountPath: /etc/kubernetes/ssl
      readOnly: true
    - name: kubeconfig
      mountPath: /etc/kubernetes/controller-manager.kubeconfig
      readOnly: true
  volumes:
  - name: k8s-certs
    hostPath:
      path: /etc/kubernetes/ssl
  - name: kubeconfig
    hostPath:
      path: /etc/kubernetes/controller-manager.kubeconfig

마무리

RKE2는 보안과 운용 편의성을 최적화한 차세대 쿠버네티스입니다. containerd 기반의 경량 아키텍처와 CIS/FIPS 자동 준수 기능으로 기업 인프라의 안정성을 극대화합니다. 설치해보면 단일 바이너리로 간편하게 시작하고, 전용 노드 구성으로 대규모 클러스터도 손쉽게 관리할 수 있습니다.
핵심 포인트:

  • 정적 Pod 기반 제어 평면으로 kubelet이 자동 관리
  • containerd 런타임으로 60% 메모리 절감
  • CIS/FIPS 자동 준수로 보안 규정 충족
  • 다양한 CNI 플러그인 지원으로 네트워크 최적화
  • 전용 노드 구성으로 대규모 환경 확장성
반응형