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

TCP 공부하기

TCP(전송 제어 프로토콜) 개요 TCP는 불안정한 네트워크 환경에서도 신뢰성 있고 순서가 보장된 데이터 전송을 가능하게 하는 핵심 인터넷 프로토콜이다. IP가 호스트 간 패킷 전달만을 담당한다면, TCP는 포트 기반 프로세스 간 통신, 오류 복구, 재전송, 순서 제어를 제공한다. 흐름 제어와 혼잡 제어를 통해 TCP는 수신 버퍼와 네트워크 대역폭의 고갈을 방지한다.

By JHL

우리가 알던 고전적 소프트웨어 엔지니어링은 죽었다

Product Engineering 시대와 AI 개발 패러다임 변화 1. 패러다임 변화: 코드 작성의 목적이 달라졌다 1972년 Dennis Ritchie가 C 언어를 발표한 이후, 소프트웨어 산업은 오랫동안 다음 요소에 집중해 왔다. * 코드 효율성 (시간·공간 복잡도) * 코드 길이 및 생산성 * 가독성과 유지보수성 그러나 AI 시대가 시작되면서 기존 패러다임이 근본적으로 변하고 있음. John Carmack은

By JHL

GitLab에서 제작한 GitOps 초보자 가이드

소개 소프트웨어 애플리케이션의 복잡도가 증가함에 따라 인프라에 대한 요구도도 함께 증가하고 있습니다. 인프라 팀은 다양한 서비스를 빠르고 안정적으로 제공해야 하지만, 인프라 구축은 여전히 수동 프로세스에 의존하는 경우가 많습니다. 이 문제를 해결하기 위한 핵심 접근 방식이 인프라 자동화이며, 그중 하나가 GitOps입니다. 1. 인프라 자동화의 필요성 * 애플리케이션 개발은 CI/CD로 자동화되었지만 인프라

By JHL