日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)kubernetes教程:Kubernetes 為容器和Pod分配內(nèi)存資源

為容器和 Pod 分配內(nèi)存資源

此頁面展示如何將內(nèi)存 請(qǐng)求 (request)和內(nèi)存 限制 (limit)分配給一個(gè)容器。 我們保障容器擁有它請(qǐng)求數(shù)量的內(nèi)存,但不允許使用超過限制數(shù)量的內(nèi)存。

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站制作、棗莊網(wǎng)絡(luò)推廣、小程序制作、棗莊網(wǎng)絡(luò)營銷、棗莊企業(yè)策劃、棗莊品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供棗莊建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com

在開始之前

你必須擁有一個(gè) Kubernetes 的集群,同時(shí)你的 Kubernetes 集群必須帶有 kubectl 命令行工具。 建議在至少有兩個(gè)節(jié)點(diǎn)的集群上運(yùn)行本教程,且這些節(jié)點(diǎn)不作為控制平面主機(jī)。 如果你還沒有集群,你可以通過 Minikube 構(gòu)建一個(gè)你自己的集群,或者你可以使用下面任意一個(gè) Kubernetes 工具構(gòu)建:

  • Katacoda
  • 玩轉(zhuǎn) Kubernetes

要檢查版本,請(qǐng)輸入 ?kubectl version?。

你集群中的每個(gè)節(jié)點(diǎn)必須擁有至少 300 MiB 的內(nèi)存。

該頁面上的一些步驟要求你在集群中運(yùn)行 metrics-server 服務(wù)。 如果你已經(jīng)有在運(yùn)行中的 metrics-server,則可以跳過這些步驟。

如果你運(yùn)行的是 Minikube,可以運(yùn)行下面的命令啟用 metrics-server:

minikube addons enable metrics-server

要查看 metrics-server 或資源指標(biāo) API (?metrics.K8S.io?) 是否已經(jīng)運(yùn)行,請(qǐng)運(yùn)行以下命令:

kubectl get apiservices

如果資源指標(biāo) API 可用,則輸出結(jié)果將包含對(duì) ?metrics.k8s.io? 的引用信息。

NAME
v1beta1.metrics.k8s.io

創(chuàng)建命名空間

創(chuàng)建一個(gè)命名空間,以便將本練習(xí)中創(chuàng)建的資源與集群的其余部分隔離。

指定內(nèi)存請(qǐng)求和限制 

要為容器指定內(nèi)存請(qǐng)求,請(qǐng)?jiān)谌萜髻Y源清單中包含 ?resources:requests? 字段。 同理,要指定內(nèi)存限制,請(qǐng)包含 ?resources:limits?。

在本練習(xí)中,你將創(chuàng)建一個(gè)擁有一個(gè)容器的 Pod。 容器將會(huì)請(qǐng)求 100 MiB 內(nèi)存,并且內(nèi)存會(huì)被限制在 200 MiB 以內(nèi)。 這是 Pod 的配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-ctr
    image: polinux/stress
    resources:
      requests:
        memory: "100Mi"
      limits:
        memory: "200Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

配置文件的 ?args ?部分提供了容器啟動(dòng)時(shí)的參數(shù)。 ?"--vm-bytes", "150M"? 參數(shù)告知容器嘗試分配 150 MiB 內(nèi)存。

開始創(chuàng)建 Pod:

kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit.yaml --namespace=mem-example

驗(yàn)證 Pod 中的容器是否已運(yùn)行:

kubectl get pod memory-demo --namespace=mem-example

查看 Pod 相關(guān)的詳細(xì)信息:

kubectl get pod memory-demo --output=yaml --namespace=mem-example

輸出結(jié)果顯示:該 Pod 中容器的內(nèi)存請(qǐng)求為 100 MiB,內(nèi)存限制為 200 MiB。

...
resources:
  requests:
    memory: 100Mi
  limits:
    memory: 200Mi
...

運(yùn)行 ?kubectl top? 命令,獲取該 Pod 的指標(biāo)數(shù)據(jù):

kubectl top pod memory-demo --namespace=mem-example

輸出結(jié)果顯示:Pod 正在使用的內(nèi)存大約為 162,900,000 字節(jié),約為 150 MiB。 這大于 Pod 請(qǐng)求的 100 MiB,但在 Pod 限制的 200 MiB之內(nèi)。

NAME                        CPU(cores)   MEMORY(bytes)
memory-demo                   162856960

刪除 Pod:

kubectl delete pod memory-demo --namespace=mem-example

超過容器限制的內(nèi)存 

當(dāng)節(jié)點(diǎn)擁有足夠的可用內(nèi)存時(shí),容器可以使用其請(qǐng)求的內(nèi)存。 但是,容器不允許使用超過其限制的內(nèi)存。 如果容器分配的內(nèi)存超過其限制,該容器會(huì)成為被終止的候選容器。 如果容器繼續(xù)消耗超出其限制的內(nèi)存,則終止容器。 如果終止的容器可以被重啟,則 kubelet 會(huì)重新啟動(dòng)它,就像其他任何類型的運(yùn)行時(shí)失敗一樣。

在本練習(xí)中,你將創(chuàng)建一個(gè) Pod,嘗試分配超出其限制的內(nèi)存。 這是一個(gè) Pod 的配置文件,其擁有一個(gè)容器,該容器的內(nèi)存請(qǐng)求為 50 MiB,內(nèi)存限制為 100 MiB:

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-2
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-2-ctr
    image: polinux/stress
    resources:
      requests:
        memory: "50Mi"
      limits:
        memory: "100Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "250M", "--vm-hang", "1"]

在配置文件的 ?args ?部分中,你可以看到容器會(huì)嘗試分配 250 MiB 內(nèi)存,這遠(yuǎn)高于 100 MiB 的限制。

創(chuàng)建 Pod:

kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-2.yaml --namespace=mem-example

查看 Pod 相關(guān)的詳細(xì)信息:

kubectl get pod memory-demo-2 --namespace=mem-example

此時(shí),容器可能正在運(yùn)行或被殺死。重復(fù)前面的命令,直到容器被殺掉:

NAME            READY     STATUS      RESTARTS   AGE
memory-demo-2   0/1       OOMKilled   1          24s

獲取容器更詳細(xì)的狀態(tài)信息:

kubectl get pod memory-demo-2 --output=yaml --namespace=mem-example

輸出結(jié)果顯示:由于內(nèi)存溢出(OOM),容器已被殺掉:

lastState:
   terminated:
     containerID: 65183c1877aaec2e8427bc95609cc52677a454b56fcb24340dbd22917c23b10f
     exitCode: 137
     finishedAt: 2017-06-20T20:52:19Z
     reason: OOMKilled
     startedAt: null

本練習(xí)中的容器可以被重啟,所以 kubelet 會(huì)重啟它。 多次運(yùn)行下面的命令,可以看到容器在反復(fù)的被殺死和重啟:

kubectl get pod memory-demo-2 --namespace=mem-example

輸出結(jié)果顯示:容器被殺掉、重啟、再殺掉、再重啟……:

kubectl get pod memory-demo-2 --namespace=mem-example
NAME            READY     STATUS      RESTARTS   AGE
memory-demo-2   0/1       OOMKilled   1          37s
kubectl get pod memory-demo-2 --namespace=mem-example
NAME            READY     STATUS    RESTARTS   AGE
memory-demo-2   1/1       Running   2          40s

查看關(guān)于該 Pod 歷史的詳細(xì)信息:

kubectl describe pod memory-demo-2 --namespace=mem-example

輸出結(jié)果顯示:該容器反復(fù)的在啟動(dòng)和失?。?/p>

... Normal  Created   Created container with id 66a3a20aa7980e61be4922780bf9d24d1a1d8b7395c09861225b0eba1b1f8511
... Warning BackOff   Back-off restarting failed container

查看關(guān)于集群節(jié)點(diǎn)的詳細(xì)信息:

kubectl describe nodes

輸出結(jié)果包含了一條練習(xí)中的容器由于內(nèi)存溢出而被殺掉的記錄:

Warning OOMKilling Memory cgroup out of memory: Kill process 4481 (stress) score 1994 or sacrifice child

刪除 Pod:

kubectl delete pod memory-demo-2 --namespace=mem-example

超過整個(gè)節(jié)點(diǎn)容量的內(nèi)存

內(nèi)存請(qǐng)求和限制是與容器關(guān)聯(lián)的,但將 Pod 視為具有內(nèi)存請(qǐng)求和限制,也是很有用的。 Pod 的內(nèi)存請(qǐng)求是 Pod 中所有容器的內(nèi)存請(qǐng)求之和。 同理,Pod 的內(nèi)存限制是 Pod 中所有容器的內(nèi)存限制之和。

