K3s Image Garbage Collection (GC) 임계값 설정 방법

Set K3s Image Gc Threshold K3s image gc threshold 설정 방법 정리 kubelet은 노드의 디스크 사용량이 image-gc-high-threshold(%)를 넘으면 사용하지 않는 이미지부터 순서대로 정리(garbage collection)를 시작하고, 사용량이 image-gc-low-threshold(%) 이하로 떨어질 때까지 정리를 계속함 기본값은 각각 85%, 80%로 다소 높게 설정되어 있어, 디스크 용량이 작은 노드(엣지, 온프레미스 등)에서는 디스크가 꽉 차기 전에 미리 정리되도록 아래처럼 값을 낮춰 설정하는 것이 안전함 config.yaml 설정 K3s 설치 디렉토리에 config.yaml 파일이 존재하지 않을 경우 config.yaml 파일 생성 sudo vi /etc/rancher/k3s/config.yaml config.yaml 파일에 아래 내용 추가 kubelet-arg: - "image-gc-low-threshold=65" - "image-gc-high-threshold=75" K3s 재시작 sudo systemctl restart k3s

December 13, 2024 · 1 min

K3s Nvidia GPU 연동 및 워크로드 설정 가이드

K3s Nvidia GPU 세팅 방법 K3s 클러스터에 GPU 를 사용하기 위한 Nvidia GPU 세팅 방법 정리 K3s 설치 K3s 가 설치되어 있지 않을 경우 K3s 설치 K3s 설치는 K3s 공식 문서를 참고하여 진행 Nvidia GPU 드라이버 설치 그래픽 카드 확인과 드라이버 설치 그래픽 카드 확인 lspci | grep -i nvidia # Nvidia 그래픽 카드가 설치되어 있는 경우 01:00.0 VGA compatible controller: NVIDIA Corporation TU102 [GeForce RTX 2080 Ti] (rev a1) 01:00.1 Audio device: NVIDIA Corporation TU102 High Definition Audio Controller (rev a1) 01:00.2 USB controller: NVIDIA Corporation TU102 USB 3.1 Host Controller (rev a1) 01:00.3 Serial bus controller: NVIDIA Corporation TU102 USB Type-C UCSI Controller (rev a1 # Nvidia 그래픽 카드가 설치되어 있지 않은 경우(예시) 00:02.0 VGA compatible controller: Intel Corporation HD Graphics 630 (rev 04) 설치 가능한 Nvidia 그래픽 카드 드라이버 확인 ubuntu-drivers devices # 설치 가능한 Nvidia 그래픽 카드 드라이버 목록(예시) == /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 == modalias : pci:v000010DEd00001E04sv000010DEsd000012AEbc03sc00i00 vendor : NVIDIA Corporation model : TU102 [GeForce RTX 2080 Ti] driver : nvidia-driver-525-server - distro non-free driver : nvidia-driver-535-open - distro non-free driver : nvidia-driver-535-server - distro non-free driver : nvidia-driver-525-open - distro non-free driver : nvidia-driver-535-server-open - distro non-free driver : nvidia-driver-418-server - distro non-free driver : nvidia-driver-470-server - distro non-free driver : nvidia-driver-470 - distro non-free driver : nvidia-driver-535 - distro non-free driver : nvidia-driver-525 - distro non-free driver : nvidia-driver-545 - third-party non-free recommended driver : nvidia-driver-450-server - distro non-free driver : nvidia-driver-545-open - third-party non-free driver : xserver-xorg-video-nouveau - distro free builtin 그래픽 카드 드라이버 설치(recommended 설치 권장) # recommended 드라이버 설치 sudo ubuntu-drivers autoinstall # recommended 드라이버 설치 후 재부팅 sudo reboot Nvidia Container Toolkit 설치 Nvidia Container Toolkit 설치는 Nvidia 공식 문서를 참고하여 진행 Nvidia Container Toolkit 과 관련된 패키지 설치 패키지 저장소 추가 # 패키지 저장소 추가 curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list 패키지 업데이트 및 Nvidia Container Toolkit 설치 sudo apt update sudo apt install -y nvidia-container-toolkit sudo apt install -y nvidia-container-runtime docker config 파일 수정 // /etc/docker/daemon.json 파일 수정 { "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "/usr/bin/nvidia-container-runtime", "runtimeArgs": [] } } } docker 재시작 sudo systemctl restart docker 정상 설치 확인 nvidia-smi K3s 설정 K3s GPU 설정을 위한 K3s 설정 파일 수정 K3s 설정 파일 수정 # K3s containerd 설정 파일 수정 # config.toml 파일은 K3s 시작 시 자동으로 생성되는 파일이므로 config.toml.tmpl 파일을 수정해야 함 sudo vi /var/lib/rancher/k3s/agent/etc/containerd/config.toml.tmpl K3s 설정 파일에 아래 내용 추가 version = 2 [plugins] [plugins."io.containerd.grpc.v1.cri"] stream_server_address = "127.0.0.1" stream_server_port = "10010" enable_selinux = false enable_unprivileged_ports = true enable_unprivileged_icmp = true sandbox_image = "rancher/mirrored-pause:3.6" [plugins."io.containerd.grpc.v1.cri".containerd] default_runtime_name = "nvidia" [plugins."io.containerd.grpc.v1.cri".cni] bin_dir = "/var/lib/rancher/k3s/data/dc43f496a0a9ac19d3b2444d390db38e0cfb38e672721f838b075422b8734994/bin" conf_dir = "/var/lib/rancher/k3s/agent/etc/cni/net.d" # 아래부터 nvidia runtime 설정을 위해 추가하는 내용 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia] privileged_without_host_devices = false runtime_engine = "" runtime_root = "" runtime_type = "io.containerd.runc.v2" [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options] BinaryName = "/usr/bin/nvidia-container-runtime" K3s 재시작 sudo systemctl restart k3s.service Nvidia device plugin 설치 Nvidia device plugin 설치는 Nvidia 공식 문서를 참고하여 진행 kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.3/nvidia-device-plugin.yml Nvidia device plugin 설치 확인 kubectl get pods -n kube-system | grep nvidia-device-plugin # Pod 확인(예시) nvidia-device-plugin-daemonset-xxxxx 1/1 Running 0 2m K3s GPU 세팅 테스트 GPU 사용 가능 여부 확인 GPU 사용 가능 여부 확인 클러스터에 테스트용 Pod 생성 $ cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Pod metadata: name: gpu-pod spec: restartPolicy: Never containers: - name: cuda-container image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2 resources: limits: nvidia.com/gpu: 1 # requesting 1 GPU tolerations: - key: nvidia.com/gpu operator: Exists effect: NoSchedule EOF Pod 생성 확인 kubectl logs gpu-pod # Pod 정상 로그 확인(예시) [Vector addition of 50000 elements] Copy input data from the host memory to the CUDA device CUDA kernel launch with 196 blocks of 256 threads Copy output data from the CUDA device to the host memory Test PASSED Done 추가 노드 GPU 세팅 추가 노드에 사용을 위해 그래픽 카드 드라이버 설치와 Nvidia Container Toolkit, K3s 설정 필요 추가 노드에도 동일하게 그래픽 카드 드라이버 설치 및 Nvidia Container Toolkit 설치 추가 노드에도 동일하게 K3s 설정 파일 수정 및 K3s 재시작 필요 참고 K3s 공식 문서 Nvidia 공식 문서 Nvidia device plugin

