針對k8s羣集作資源限制

前言

Kubernetes對資源的限制其實是經過cgroup來控制的,cgroup是容器的一組用來控制內核如何運行進程的相關屬性集合,針對內存、CPU各類設備都有對應的cgroup。vim

默認狀況下,Pod運行沒有CPU和內存的限制,這就意味着系統中的任何pod將可以像執行該pod所在的節點同樣,消耗足夠多的CPU和內存,通常會針對某些應用的Pod資源進行資源限制,這個資源限制是經過resources的limits來實現的。api

注:如下只是在yaml文件中進行資源限制的一個片斷,並非完整的yaml文件!
一、針對pod的資源限制:markdown

[root@master limit]# vim cgroup-pod.yaml 

spec:
  containers:
  - name: xxx
    image: xxx
    ports:
    - protocol: TCP
      containerPort: 80
    resources:
      limits:             //硬限制
        cpu: "4"
        memory: 2Gi
      requests:           //運行pod時請求的資源數量
        cpu: 260m
        memory: 260Mi

二、基於名稱空間的資源限制(能夠具體制定限制某一個名稱空間)
1)計算資源配額ide

[root@master limit]# vim compute-resource.yaml 

apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-resources
spec:
  hard:
    pods: "20"         //全部pod數量不能夠超過20個
    requests.cpu: "20"          //初始請求的CPU不能夠超過20m
    requests.memory: 100Gi    //初始請求的內存不能夠超過100G
    limits.cpu: "40"           //CPU的硬限制
    limits.memory: 200Gi        //內存的硬限制

2)資源對象數量配額限制code

[root@master limit]# vim object-counts.yaml 

apiVersion: v1
kind: ResourceQuota
metadata:
  name: object-counts
spec:
  hard:
    configmaps: "10"      //最多能夠建立10個configmap
    persistentvolumeclaims: "4"      //最多能夠建立4個PVC
    replicationcontrollers: "20"              //最多能夠建立20個RC資源對象
    secrets: "10"                   //最多能夠建立10個secrets   
    service.loadbalancers: "2"      //最多能夠建立2個svc

3)配置CPU和內存的limitRange對象

[root@master limit]# vim limitRange.yaml 

apiVersion: v1
kind: LimitRange
metadata:
  name: mem-limit-range
spec:
  limits:
  - default:        
      memory: 50Gi    //硬限制
      cpu: 5              //硬限制
    defaultRequest:       /初始請求
      memory: 1Gi
      cpu: 1
    type: Container        //限制對象爲容器
相關文章
相關標籤/搜索