🍰k3s를 사용한 k8s 테스트 환경 구성
K3s
K3s는 kube-apiserver, kube-scheduler, kubelet, kube-controller-manager 및 kube-proxy와 같은 코어 쿠버네티스 구성 요소만 포함합니다. 코어 구성 요소만 사용하면 배포판이 경량화되지만 외부 애드온으로 구성 요소를 쉽게 교체할 수 있습니다.
이러한 구성 요소들을 간단한 서버와 에이전트 모델로 표시되는 통합 프로세스로 묶습니다. k3s 서버를 실행하면 쿠버네티스 서버가 시작되고 자동으로 로컬 호스트를 에이전트로 등록하여 단일 노드 쿠버네티스 클러스터를 생성합니다.
K3s vs K8s
K3s deploys applications and spins up clusters faster than K8s.
K8s takes longer to deploy applications and spin up clusters, compared to K3s.
K3S is lightweight. Its small size enables it to run clusters in IoT devices with limited resources, like Raspberry Pi.
K8s is not operable in edge computing or IoT devices.
K3s can host only workloads that run in a single cloud.
K8s can host workloads that run across multiple environments.
K3s is ideal for small workloads. Its single binary is approximately 100 MB or less, ensuring it can quickly spin up clusters, schedule pods, and perform other tasks.
K8s is ideal for larger workloads. It has a rich set of features and you can deploy it across complex infrastructure.
Features
K3s는 경량화된 쿠버네티스(Kubernetes) 배포판으로 다음과 같은 특징을 갖습니다:
간단한 설치 과정: 100MB 미만의 단일 바이너리로 패키징되어 있습니다.
다양한 환경 적용: 엣지 컴퓨팅, IoT, CI, 개발, ARM, K8s 임베딩 등에 적합합니다.
완벽한 쿠버네티스 호환성: 쿠버네티스와 완벽하게 호환되는 배포판입니다.
경량 저장소 백엔드: 기본적으로 sqlite3를 사용하며, etcd3, MySQL, Postgres도 지원합니다.
간편한 실행기: TLS 및 옵션의 복잡성을 처리하는 간단한 실행기로 감싸져 있습니다.
기본적으로 안전: 가벼운 환경에 적합한 기본값으로 안전합니다.
포함된 기능: 로컬 스토리지 제공, 서비스 로드 밸런서, 헬름 컨트롤러, Traefik 인그레스 컨트롤러 등이 내장되어 있습니다.
쿠버네티스 컨트롤 플레인 컴포넌트의 통합: 모든 컴포넌트가 하나의 바이너리와 프로세스로 통합되어, 인증서 배포와 같은 복잡한 클러스터 작업을 자동화하고 관리합니다.
최소한의 외부 종속성: 필요한 종속성들이 패키지에 포함되어 있으며, 최신 커널과 cgroup 마운트만 필요합니다.
Architecture of k3s
자세한 구조에 대한 설명은 좀 더 자료 조사가 필요해 보입니다.
Installation
# 아래 명령어들은 single node ubuntu server 에서root 계정으로 진행
# 빠른 설치 명령어
curl -sfL https://get.k3s.io | sh -s - server --docker
# k3s 가 잘 설치되었는지 설정 yaml 파일 여부를 확인
cat /etc/rancher/k3s/k3s.yaml
# 쿠버네티스 클러스터 설정을 위해
mkdir .kube # 폴더가 없는 경우 생성
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config # 쿠버네티스의 설정 파일을 k3s 것으로 사용
chown $USER:$USER ~/.kube/config # user가 접근할 수 있는 권한 업데이트k3s 노드가 잘 설정되었는지 확인 👀 👍
root@<server>:~# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
server Ready control-plane,master 5m34s v1.21.7+k3s1 11.11.111.11 <none> Ubuntu 20.04.2 LTS 5.15.0-46-generic docker://20.10.17GPU 리소스 연결 (서버 환경에서 nvidia-smi 명령어가 정상 동작하는 것을 가정)
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.10.0/nvidia-device-plugin.ymlNvidia plugin pod 가 정상 동작 중인지 확인 필요
kubectl get pod -n kube-system | grep nvidiaKubernetes 환경에서 GPU 리소스가 인식되고 있는지 확인
kubectl get nodes "-o=custom-columns=NAME:.metadata.name,GPU:.status.allocatable.nvidia\.com/gpu"Uninstall K3s
# Uninstalling Servers
# To uninstall K3s from a server node, run:
/usr/local/bin/k3s-uninstall.sh
# Uninstalling Agents
# To uninstall K3s from an agent node, run:
/usr/local/bin/k3s-agent-uninstall.sh # optional?Reference
Last updated