1. 程式人生 > 實用技巧 >分享次世代遊戲角色赤鴉全流程案例教程 q 2397927057

分享次世代遊戲角色赤鴉全流程案例教程 q 2397927057

aboutcg 赤鴉完整版 諮詢Q 2397927057

=========================================================================

在我們使用kubernetes的過程中,我們知道Pod 是最小的原子排程單位。這也就意味著,所有跟排程和資源管理相關的屬性都應該是屬於 Pod 物件的欄位。而這其中最重要的部分,就是 Pod 的 CPU 和記憶體配置,如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
        resources:
          requests:
            memory: "64Mi" 
            cpu: "250m"
          limits:
            memory: "128Mi" 
            cpu: "500m"

在 Kubernetes 中,像 CPU 這樣的資源被稱作“可壓縮資源”(compressible resources)。它的典型特點是,當可壓縮資源不足時,Pod 只會“飢餓”,但不會退出。而像記憶體這樣的資源,則被稱作“不可壓縮資源(incompressible resources)。當不可壓縮資源不足時,Pod 就會因為 OOM(Out-Of-Memory)被核心殺掉。

而由於 Pod 可以由多個 Container 組成,所以 CPU 和記憶體資源的限額,是要配置在每個 Container 的定義上的。這樣,Pod 整體的資源配置,就由這些 Container 的配置值累加得到。

其中,Kubernetes 裡為 CPU 設定的單位是“CPU 的個數”。比如,cpu=1 指的就是,這個 Pod 的 CPU 限額是 1 個 CPU。當然,具體“1 個 CPU”在宿主機上如何解釋,是 1 個 CPU 核心,還是 1 個 vCPU,還是 1 個 CPU 的超執行緒(Hyperthread),完全取決於宿主機的 CPU 實現方式。Kubernetes 只負責保證 Pod 能夠使用到“1 個 CPU”的計算能力。

此外,Kubernetes 允許你將 CPU 限額設定為分數,比如在我們的例子裡,CPU limits 的值就是 500m。所謂 500m,指的就是 500 millicpu,也就是 0.5 個 CPU 的意思。這樣,這個 Pod 就會被分配到 1 個 CPU 一半的計算能力。

當然,你也可以直接把這個配置寫成 cpu=0.5。但在實際使用時,我還是推薦你使用 500m 的寫法,畢竟這才是 Kubernetes 內部通用的 CPU 表示方式。

而對於記憶體資源來說,它的單位自然就是 bytes。Kubernetes 支援你使用 Ei、Pi、Ti、Gi、Mi、Ki(或者 E、P、T、G、M、K)的方式來作為 bytes 的值。比如,在我們的例子裡,Memory requests 的值就是 64MiB (2 的 26 次方 bytes) 。這裡要注意區分 MiB(mebibyte)和 MB(megabyte)的區別。備註:1Mi=10241024;1M=10001000此外,不難看到,Kubernetes 裡 Pod 的 CPU 和記憶體資源,實際上還要分為 limits 和 requests 兩種情況,如下所示:

備註:1Mi=1024*1024;1M=1000*1000
spec.containers[].resources.limits.cpu
spec.containers[].resources.limits.memory
spec.containers[].resources.requests.cpu
spec.containers[].resources.requests.memory