티스토리 뷰
개요
- 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를 경유하는 방법은 러닝 커브를 일시적으로 낮춰주면서 운영 감각을 점층적으로 늘릴 수 있는 좋은 방법이 될 수 있다.
'개발' 카테고리의 다른 글
| AI 멀티모달 임베딩(Multimodal Embedding) 완벽 가이드 (0) | 2026.03.27 |
|---|---|
| NVM에 대한 설명과 설정 방법 (0) | 2026.03.09 |
| K8s(Kubernetes)에 대한 설명 (0) | 2025.09.04 |
| Copilot을 사용하여 개발하는 방법 대한 설명 (0) | 2025.08.23 |
| Spring gRPC에 대한 설명과 활용 (5) | 2025.08.07 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- PostgreSQL
- javascript
- Promise
- extensibility
- JWT
- reusability
- graecful shutdown
- barman
- aws s3
- functional programing
- Ai
- mybtis
- ASYNCHRONOUS
- await
- patametertype
- Spring
- hot-backup
- repmgr
- point cut
- java
- bean
- model context protocol
- minio
- docker
- async
- multi stage biluild
- object storage
- nosuchmethodexception
- kubernetes
- db lank
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
글 보관함