티스토리 뷰

클라우드/쿠버네티스

자원 관리

ybchoi 2022. 5. 24. 20:32

Pod를 배포할때 컨테이너가 사용할 자원에 대한 제한을 걸 수 있다

제한이 없는 Pod가 노드에 할당되면 Pod는 필요시 노드의 모든 자원을 사용 할 수 있음

제한 할 수 있는 리소스는 CPU,Memory,ephemeral(임시)스토리지

1.CPU제한

CPU는 밀리코어(m)로 표현 합니다 실제 물리 코어 1이 1000m코어이며 1코어를 1000개의 밀리코어로 나누어 할당할만큼 정확하게 작동하며 제한 됩니다

2.Memory

메모리는 일반적으로 사용하는 K,M,G,T,P 단위를 이용하여 제한 할 수 있습니다

3.임시 스토리지

emptydir등 pod에서 임시로 사용하는 스토리지에 대한 제한 입니다

메모리와 마찬가지로 데이터 단위를 이용하여 제한 할 수 있습니다

--- 
apiVersion: apps/v1 
kind: Deployment
metadata:   
  name: limitpod
  labels: 
    app: limitpod
spec:
  selector:
    matchLabels:
      app: limitpod
  template:
    metadata:
      labels:
        app: limitpod
    spec:
      containers:   
        - name: limitpod 
          image: k8s.gcr.io/hpa-example
          ports: 
            - name: web 
              containerPort: 80
              protocol: TCP
          resources:
            requests:
              memory: "18M"
              cpu: "150m"
              ephemeral-storage: "100M"
            limits:
              memory: "18M"
              cpu: "300m"
              ephemeral-storage: "100M"
---
apiVersion: v1
kind: Service
metadata:
  name: limitpod
  labels:
    run: limitpod
spec:
  ports:
  - port: 80
  selector:
    app: limitpod

위 예제는 각 컨테이너당 0.3코어와 128MB의 메모리, 2Gi의 임시 스토리지 제한이 있다(POD아님)

requests 만큼의 자원이 노드에 있으면 컨테이너가 노드에 할당 될 수 있음

자원의 최대치는 limits를 초과할 수 없으며 자원이 limit를 초과하게 되면 kubelet에 의해 종료 된다

-CPU의 경우 Hard Limit이기때문에 초과할수 없으며 Mem의 경우 초과하게되면 컨테이너가 재시작 된다

-스토리지의 경우 컨테이너 재시작만으로는 비워지지 않으므로 파드를 축출(eviction)시켜 다른 노드로 재배치 시킴으로 스토리지를 초기화 시킨다 메모리와는 작동방식이 다름

requests비율을 낮추어 pod를 일반적인 상황보다 많이 할당 할수 있지만 모든 컨테이너가 자원을 한계까지 사용하면 노드의 자원부족 현상이 생길수 있어 적절하게 조절하여 할당 하여야 함

일반적으로는 리미트만큼의 리퀘스트를 주는것이 좋겠으나 자원을 더 활용하려면 overcommit식으로 활용 할 수 있음

또한 리미트는 네임스페이스 별로 최대로 사용할수 있는 자원이나 오브젝트를 설정할수도 있는데 이것은 쿼터라고 불림

특정 네임스페이스내에 사용할수 있는 자원을 제한시켜 과도하게 클러스터 전체의 자원을 점유하지 못하도록 함

아래와 같이 사용함

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi
    requests.nvidia.com/gpu: 4

위 예제는 자원을 제한시키는 것이고

apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-counts
spec:
  hard:
    configmaps: "10"
    persistentvolumeclaims: "4"
    pods: "4"
    replicationcontrollers: "20"
    secrets: "10"
    services: "10"
    services.loadbalancers: "2"

위 예제는 오브젝트 갯수를 지정하여 제한시킴

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함