January 22, 2024 · 4 min

MicroK8s 설치와 Multus CNI 애드온 설정 가이드

1. MicroK8s 설치 Ubuntu 환경에서 MicroK8s 설치 # 최신 버전의 MicroK8s 설치 $ sudo snap install microk8s --classic # 특정 버전의 MicroK8s 설치 $ sudo snap install microk8s --classic --channel=1.27 1.1. 관리자 권한 그룹에 추가 MicroK8s 설치 후, 사용자가 MicroK8s를 사용하기 위해서는 관리자 권한 그룹에 추가해야 함 # 관리자 그룹에 MicroK8s 추가 sudo usermod -a -G microk8s $USER sudo chown -f -R $USER ~/.kube # 새로운 그룹 적용 $ newgrp microk8s 1.2. MicroK8s 시작 및 중지 MicroK8s 시작과 중지 방법 # MicroK8s 시작 $ microk8s start # MicroK8s 중지 $ microk8s stop 1.3. MicroK8s with Kubectl MicroK8s 는 kubectl 을 자체 패키지로 제공하고 있음 # MicroK8s 에서 제공하는 kubectl 명령어 $ microk8s kubectl get all --all-namespaces kubectl 을 사용하기 위해서는 MicroK8s 의 config 내용을 .kube/config 에 복사해야 함 # MicroK8s 의 config 내용을 .kube/config 에 복사 $ microk8s config > ~/.kube/config # kubectl 명령어 실행 $ kubectl get all --all-namespaces 2. MicroK8s add Node (Worker Node) MicroK8s 에서는 add-node 명령어를 통해 Worker Node 를 추가할 수 있음 Master Node 에서 add-node 명령어를 실행하면, Worker Node 에서 실행할 수 있는 명령어를 제공함 # MicroK8s 에서 제공하는 add-node 명령어 $ microk8s add-node # MicroK8s 에서 제공하는 add-node 명령어의 결과 From the node you wish to join to this cluster, run the following: microk8s join <MASTER_IP>:25000/<TOKEN> Use the '--worker' flag to join a node as a worker not running the control plane, eg: microk8s join <MASTER_IP>:25000/<TOKEN> --worker If the node you are adding is not reachable through the default interface you can use one of the following: microk8s join <MASTER_IP>:25000/<TOKEN> microk8s join 10.0.0.1:25000/<TOKEN> microk8s join 172.17.0.1:25000/<TOKEN> 2.1. MicroK8s Worker Node join Master Node 에서 획득한 add-node 명령어를 Worker Node 에서 실행하면, Worker Node 가 Master Node 에 join 됨 # worker node join $ microk8s join <MASTER_IP>:25000/<TOKEN> --worker 2.1.1. Worker Node Host 정보 추가 Master Node 로 join 을 위해 Worker Node 의 Host 정보를 추가해야 함 # hosts 파일 수정 $ sudo vi /etc/hosts # Worker Node 의 Host IP 와 Host Name 추가 <WORKER_IP> worker 2.2. Master Node 에서 Worker Node 추가 확인 Master Node 에서 Worker Node 가 정상적으로 추가되었는지 확인 # Master Node 에서 Worker Node 확인 $ microk8s kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready <none> 10d v1.27.4 worker Ready <none> 10d v1.27.4 3. Multus 에드온 설치 Multus 사용을 위해 Multus 에드온을 설치해야 함 ...