Pod 的調(diào)度基于請(qǐng)求。只有當(dāng)節(jié)點(diǎn)擁有足夠滿足 Pod 內(nèi)存請(qǐng)求的內(nèi)存時(shí),才會(huì)將 Pod 調(diào)度至節(jié)點(diǎn)上運(yùn)行。

在本練習(xí)中,你將創(chuàng)建一個(gè) Pod,其內(nèi)存請(qǐng)求超過了你集群中的任意一個(gè)節(jié)點(diǎn)所擁有的內(nèi)存。 這是該 Pod 的配置文件,其擁有一個(gè)請(qǐng)求 1000 GiB 內(nèi)存的容器,這應(yīng)該超過了你集群中任何節(jié)點(diǎn)的容量。

apiVersion: v1
kind: Pod
metadata:
  name: memory-demo-3
  namespace: mem-example
spec:
  containers:
  - name: memory-demo-3-ctr
    image: polinux/stress
    resources:
      requests:
        memory: "1000Gi"
      limits:
        memory: "1000Gi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "150M", "--vm-hang", "1"]

創(chuàng)建 Pod:

kubectl apply -f https://k8s.io/examples/pods/resource/memory-request-limit-3.yaml --namespace=mem-example

查看 Pod 狀態(tài):

kubectl get pod memory-demo-3 --namespace=mem-example

輸出結(jié)果顯示:Pod 處于 PENDING 狀態(tài)。 這意味著,該 Pod 沒有被調(diào)度至任何節(jié)點(diǎn)上運(yùn)行,并且它會(huì)無限期的保持該狀態(tài):

kubectl get pod memory-demo-3 --namespace=mem-example
NAME            READY     STATUS    RESTARTS   AGE
memory-demo-3   0/1       Pending   0          25s

查看關(guān)于 Pod 的詳細(xì)信息,包括事件:

kubectl describe pod memory-demo-3 --namespace=mem-example

輸出結(jié)果顯示:由于節(jié)點(diǎn)內(nèi)存不足,該容器無法被調(diào)度:

Events:
  ...  Reason            Message
       ------            -------
  ...  FailedScheduling  No nodes are available that match all of the following predicates:: Insufficient memory (3).

內(nèi)存單位

內(nèi)存資源的基本單位是字節(jié)(byte)。你可以使用這些后綴之一,將內(nèi)存表示為 純整數(shù)或定點(diǎn)整數(shù):E、P、T、G、M、K、Ei、Pi、Ti、Gi、Mi、Ki。 例如,下面是一些近似相同的值:

128974848, 129e6, 129M, 123Mi

刪除 Pod:

kubectl delete pod memory-demo-3 --namespace=mem-example

如果你沒有指定內(nèi)存限制 

如果你沒有為一個(gè)容器指定內(nèi)存限制,則自動(dòng)遵循以下情況之一:

  • 容器可無限制地使用內(nèi)存。容器可以使用其所在節(jié)點(diǎn)所有的可用內(nèi)存, 進(jìn)而可能導(dǎo)致該節(jié)點(diǎn)調(diào)用 OOM Killer。 此外,如果發(fā)生 OOM Kill,沒有資源限制的容器將被殺掉的可行性更大。
  • 運(yùn)行的容器所在命名空間有默認(rèn)的內(nèi)存限制,那么該容器會(huì)被自動(dòng)分配默認(rèn)限制。 集群管理員可用使用 LimitRange 來指定默認(rèn)的內(nèi)存限制。

內(nèi)存請(qǐng)求和限制的目的 

通過為集群中運(yùn)行的容器配置內(nèi)存請(qǐng)求和限制,你可以有效利用集群節(jié)點(diǎn)上可用的內(nèi)存資源。 通過將 Pod 的內(nèi)存請(qǐng)求保持在較低水平,你可以更好地安排 Pod 調(diào)度。 通過讓內(nèi)存限制大于內(nèi)存請(qǐng)求,你可以完成兩件事:

  • Pod 可以進(jìn)行一些突發(fā)活動(dòng),從而更好的利用可用內(nèi)存。
  • Pod 在突發(fā)活動(dòng)期間,可使用的內(nèi)存被限制為合理的數(shù)量。

清理 

刪除命名空間。下面的命令會(huì)刪除你根據(jù)這個(gè)任務(wù)創(chuàng)建的所有 Pod:

kubectl delete namespace mem-example

當(dāng)前名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes 為容器和Pod分配內(nèi)存資源
瀏覽地址:http://www.5511xx.com/article/dpgicje.html