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를 경유하는 방법은 러닝 커브를 일시적으로 낮춰주면서 운영 감각을 점층적으로 늘릴 수 있는 좋은 방법이 될 수 있다.
댓글남기기