환경 구성 전 사전 작업
# 파일 최대 활성화 개수 증가
## 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