hello

rke2 설치 가이드

환경 구성 전 사전 작업

# 파일 최대 활성화 개수 증가
## inotify 이벤트 큐 크기 증가 (이벤트 누락 방지)
sudo sysctl -w fs.inotify.max_queued_events=524288
## 사용자별 inotify 인스턴스 수 제한 증가 (동시에 더 많은 감시 가능)
sudo sysctl -w fs.inotify.max_user_instances=16383
## 사용자별 inotify 감시 파일 수 제한 증가 (더 많은 파일 감시 가능)
sudo sysctl -w fs.inotify.max_user_watches=524288
sudo sysctl -p


# 열 수 있는 파일 디스크립터 소프트/하드 제한 증가 (프로세스별 파일 핸들 수 확대)
sudo vi /etc/security/limits.conf
---
* soft nofile 1048576
* hard nofile 1048576
---


# rke2-server 서비스의 최대 파일 디스크립터 수 제한 설정
sudo mkdir -p /etc/systemd/system/rke2-server.service.d
sudo vi /etc/systemd/system/rke2-server.service.d/override.conf
---
[Service]
LimitNOFILE=1048576
---

Control Plane

# Ubuntu 22.04 / root 권한인 상태에서 했던 히스토리


# 기존 설치된게 있으면 깨끗이 제거
/usr/local/bin/rke2-killall.sh
/usr/local/bin/rke2-uninstall.sh

# installer agent 다운로드 & 설치 (CP용)
curl -sfL https://get.rke2.io | sh -

# Config 작성
mkdir -p /etc/rancher/rke2/
vi /etc/rancher/rke2/config.yaml

### Config 파일 예시
---
profile: "cis" 
# root 그룹만 읽게, 더 엄격하게 하려면 0600
write-kubeconfig-mode: "0640"   
data-dir: /mnt/iscsi/rke2

etcd-snapshot-schedule-cron: "0 */6 * * *"
etcd-snapshot-retention: 28
etcd-snapshot-compress: true
etcd-expose-metrics: true
etcd-s3: true
etcd-s3-endpoint: "s3.ap-northeast-2.amazonaws.com"
etcd-s3-region: "ap-northeast-2"
etcd-s3-bucket: "my-rke2-etcd"
etcd-s3-folder: "prod/cluster-a"
etcd-snapshot-dir: /mnt/iscsi/etcd-backup

# openssl rand -hex 32
token: cf94b10e4c86d7092376eafa6118e807615ba735bbbaf654cfca446e86af6dd1

# CNI를 기본값 canal 대신 ebpf를 쓰는 cilium으로 (커널 5.8 이상 버전 필요)
cni: cilium 

# cilium 사용 시 kube-proxy 사용 안함
disable-kube-proxy: true

# 네트워크
cluster-cidr: "10.42.0.0/16"
service-cidr: "10.43.0.0/16"
cluster-domain: "cluster.local"

tls-san:
  - 12.34.56.78 


# --- kube-apiserver: 감사 로깅 등 ---
kube-apiserver-arg:
  - "audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log"
  - "audit-policy-file=/etc/rancher/rke2/audit-policy.yaml"
  - "audit-log-maxage=30"
  - "audit-log-maxbackup=10"
  - "audit-log-maxsize=200"


node-ip: 12.34.56.78
---

### audit 파일
---
apiVersion: audit.k8s.io/v1
kind: Policy
rules:
  - level: Metadata
    resources:
      - group: ""        # core
        resources: ["pods", "secrets", "configmaps", "services"]
      - group: "apps"
        resources: ["deployments", "daemonsets", "statefulsets"]
  - level: RequestResponse
    verbs: ["create", "update", "patch", "delete", "deletecollection"]
    resources:
      - group: ""        # secrets 등 민감한 건 ResponseBody 제외하려면 redaction 정책 추가
        resources: ["secrets"]
    omitStages:
      - "RequestReceived"
---

### Cilium Chart 값(HelmChartConfig)
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
  name: rke2-cilium
  namespace: kube-system
spec:
  valuesContent: |-
    hubble:
      enabled: true
      relay:
        enabled: true
      ui:
        enabled: true

    # kube-proxy 대체(엄격) 모드
    kubeProxyReplacement: "strict"

    # RKE2 고정: APIServer in-cluster 주소
    k8sServiceHost: "localhost"
    k8sServicePort: 6443

    # (선택) 노드 간 직접 라우팅 등 튜닝
    autoDirectNodeRoutes: true

    # (선택) 데이터 플레인 암호화를 원하면 커널 지원 확인 후 사용
    # encryption:
    #   enabled: true
    #   type: "wireguard"   # 또는 "ipsec"
---


# 서비스 등록
systemctl enable rke2-server.service

# 서비스 활성화
systemctl start rke2-server.service

# (로그 조회)
journalctl -u rke2-server -f



Control Plane (Join)

bss

Agent Node



# Installer Agent 설치 (Agent용)
curl -sfL https://get.rke2.io | INSTALL_RKE2_TYPE="agent" sh -

# 서비스 등록
systemctl enable rke2-agent.service

# Config 파일 작성
mkdir -p /etc/rancher/rke2/
vim /etc/rancher/rke2/config.yaml

# 서비스 시작
systemctl start rke2-agent.service

# (로그 조회)
journalctl -u rke2-agent -f

Kubectl를 사용자 계정에 적용

sudo mkdir -p $HOME/.kube
sudo cp /etc/rancher/rke2/rke2.yaml $HOME/.kube/config
sudo chown $USER:$USER $HOME/.kube/config

# DATA-DIR는 config.yaml에서 정의한 값
echo 'export PATH=$DATA_DIR/bin:$PATH' >> ~/.bashrc
echo 'export KUBECONFIG=$HOME/.kube/config' >> ~/.bashrc
source ~/.bashrc

Read more