iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
DevOps

前端工程師學習 DevOps 之路系列 第 16

Day16-Kubernetes 那些事 - Resource Quotas

前言

昨天的文章講完 Deployment 以及 ReplicaSet 後相信大家應該對於如何產生更多一樣內容的 Pod 有了初步的了解了,但其實這樣是不夠的,由於我們 Pod 每產生一個新的都會消耗機器上的資源,假如沒有針對這些 Pod 進行資源存取的控制,那機器的資源很快就會不夠用了,所以今天要來介紹一下如何控制 Pod 的資源存取量。

什麼是 Resource Quotas?

Quota 翻成中文就是配額的意思,所以 Resource Quotas 其實就是資源的配額,透過 Resource Quotas 就可以讓每一個 container 都可以有屬於該 Pod 自己的最小需求量與以及最多使用量,如此一來便可以有效的限制這個 Pod 對於資源的存取量,避免單一 Pod 佔用機器太多資源。

Resouce Quotas 可限制的內容

Resource Quotas 可限制的東西非常多,從機器上的資源到 K8s 自身的資源都可以進行限制, 如果是針對 Pod 自身的話可以限制的為機器上的 cpu 以及 memory,如果是在 K8s 中直接創一個 Resouce Quotas 物件則可以限制像是 Service、Replication Controller 等等只要是以前文章有介紹過的幾乎都可以限制其數量,由於本篇文章主要是講述如何限制 Pod 使用機器資源,所以這邊會把重點專心擺在 cpu 以及 memory 兩個設定上。

Resource Quotas 搭配 Deployment 寫法

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloworld
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 60
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: frontend
  template:
    metadata:
      labels:
        app: frontend
    spec:
      containers:
      - name: helloworld
        image: w5151381guy/helloworld
        imagePullPolicy: IfNotPresent
        ports:
          - containerPort: 8080
        resources:
          requests:
            cpu: 200m
            memory: 500Mi
          limits:
            cpu: 500m
            memory: 800Mi

這邊可以看到如果要在 Pod 中建立 Resource Quota 就是寫在 container 內,因為真正運作的是 container,這邊看字面上的意思也很簡潔明瞭,在設定檔中加了 resources 代表要設定資源了,所以底下的內容就是設定某個資源的配額了,這樣整體就會是一個 Resource Quota 了,是不是非常好理解呢~

這邊可以看到資源配額分了兩個區塊: requests 以及 limits

  • requests

    request 代表的是最小需求量,代表此 container 在初始化時,最少該存取該資源的量。

  • limits

    limit 代表的是最多使用量,代表此 container 在開始接受 Request 時最多只能使用該資源的量。


講完 request 以及 limit 的功能後,接下來講一下內部的相關設定,首先在 cpu 的部分可以看到筆者設定了 200m 這個值,m 這個單位代表的是 millicore,1000 millicore 等於 1 core ,所以 200m 就代表 0.2 core 的意思,而這個單位也是在 K8s 上才有的。

memory 的部分其單位就跟一般在計算 memory 時所使用的單位一樣,所以 500Mi 代表的是 500 Mebibyte,這邊可能會有讀者覺得奇怪,通常在講記憶體的時候都說 Megabyte,但 Megabyte 主要是 10 的 6 次方也就是 1,000,000 ,而 Mebibyte 則是 2 的 20 次方也就是 1,048,576,雖然兩者數值乍看之下好像沒差多少,但在機器上其實都是用 Mebibyte 當作單位喔!

建立含有 Resource Quotas 的 Deployment

一樣我們先用 apply 這個參數把 Deployment 建立起來。

建立完後可以用 describe 這個參數查看 Pod 資訊。

可以發現 Pod 內的 container 已經有資源配額的限制了 ,之後此 container就不會存取超過其設定的資源數值了。

小結

今天介紹完如何限制 Pod 對於機器資源的存取量後,終於要準備進入複製 Pod 最後一個階段了,在之前我們都是利用初始化的方式來決定 Pod 數量,都沒有讓 K8s 自行擴充。

所以下一篇文章就要來介紹如何讓 K8s 自行產生相同內容的 Pod,如果對於文章有任何問題都歡迎留言給我,那我們就下一篇文章見嘍~
Day16-Kubernetes 那些事 - Resource Quotas


上一篇
Day15-Kubernetes 那些事 - Deployment 與 ReplicaSet(三)
下一篇
Day17-Kubernetes 那些事 - Auto Scaling
系列文
前端工程師學習 DevOps 之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言