Kubernetes 컨테이너 리소스 관리

신민창·2021년 5월 10일
0

kubernetes

목록 보기
8/13

Kubernetes 컨테이너 리소스 관리

파드를 지정할 때, 컨테이너에 필요한 각 리소스의 양을 선택적으로 지정할 수 있다. 지정할 가장 일반적인 리소스는 CPU와 메모리(RAM) 그리고 다른 것들이 있다.
파드에서 컨테이너에 대한 리소스 요청을 지정하면, 스케줄러는 이 정보를 사용하여 파드가 배치될 노드를 결정한다. 컨테이너에 대한 리로스 제한을 지정하면, kubelet은 실행 중인 컨테이너가 설정한 제한보다 많은 리소스를 사용할 수 없도록 해당 제한을 적용한다. 또한 kubelet은 컨테이너가 사용할 수 있도록 해당 시스템 리소스의 최소 요청량을 예약한다.

파드와 컨테이너의 리소스 요청 및 제한

파드의 각 컨테이너는 다음 중 하나 이상을 지정할 수 있다.

spec.containers[].resources.limits.cpu
spec.containers[].resources.limits.memory
spec.containers[].resources.limits.hugepages-<size>
spec.containers[].resources.requests.cpu
spec.containers[].resources.requests.memory
spec.containers[].resources.requests.hugepages-<size>

요청과 제한은 개별 컨테이너에서만 지정할 수 있지만, 파드 리소스 요청 및 제한에 대해 이야기하는 것이 편리하다. 특정 리소스 타입에 대한 파드 리소스 요청 제한은 파드의 각 컨테이너에 대한 해당 타입의 리소스 요청/제한의 합이다.

리소스 관리코드

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: pod1
    image: nginx
    resources:        ## requests로 cpu:0.1m, memory: 10M을 설정했다.
      requests:
        cpu: 0.1m
        memory: 10M
$ kubectl describe pod pod1

...
Containers:
  pod1:
    Container ID:   
    Image:          nginx
    Image ID:       
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ContainerCreating
    Ready:          False
    Restart Count:  0
    Requests:         ## 설정된 값을 describe 명령어를 통해서 확인할 수 있다.
      cpu:        1m
      memory:     10M
apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
  - name: pod2
    image: nginx
    resources:      ## cpu를 10m, memory를 10M로 제한
      limits:       ## 제한만 설정하는 경우 requests가 limits만큼 설정됨
        cpu: 10m
        memory: 10
apiVersion: v1
kind: Pod
metadata:
  name: pod3
spec:
  containers:
  - name: pod3
    image: nginx
    resources:  ## limits와 requests 둘 다 설정 가능
      limits:
        cpu: 10m
        memory: 10M
      requests:
        cpu: 5m
        memory: 5M

이런식으로 리소스를 관리할 수 있다.
그런데 만약 리소스 requests 값 설정을 내가 실행하고 있는 가상환경자원보다 크게 설정할 경우 pod 생성이 되지 않는다.
직접 만들어보면

apiVersion: v1
kind: Pod
metadata:
  name: pod4
spec:
  containers:
  - name: pod4
    image: nginx
    resources:
      requests:
        cpu: 2000m
        memory: 3000M
        
        
$ kubectl create -f pod4.yaml

$ kubectl get pod
NAME   READY   STATUS    RESTARTS   AGE
pod4   0/1     Pending   0          42s   ## Pending에서 진행되지 않는다.

0개의 댓글

관련 채용 정보