【智簡聯接,萬物互聯】華為云·云享專家董昕:Serverless和微服務下, IoT的變革蓄勢待發
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定義好后就可以使用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小時內刪除侵權內容。