1. 程式人生 > 實用技巧 >Kubernetes (二)POD資源限制

Kubernetes (二)POD資源限制

一、request和limits 1、request:告訴POD執行需要多少資源,用於叢集的節點排程 2、limits:指定POD最多可以使用多少資源 二、記憶體限制 限制可使用記憶體200Mi

# more 1.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test
  namespace: test
spec:
  containers:

  - name: resource-demo
    image: nginx
    resources:
      limits:
        memory: 200Mi
      requests:
        memory: 200Mi
# kubectl create namespace test
# kubectl apply -f 1.yaml 
# kubectl -n test get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test 0/1 ContainerCreating 0 25s <none> 10.30.20.44 <none> <none> # docker inspect bf45666c14f0 -f "{{.State.Pid}}" 368 # grep memory /proc/368/cgroup
11:memory:/kubepods/burstable/podeab504be-2d32-11eb-a7e0-fa163e6a6737/bf45666c14f06a08cbe305d68a7dc7f4f7f40f9b73fb489abb7c1a235b5c2b88 # more /sys/fs/cgroup/memory/kubepods/burstable/podeab504be-2d32-11eb-a7e0-fa163e6a6737/bf45666c14f06a08cbe305d68a7dc7f4f7f40f9b73fb489abb7c1a235b5c2b88/memory.limit_in_bytes 209715200
三、CPU限制 1、yaml檔案

# more cpu.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: test
  namespace: test
spec:
  containers:
  - name: resource-demo
    image: nginx
    resources:
      limits:
        cpu: 100m
      requests:
        cpu: 50m
# kubectl apply -f cpu.yaml 
# kubectl -n test get pod -o wide 
NAME   READY   STATUS    RESTARTS   AGE   IP              NODE           NOMINATED NODE   READINESS GATES
test   1/1     Running   0          69s   10.20.101.231   10.30.20.113   <none>           <none>
2、登陸節點10.30.20.113

# docker ps |grep test
c468cb5989e0        nginx                                               "/docker-entrypoint.…"   2 minutes ago       Up 2 minutes k8s_resource-demo_test_test_f69e63fb-2d35-11eb-a7e0-fa163e6a6737_0
3986a5234a7b        mirrorgooglecontainers/pause-amd64:3.0              "/pause"                 2 minutes ago       Up 2 minutes k8s_POD_test_test_f69e63fb-2d35-11eb-a7e0-fa163e6a6737_0
# docker inspect c468cb5989e0 -f "{{.State.Pid}}"            
3966
# grep cpu /proc/3966/cgroup 
4:cpuset:/kubepods/burstable/pod0ab4f5cd-2eca-11eb-a7e0-fa163e6a6737/c468cb5989e0f5338175d8a8bdc2080e4788b6d7a70ccae0fa192c8f6c8526fd
2:cpuacct,cpu:/kubepods/burstable/pod0ab4f5cd-2eca-11eb-a7e0-fa163e6a6737/c468cb5989e0f5338175d8a8bdc2080e4788b6d7a70ccae0fa192c8f6c8526fd
# cd /sys/fs/cgroup/cpu
# cd kubepods/burstable/pod0ab4f5cd-2eca-11eb-a7e0-fa163e6a6737/c468cb5989e0f5338175d8a8bdc2080e4788b6d7a70ccae0fa192c8f6c8526fd 
# more cpu.shares 
51
# more cpu.cfs_period_us 
100000
# more cpu.cfs_quota_us 
10000
Requests 使用的是 cpushares系統,cpu shares 將每個 CPU 核心劃分為1024個時間片,並保證每個程序將獲得固定比例份額的時間片。 如果總共有 1024 個時間片,並且兩個程序中的每一個都將cpu.shares設定為512,那麼它們將分別獲得大約一半的 CPU 可用時間。 但 cpu shares 系統無法精確控制 CPU 使用率的上限,如果一個程序沒有設定 shares,則另一個程序可用自由使用 CPU 資源。 limits是由cpu.cfs_period_us 和cpu.cfs_quota_us 共通決定的,在本例中我們將 Pod 的 cpu limits 設定為100m,這表示100/1000個 CPU 核心