August 7, 2023 · 4 min

Helm Chart Repository 구축 및 관리 가이드 (ChartMuseum)

1. Chart Museum 내부 쿠버네티스 클러스터에 Helm Chart Repository를 구축하기 위해 Chart Museum을 사용 Chart Museum은 Helm Chart를 저장하고 관리하기 위한 오픈소스 프로젝트 참고: Helm 3.8부터 OCI 레지스트리(예: Harbor, ECR, GHCR 등)를 통한 Chart 배포가 정식 지원되며, 업계에서는 OCI 레지스트리 방식으로 점차 전환되는 추세임(Harbor는 2.6 버전부터 Chart Museum 방식을 deprecated 처리함). 별도의 Chart Repository 서버 운영 부담을 줄이고 싶다면 이미 사용 중인 컨테이너 레지스트리에 OCI 방식으로 Chart를 올리는 것도 고려할 만함 1.1. Chart Museum 설치 Chart Museum은 Helm Chart로 설치 가능 Chart Museum Helm Chart를 사용하여 설치 # helm 저장소 추가 $ helm repo add chartmuseum https://chartmuseum.github.io/charts $ helm repo update # 설치 $ helm install -n chartmuseum chartmuseum chartmuseum/chartmuseum # 특정 버전 설치 $ helm install -n chartmuseum chartmuseum chartmuseum/chartmuseum --version 3.10.1 # 설치 확인 $ helm list -n chartmuseum NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION chartmuseum chartmuseum 1 2023-07-17 11:16:50.183240294 +0900 KST deployed chartmuseum-3.10.1 0.16.0 1.1.1. Chart Museum 설정 변경 Chart Museum 설치 시 기본 설정으로 설치되며, 설정 변경을 위해 values.yaml 파일을 수정하여 설치 가능 Chart Museum Configuration 참고 # Chart Museum 설정 변경 $ helm upgrade -n chartmuseum chartmuseum chartmuseum/chartmuseum -f values.yaml 1.1.2. Chart Museum 삭제 # Chart Museum 삭제 $ helm uninstall -n chartmuseum chartmuseum 1.2. Chart Museum 사용 Chart Museum은 REST API를 제공하여 Chart를 업로드/다운로드 가능 1.2.1. Chart 업로드 Chart Museum에 Chart를 업로드하기 위해서는 Chart 파일이 필요 Chart 생성과 설정은 Chart 작성 가이드 참고 Chart 파일은 helm package 명령어를 사용하여 생성 가능 Chart Museum 업로드 관련 자세한 내용은 Chart Museum Upload 참고 # Chart 생성 # 기본 설정 파일을 포함한 Chart가 생성되며 해당 내용을 수정하여 Helm Chart를 생성 $ helm create <chart-name> # Chart 업로드를 위한 패키지 생성 $ helm package <chart-name> Creating <chart-name>-0.1.0.tgz # Chart Museum에 생성된 패키지 파일 업로드 $ curl --data-binary "@<chart-name>.tgz" http://<chartmuseum-service-ip>:<port>/api/charts # 업로드 확인 $ curl http://<chartmuseum-service-ip>:<port>/api/charts * 주의: API 사용 설정 Chart Museum은 기본적으로 API 사용이 비활성화 되어 있음 API 사용을 위해 Chart Museum Deployment 설정 파일을 수정해야 함 # Chart Museum Deployment 설정 파일 수정 $ kubectl edit deployment chartmuseum -n chartmuseum # DISABLE_API 설정 수정 template: spec: containers: env: - name: DISABLE_API value: "false" # 기본값은 "true" 1.2.2. 업로드된 Chart 사용법 Chart Museum에 업로드된 Chart를 사용하기 위해서는 Chart Museum을 Helm Repository로 추가해야 함 설치 관련 자세한 내용은 Helm Chart Install 참고 # Chart Museum을 Helm Repository로 추가 $ helm repo add <repo-name> http://<chartmuseum-service-ip>:<port> $ helm repo update # Chart Museum에 업로드된 Chart 목록 확인 $ helm search repo <repo-name> NAME CHART VERSION APP VERSION DESCRIPTION <repo-name>/<chart-name> 0.1.0 1.16.0 A Helm chart for Kubernetes Chart Museum에 업로드된 Chart를 사용하기 위해서는 helm install 명령어를 사용하여 설치 가능 # Chart Museum에 업로드된 Chart 설치 $ helm install <release-name> <repo-name>/<chart-name>

July 18, 2023 · 3 min