-
[K8S] Reserve Compute ResourcesKubernetes 2024. 3. 7. 19:32
Node Capacity
출처 :kubernetes.io - Node의 자원 분배
- allocatable : 노드에서 컨테이너가 사용할 수 있는 실제 리소스 양
- kube-reserved : Kubernetes 시스템 구성 요소들이 사용하는 리소스 양
(ex. kubelet, kube-scheduler, kube-proxy 등의 서비스들이 동작하는 데 필요한 리소스 양) - system-reserved : 노드 전체에서 시스템 프로세스 및 기타 운영 시스템 자원이 사용하는 양
- eviction-threshold : 배치 제한 임계값
( = 노드에서 허용 가능한 리소스 부족의 임계값 )
- POD는 해당 Node에 allocatable만 사용 가능하다.
- Reserve Compute Resources : Kubernetes에서 특정 어플리케이션이나 컨테이너에 필요한 리소스를 미리 예약(또는 보장)함으로써, 그 어플리케이션이나 컨테이너가 필요로 하는 리소스를 안정적으로 확보하기 위함.
Reserve 최소값 계산하기
계산 사이트 : Kubernetes instance calculator (learnk8s.io)
Kubernetes instance calculator
Explore the best instance types for your Kubernetes cluster interactively.
learnk8s.io
- Cloud 기준 reserve 값
계산 예제 ( AWS-t3.2xlarge 기준 (CPU : 8C / MEM : 32G)
- CPU
- eviction-threshold : 0.0vCPU (~0%)
- allocatable : 7.7vCPU (96.3%)
- kube-reserved : 0.1vCPU (1.3%)
- system-reserved : 0.1vCPU (1.3%)
- MEMORY
- eviction-threshold : 100MiB (~0.3%)
- allocatable : 31.72MiB (94.5%)
- kube-reserved : 1.43MiB (4.5%)
- system-reserved : 100MiB (0.3%)
TEST
- 현재 node resource 확인
- Capacity : 노드에서 사용 가능한 전체 리소스 양
- Allocatable : 시스템 및 노드 운영체제에 의해 예약된 일부 리소스(kube-reserved, system-reserved, eviction-threshold)를 제외한 실제로 Pod에 할당 가능한 리소스 양
kubectl describe node <node-name>
- kubelet 환경 설정 파일 수정
- /etc/kubernetes/kubelet.env
KUBE_LOG_LEVEL="--v=2" KUBELET_ADDRESS="--node-ip=192.168.0.100" KUBELET_HOSTNAME="--hostname-override=test-01" KUBELET_ARGS="--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \ --config=/etc/kubernetes/kubelet-config.yaml \ --kubeconfig=/etc/kubernetes/kubelet.conf \ --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock \ --runtime-cgroups=/system.slice/docker.service \ --kube-reserved=cpu=100m,memory=1.5Gi,ephemeral-storage=1Gi \ --system-reserved=cpu=100m,memory=1Gi,ephemeral-storage=1Gi \ --eviction-hard=memory.available<100Mi,nodefs.available<10% \ " KUBELET_CLOUDPROVIDER="" PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
ephemeral-storage : 노드의 로컬 디스크 공간
nodefs.available<10% : 노드 파일 시스템에서 사용 가능한 공간이 전체 공간의 10% 미만인 경우를 나타내는 조건
- 적용
systemctl restart kubelet
- 확인
kubectl describe node <node-name>
- test pod 배포
- test01.yaml, test02.yaml
apiVersion: v1 kind: Pod metadata: name: alpine-pod spec: containers: - name: alpine-container image: alpine command: ["sleep", "3600"] resources: requests: memory: "14110Mi" cpu: "3900m" limits: memory: "28220Mi" cpu: "7800m"
kubectl apply -f test01.yaml kubectl apply -f test02.yaml
- test 결과
- 예약한 리소스가 넘어가서 pending 상태
Reference
'Kubernetes' 카테고리의 다른 글
[K8S] Kubernetes에서 GPU 사용하기 (apt/yum) (0) 2024.03.10 [K8S] Kubespray 설정 파일 변경하기 (0) 2024.03.09 [K8S] Kubespray를 이용한 Cluster초기화, Node 추가/제거 (0) 2024.03.07 [K8S] Kubespray로 Kubernetes 설치하기 - CentOS7/Rocky8 (0) 2024.03.01 Kubespray 분석 (0) 2023.08.25 - Node의 자원 분배