K3s(Lightweight Kubernetes)

업데이트:

개요

  • k3s는 Rancher Labs(SUSE)가 만든 경량 Kubernetes로, k8s(Kubernetes)의 핵심 기능을 유지하며 리소스 사용량을 크게 줄이고 설치와 운영을 단순화한 것이 특징이다.
  • Edge 컴퓨팅과 Internet of Things(IoT), CI 등 다양한 리소스가 제한된 환경에 최적화 되어 있다.

비교

K8s의 주요 단점

  • 비교적 높은 리소스(CPU, Memory) 사용량.
  • 복잡한 설치 방법들과 다양한 설정 파일 관리.

K3s의 주요 장점

  • CLI 및 설정 파일등을 포함하여 K8s와 완전히 호환.
  • 기본 애드온(Traefik, CoreDNS, Metric Server 등) 내장을 통해 간단한 설치.

K3s airgap

  • K3s 에어갭(airgap)이란 인터넷 연결이 차단된, 즉 외부 네트워크와 완전히 분리된 환경에서 K3s를 설치하고 실행하는 것을 의미한다.
  • 인터넷이 연결되지 않은 보안이 매우 중요한 환경이나, 공용 인터넷에 의존할 수 없는 환경에서 K3s를 배포하기 위해 사용되는 설치 방식이며, 필요한 컨테이너 이미지와 K3s 바이너리를 미리 다운로드하여 에어갭 환경에 전송한 뒤 설치를 진행한다.

특징

보안 강화

  • 외부 위협으로부터 시스템을 물리적으로 격리하여 사이버 공격 가능성을 최소화한다.

안정적인 환경

  • 인터넷 연결이 불안정하거나 불가능한 환경에서도 K3s를 안정적으로 운영할 수 있도록 한다.

제어된 환경

  • 모든 소프트웨어와 이미지를 직접 관리하므로, 보안 정책이나 규제 준수가 필요한 환경에서 유용하다.

설치

파일 준비

# Install script
curl -sfL https://get.k3s.io > install.sh
chmod +x ./install.sh

# Download
curl -LO https://github.com/k3s-io/k3s/releases/download/${K3S_VERSION}/k3s-airgap-images-amd64.tar

# Place image
sudo mkdir -p /var/lib/rancher/k3s/agent/images/
sudo mv k3s-airgap-images-amd64.tar.zst /var/lib/rancher/k3s/agent/images/

서버 설치

# INSTALL_K3S_SKIP_DOWNLOAD: 오프라인 설치 여부
# server: Kubernetes control plane 역할로 클러스터를 관리한다.
# --cluster-init: 내장 etcd 클러스터 초기화
# --embedded-registry: Spegel 활성화(옵션, 권장)
# --kube-proxy-arg=proxy-mode=ipvs: kube-proxy를 IPVS 모드로 실행(성능 향상)
# --kube-proxy-arg=ipvs-strict-arp=true: IPVS 모드에서 ARP 충돌 방지를 위해 strict ARP를 활성화
INSTALL_K3S_SKIP_DOWNLOAD=true \
INSTALL_K3S_EXEC="server \
  --cluster-init \
  --embedded-registry \
  --kube-proxy-arg=proxy-mode=ipvs \
  --kube-proxy-arg=ipvs-strict-arp=true" \
./install.sh

# Check cluster token
cat /var/lib/rancher/k3s/server/node-token

워커 추가(선택)

# K3S_TOKEN: 클러스터 초기화한 서버의 토큰
# --server: 조인 대상 클러스터의 control plane 주소
export K3S_TOKEN="{token}"
INSTALL_K3S_SKIP_DOWNLOAD=true \
INSTALL_K3S_EXEC="server \
  --server https://{real-ip}:6443 \
  --embedded-registry \
  --kube-proxy-arg=proxy-mode=ipvs \
  --kube-proxy-arg=ipvs-strict-arp=true" \
./install.sh
  • 워커는 INSTALL_K3S_EXEC 명령어의 시작 키워드에 따라 아래의 두 종류로 조인이 가능하다.
    • server 키워드로 실행하는 경우, Control Plane 멤버로 클러스터에 조인하여 HA(High Availability)를 제공하기 위해 사용한다.
    • agent 키워드로 실행하는 경우, Worker로 클러스터에 조인하여 수평적 확장을 제공하기 위해서 사용한다.

확인

# k3s kubectl get nodes
NAME        STATUS   ROLES                  AGE   VERSION
k3s-server  Ready    control-plane,master   1m    v1.35.0+k3s1

# k3s kubectl get pods -A
NAMESPACE     NAME                                      READY   STATUS         RESTARTS        AGE
kube-system   coredns-64fd4b4794-mc6qz                  1/1     Running        0               1m7s
kube-system   local-path-provisioner-774c6665dc-fnbmh   1/1     Running        0               1m7s
kube-system   metrics-server-79dc797866-p9bkg           1/1     Running        0               1m7s
kube-system   traefik-32bw1e5674-2bqc8                  1/1     Running        0               1m7s

회고

  • 가용 리소스를 확인하지 않고 무조건 Kubernetes를 적용하는 것은 오히려 비용과 관리가 커지는 부작용을 창출할 수 있다.
  • Docker 컨테이너 기반 서비스를 Kubernetes 적용안을 고려하는 경우, K3s를 경유하는 방법은 러닝 커브를 일시적으로 낮춰주면서 운영 감각을 점층적으로 늘릴 수 있는 좋은 방법이 될 수 있다.

Reference

댓글남기기