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


<<:  [C 语言笔记--Day20] Condition Code 帮忙做出 C 语言的 if 语法 II

>>:  [Day16] 严格相等 vs 宽松相等

component

今天要介绍的是component 在一个网页中我们常会看到header、Footer、侧边拦等等,在...

当责:概念篇

当责 第一次看到「当责」(Accountability) 是无意间瞥见的,当时满是疑惑,觉得这个词文...

【Day 14】Google Apps Script - API 篇 - Document Service - 文件服务介绍

Docs(文件) Service API 可以让你完整的控制 Google Docs(文件)里的内...

[Day 24] Scoping — 计画通り

It's truly the beginning. Scoping is a big hurdle...

Day 1 (html)

1.版本 但是遇到旧的也不要更改,因为可能别人版本还没这麽新 <!DOCTYPE html&g...