Kubernetes의 리소스 제한
이 페이지에서
- 전제 조건
- 무엇을 할 것인가?\n
- 리소스 제한\n
- 결론
노드에 사용 가능한 리소스가 충분하면 컨테이너가 더 많은 리소스를 사용할 수 있습니다. 컨테이너에 필요한 각 리소스의 양을 지정할 수 있습니다. 지정할 일반적인 리소스는 CPU와 메모리입니다. 포드의 컨테이너에 대한 리소스 요청을 지정하면 스케줄러가 포드를 배치할 노드를 결정합니다. 컨테이너에 대한 리소스 제한을 지정하면 kubelet이 제한을 처리하여 실행 중인 컨테이너가 우리가 설정한 제한을 더 이상 사용할 수 없도록 합니다.
예를 들어 컨테이너에 대해 메모리 요청을 100MiB로 설정하면 컨테이너가 더 많은 RAM을 사용하려고 시도할 수 있습니다. 하지만 해당 컨테이너에 대해 메모리 한도를 4GiB로 설정하면 런타임은 컨테이너가 구성된 리소스 한도 이상을 사용하지 못하도록 합니다.
CPU와 메모리를 컴퓨팅 리소스라고 합니다.
포드의 각 컨테이너는 다음 중 하나 이상을 지정할 수 있습니다.
- CPU 제한\n
- 메모리 제한\n
- hugepages-
에 대한 제한\n - CPU 요청
- 메모리 요청
- hugepages-
에 대한 요청\n
Kubernetes의 리소스에 대해 자세히 알아보려면 여기를 클릭하여 Kubernetes의 공식 문서를 방문하세요.
이 기사에서는 CPU 및 메모리에 대한 자원 제한 및 요청의 예를 볼 것입니다. Metric Server도 사용할 것입니다. Metrics Server는 클러스터의 리소스 사용 데이터 집계자이며 기본적으로 클러스터에 배포되지 않습니다. 이 Metric Server를 사용하여 Pod의 리소스 소비를 확인합니다.
전제 조건
- 워커 노드가 1개 이상 있는 Kubernetes 클러스터.
Kubernetes 클러스터를 만드는 방법을 알아보려면 여기를 클릭하세요. 이 안내서는 AWS Ubuntu 18.04 EC2 인스턴스에서 1개의 마스터와 2개의 노드가 있는 Kubernetes 클러스터를 생성하는 데 도움이 됩니다.\n
어떻게 할까요?
- 리소스 제한\n
리소스 제한
진행하고 리소스 요구 사항이 지정된 포드를 생성하기 전에 Metric Server를 설치하겠습니다.
다음 명령을 사용하여 Metric Server Github 리포지토리를 복제하고 설치합니다.
git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
cd kubernetes-metrics-server/
오브젝트 파일을 사용하여 Metric Server를 작성하십시오.
kubectl create -f .
Metric Server가 시작될 때까지 잠시 기다리십시오. 잠시 후 다음 명령어를 실행하여 클러스터 노드를 모니터링할 수 있습니다.
kubectl top node
이제 메모리 요청 및 제한이 포함된 다음 콘텐츠가 포함된 포드 정의 파일을 생성합니다.
vim my-pod-with-memory.yml
apiVersion: v1 kind: Pod metadata: name: my-pod-memory-demo spec: containers: - name: my-container-memory-demo image: polinux/stress resources: limits: memory: "50Mi" requests: memory: "20Mi" command: ["stress"] args: ["--vm", "1", "--vm-bytes", "30M", "--vm-hang", "1"]
메모리 제한을 50Mi로 지정하고 메모리 요청을 20Mi로 지정한 "resources" 속성을 찾을 수 있습니다.
클러스터에서 기본 네임스페이스가 있는 기존 팟(Pod)을 확인하십시오.
kubectl get pods #Get pods from the default namespace
위 단계에서 생성한 포드 정의를 사용하여 포드를 생성합니다.
kubectl create -f my-pod-with-memory.yml #Create a pod
kubectl get pods
이제 포드 세부 정보를 얻으면 포드가 20Mi 메모리를 요청하고 50Mi 메모리 제한이 있음을 알 수 있습니다.
kubectl get pods
kubectl describe pod my-pod-memory-demo #Describe the pod
Pod 사용량은 다음 명령어를 사용하여 확인할 수 있습니다.
kubectl top pods #Check resource consumption by the pod
이제 CPU 요청 및 제한으로 포드 정의를 생성합니다.
vim my-pod-with-cpu.yml
apiVersion: v1 kind: Pod metadata: name: my-pod-cpu-demo spec: containers: - name: my-container-cpu-demo image: vish/stress resources: limits: cpu: "1" requests: cpu: "0.5" args: - -cpus - "2"
위의 파일에서 정의에 CPU 요청이 0.5이고 한도가 1인 "resource" 속성이 있음을 알 수 있습니다. 또한 한도를 초과하는 요구 사항으로 2개의 CPU를 전달하고 있음에 유의하십시오.
이제 다음 명령을 사용하여 CPU 요청 및 제한이 있는 포드를 생성해 보겠습니다.
kubectl apply -f my-pod-with-cpu.yml #Create a pod
kubectl get pods
우리가 만든 포드의 세부 정보를 가져옵니다.
kubectl get pods
kubectl describe pod my-pod-cpu-demo
Pod가 1CPU 제한으로 0.5 또는 500m CPU를 요청한 것을 볼 수 있습니다.
CPU 사용량을 확인하려면 다음 명령을 사용하십시오.
kubectl top pod #Check resource consumption by the pod
위의 스크린샷에서 Pod 정의에서 2개의 CPU를 인수로 전달한 후에도 제한, 즉 1개 CPU 이상을 소비하지 못하는 것을 볼 수 있습니다. 여기서 "my-pod-cpu-demo" 포드는 CPU 1개에 해당하는 999m CPU를 소비할 수 있으며 소비를 늘릴 수 없습니다.
결론
이 기사에서는 Metric Server를 사용하여 클러스터에서 모니터링을 활성화하는 단계를 살펴보았습니다. 포드가 CPU 및 메모리를 요청하고 지정된 제한을 초과하지 않는 리소스를 소비하는 방법을 살펴보았습니다.