Pod:Kubernetes中的最小調度對象

      網友投稿 696 2025-04-02

      Pod是Kubernetes創建或部署的最小單位。一個Pod封裝一個或多個容器(container)、存儲資源(volume)、一個獨立的網絡IP以及管理控制容器運行方式的策略選項。

      Pod使用主要分為兩種方式:

      Pod中運行一個容器。這是Kubernetes最常見的用法,您可以將Pod視為單個封裝的容器,但是Kubernetes是直接管理Pod而不是容器。

      Pod中運行多個需要耦合在一起工作、需要共享資源的容器。通常這種場景下應用包含一個主容器和幾個輔助容器(SideCar Container),如圖1所示,例如主容器為一個web服務器,從一個固定目錄下對外提供文件服務,而輔助容器周期性的從外部下載文件存到這個固定目錄下。

      圖1?Pod

      實際使用中很少直接創建Pod,而是使用Kubernetes中稱為Controller的抽象層來管理Pod實例,例如Deployment和Job。Controller可以創建和管理多個Pod,提供副本管理、滾動升級和自愈能力。通常,Controller會使用Pod Template來創建相應的Pod。

      kubernetes中資源可以使用YAML描述(如果您對YAML格式不了解,可以參考YAML語法),也可以使用JSON,如下示例描述了一個名為nginx的Pod,這個Pod中包含一個名為container-0的容器,使用nginx:alpine鏡像,使用的資源為0.1核CPU、200M內存。

      apiVersion:?v1??????????????????????#?Kubernetes的API?Version kind:?Pod???????????????????????????#?Kubernetes的資源類型 metadata: ??name:?nginx???????????????????????#?Pod的名稱spec:???????????????????????????????#?Pod的具體規格(specification) ??containers: ??-?image:?nginx:alpine?????????????#?使用的鏡像為?nginx:alpine ????name:?container-0???????????????#?容器的名稱????resources:??????????????????????#?申請容器所需的資源??????limits:????????cpu:?100m????????memory:?200Mi??????requests:????????cpu:?100m????????memory:?200Mi ??imagePullSecrets:?????????????????#?拉取鏡像使用的證書,在CCE上必須為default-secret??-?name:?default-secret

      如上面YAML的注釋,YAML描述文件主要為如下部分:

      metadata:一些名稱/標簽/namespace等信息。

      spec:Pod實際的配置信息,包括使用什么鏡像,volume等。

      如果去查詢Kubernetes的資源,您會看到還有一個status字段,status描述kubernetes資源的實際狀態,創建時不需要配置。這個示例是一個最小集,其他參數定義后面會逐步介紹。

      Pod:Kubernetes中的最小調度對象

      Pod定義好后就可以使用kubectl創建,如果上面YAML文件名稱為nginx.yaml,則創建命令如下所示,-f 表示使用文件方式創建。

      $?kubectl?create?-f?nginx.yaml pod/nginx?created

      Pod創建完成后,可以使用kubectl get pods命令查詢Pod的狀態,如下所示。

      $?kubectl?get?pods NAME???????????READY???STATUS????RESTARTS???AGE nginx??????????1/1?????Running???0??????????40s

      可以看到此處nginx這個Pod的狀態為Running,表示正在運行;READY為1/1,表示這個Pod中有1個容器,其中1個容器的狀態為Ready。

      可以使用kubectl get命令查詢具體Pod的配置信息,如下所示,-o yaml表示以YAML格式返回,還可以使用-o json,以JSON格式返回。

      $?kubectl?get?pod?nginx?-o?yaml

      您還可以使用kubectl describe命令查看Pod的詳情。

      $?kubectl?describe?pod?nginx

      刪除pod時,Kubernetes終止Pod中所有容器。 Kubernetes向進程發送SIGTERM信號并等待一定的秒數(默認為30)讓容器正常關閉。如果它沒有在這個時間內關閉,Kubernetes會發送一個SIGKILL信號殺死該進程。

      Pod的停止與刪除有多種方法,比如按名稱刪除,如下所示。

      $?kubectl?delete?po?nginx pod?"nginx"?deleted

      同時刪除多個Pod。

      $?kubectl?delete?po?pod1?pod2

      刪除所有Pod。

      $?kubectl?delete?po?--all pod?"nginx"?deleted

      根據Label刪除Pod,Label詳細內容將會在下一個章節介紹。

      $?kubectl?delete?po?-l?app=nginx pod?"nginx"?deleted

      環境變量是容器運行環境中設定的一個變量。

      環境變量為應用提供極大的靈活性,您可以在應用程序中使用環境變量,在創建容器時為環境變量賦值,容器運行時讀取環境變量的值,從而做到靈活的配置,而不是每次都重新編寫應用程序制作鏡像。

      環境變量的使用方法如下所示,配置spec.containers.env字段即可。

      apiVersion:?v1 kind:?Pod metadata: ??name:?nginx spec: ????containers: ????-?image:?nginx:alpine ??????name:?container-0 ??????resources: ????????limits: ??????????cpu:?100m ??????????memory:?200Mi ????????requests: ??????????cpu:?100m ??????????memory:?200Mi??????env:????????????????????????????#?環境變量??????-?name:?env_key????????value:?env_value ????imagePullSecrets: ????-?name:?default-secret

      執行如下命令查看容器中的環境變量,可以看到env_key這個環境變量,其值為env_value。

      $?kubectl?exec?-it?nginx?--?env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin HOSTNAME=nginx TERM=xtermenv_key=env_value

      環境變量還可以引用ConfigMap和Secret,具體使用方法請參見在環境變量中引用ConfigMap和在環境變量中引用Secret。

      啟動容器就是啟動主進程,但有些時候,啟動主進程前,需要一些準備工作。比如MySQL類的數據庫,可能需要一些數據庫配置、初始化的工作,這些工作要在最終的MySQL服務器運行之前做完。這些操作,可以在制作鏡像時通過在Dockerfile文件中設置ENTRYPOINT或CMD來完成,如下所示的Dockerfile中設置了ENTRYPOINT ["top", "-b"]命令,其將會在容器啟動時執行。

      FROM?ubuntu ENTRYPOINT?["top",?"-b"]

      實際使用時,只需配置Pod的containers.command參數,該參數是list類型,第一個參數為執行命令,后面均為命令的參數。

      apiVersion:?v1 kind:?Pod metadata: ??name:?nginx spec: ??containers: ??-?image:?nginx:alpine ????name:?container-0 ????resources: ??????limits: ????????cpu:?100m ????????memory:?200Mi ??????requests: ????????cpu:?100m ????????memory:?200Mi????command:?????????????????????#?啟動命令????-?top????-?"-b" ??imagePullSecrets: ???-?name:?default-secret

      Kubernetes提供了容器生命周期鉤子,在容器的生命周期的特定階段執行調用,比如容器在停止前希望執行某項操作,就可以注冊相應的鉤子函數。目前提供的生命周期鉤子函數如下所示。

      啟動后處理(PostStart):容器啟動后觸發。

      停止前處理(PreStop):容器停止前觸發。

      實際使用時,只需配置Pod的lifecycle.postStart或lifecycle.preStop參數,如下所示。

      apiVersion:?v1 kind:?Pod metadata: ??name:?nginx spec: ??containers: ??-?image:?nginx:alpine ????name:?container-0 ????resources: ??????limits: ????????cpu:?100m ????????memory:?200Mi ??????requests: ????????cpu:?100m ????????memory:?200Mi????lifecycle:??????postStart:?????????????????#?啟動后處理????????exec:??????????command:??????????-?"/postStart.sh"??????preStop:???????????????????#?停止前處理????????exec:??????????command:??????????-?"/preStop.sh" ??imagePullSecrets: ???-?name:?default-secret

      了解更多Kubernetes集群相關知識和使用方法請猛擊這里。

      鏡像服務 Kubernetes

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:K8S集群中Pod資源常見的異常狀態以及排查思路
      下一篇:word文檔怎么加下劃線(word文檔如何加下劃線)
      相關文章
      国产亚洲综合久久系列| 春暖花开亚洲性无区一区二区| 亚洲国产成人精品激情| 亚洲av综合日韩| 亚洲色在线无码国产精品不卡| 亚洲一级免费毛片| 亚洲国产精品人久久电影| 亚洲午夜未满十八勿入| 久久亚洲成a人片| 国产精品亚洲A∨天堂不卡| 久久久青草青青国产亚洲免观 | 亚洲男人av香蕉爽爽爽爽| 小说专区亚洲春色校园| 亚洲熟妇久久精品| 亚洲熟妇无码av另类vr影视| 亚洲日韩一区二区三区| 久久精品国产亚洲av瑜伽| 国产成人亚洲精品电影| 亚洲国产精品成人| 亚洲综合久久夜AV | 久久久久亚洲AV成人网| 亚洲小说区图片区另类春色| 亚洲AV无码一区二区三区DV| 亚洲AV日韩AV永久无码下载| 亚洲国产成人高清在线观看| 亚洲国产女人aaa毛片在线| 亚洲色图校园春色| 亚洲精品免费网站| 亚洲av成人片在线观看| 亚洲人成色7777在线观看不卡 | 亚洲色精品88色婷婷七月丁香| 国产亚洲一区二区在线观看 | 老司机亚洲精品影院无码| 亚洲成a人片在线观看中文app| 亚洲不卡在线观看| 亚洲AV无码一区二区三区牲色| 亚洲av成本人无码网站| 亚洲午夜爱爱香蕉片| 亚洲AV无码乱码在线观看富二代| 亚洲视频小说图片| 亚洲性色精品一区二区在线|