웹사이트 검색

Kubernetes의 리소스 제한


이 페이지에서

  1. 전제 조건
  2. 무엇을 할 것인가?\n
  3. 리소스 제한\n
  4. 결론

노드에 사용 가능한 리소스가 충분하면 컨테이너가 더 많은 리소스를 사용할 수 있습니다. 컨테이너에 필요한 각 리소스의 양을 지정할 수 있습니다. 지정할 일반적인 리소스는 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. 워커 노드가 1개 이상 있는 Kubernetes 클러스터.
    Kubernetes 클러스터를 만드는 방법을 알아보려면 여기를 클릭하세요. 이 안내서는 AWS Ubuntu 18.04 EC2 인스턴스에서 1개의 마스터와 2개의 노드가 있는 Kubernetes 클러스터를 생성하는 데 도움이 됩니다.\n

어떻게 할까요?

  1. 리소스 제한\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 및 메모리를 요청하고 지정된 제한을 초과하지 않는 리소스를 소비하는 방법을 살펴보았습니다.