如何在Kubernetes集群上部署第一個(gè)pod?
譯文【51CTO.com快譯】Pod是Kubernetes應(yīng)用程序的基本執(zhí)行單元。它是一起部署在同一個(gè)主機(jī)上的容器組成的集合。Kubernetes集群中的Pod可以通過兩種方式來(lái)使用:
- 運(yùn)行單個(gè)容器的Pod:這是使用Pod的最流行方式。Kubernetes管理Pod,而不是直接管理容器。
- 運(yùn)行多個(gè)需要協(xié)同工作的容器的Pod:在這種模式中,一個(gè)Pod可能有多個(gè)緊密耦合的容器以共享資源。
如上所述,一個(gè)Pod可能有多個(gè)容器,因此始終建議盡可能使用單個(gè)容器。在單個(gè)Pod中組合多個(gè)容器是一種相對(duì)高級(jí)的用例。您應(yīng)該僅在容器緊密耦合的特定情況下使用該模式。
如果我們部署單個(gè)容器,一般可以將“pod”一詞換成“container”。Pod實(shí)現(xiàn)了諸成員之間的數(shù)據(jù)共享和聯(lián)系。
Pod 始終在節(jié)點(diǎn)上運(yùn)行。節(jié)點(diǎn)是Kubernetes中的worker機(jī)器,可能是虛擬機(jī)或物理機(jī),具體取決于集群。每個(gè)節(jié)點(diǎn)由主節(jié)點(diǎn)(Master)管理。一個(gè)節(jié)點(diǎn)可能有多個(gè)Pod,Kubernetes主節(jié)點(diǎn)跨集群中的節(jié)點(diǎn)自動(dòng)處理Pod調(diào)度。
Pod生命周期的5個(gè)階段
- 等待中:Pod已被Kubernetes系統(tǒng)接受,但一個(gè)或多個(gè)容器映像尚未創(chuàng)建。這包括調(diào)度之前的時(shí)間以及通過網(wǎng)絡(luò)下載映像所花費(fèi)的時(shí)間,這可能需要一段時(shí)間。
- 運(yùn)行中:Pod已綁定到一個(gè)節(jié)點(diǎn)上,所有容器已創(chuàng)建好。至少有一個(gè)容器仍在運(yùn)行中,或正在啟動(dòng)或重新啟動(dòng)。
- 成功:Pod內(nèi)所有容器已成功終止,不會(huì)重啟。
- 失敗:Pod中的所有容器已終止,至少一個(gè)容器終止失敗。也就是說,容器要么以非零狀態(tài)退出,要么被系統(tǒng)終止。
- 未知:由于某種原因,無(wú)法獲取Pod的狀態(tài),通常是由于與Pod主機(jī)聯(lián)系出錯(cuò)。
前提條件
- AWS帳戶(如果還沒有帳戶,請(qǐng)創(chuàng)建)
- Kubernetes集群(如果您想學(xué)習(xí)創(chuàng)建Kubernetes集群,請(qǐng)搜索“使用kubeadm在AWS EC2實(shí)例Ubuntu 18.04 LTS上創(chuàng)建Kubernetes集群”)。
注意:如果您不想嘗試AWS EC2實(shí)例,也可以使用虛擬機(jī)來(lái)創(chuàng)建集群。
我們要做什么?
- 為NginX創(chuàng)建一個(gè)Kubernetes Pod,并刪除它。
為Nginx創(chuàng)建Kubernetes Pod
為創(chuàng)建我們的第一個(gè)Pod,不妨創(chuàng)建一個(gè)新目錄來(lái)創(chuàng)建我們的Object/Pod文件。使用以下命令在系統(tǒng)中創(chuàng)建一個(gè)新目錄:
- mkdir my-first-pod
- cd my-first-pod/
在進(jìn)行下一步之前,請(qǐng)驗(yàn)證集群的狀態(tài)。
要檢查集群中可用的節(jié)點(diǎn)并檢查“kubectl”的版本,請(qǐng)使用以下命令。
- sudo kubectl get nodes
- sudo kubectl version
使用以下命令列出默認(rèn)命名空間中的pod。由于這是我們?cè)诩褐械牡谝粋€(gè)pod,您不會(huì)看到默認(rèn)命名空間中的任何pod。
- sudo kubectl get pods
一旦集群中有了可用的節(jié)點(diǎn),您可以準(zhǔn)備創(chuàng)建第一個(gè)pod了。
創(chuàng)建文件“my-first-pod.yml”,附有以下代碼段:
- vim my-first-pod.yml
- ---
- apiVersion: v1
- kind: Pod
- metadata:
- name: myfirstpod
- labels:
- app: web
- spec:
- containers:
- - name: myfirstcontainer
- image: nginx
- ports:
- - containerPort: 80
其中
- apiVersion:APIVersion定義了對(duì)象的這個(gè)表示的版本模式。
- kind:您想創(chuàng)建的對(duì)象的類別。這里它是pod,因?yàn)槲覀冊(cè)趧?chuàng)建的是pod。
- name:名稱在命名空間中是獨(dú)特的。
- labels:可用于組織和分類對(duì)象的字符串鍵和值的映射。
- spec:pod的預(yù)期行為的規(guī)范。
現(xiàn)在您可以準(zhǔn)備使用以下命令創(chuàng)建pod了。
- sudo kubectl apply -f my-first-pod.yml
您可以使用以下命令獲取pod的細(xì)節(jié)。
- sudo kubectl get pods
為證實(shí)Pod是否果真在運(yùn)行中,運(yùn)行以下命令。這在我們的pod里面運(yùn)行命令(注意:這類似運(yùn)行docker exec。)
- sudo kubectl exec myfirstpod — service nginx status
如果您不再需要pod,可使用“kubectl delete command”刪除它。
- sudo kubectl delete pods myfirstpod
最后要證實(shí)pod是否已被刪除,使用以下命令:
- sudo kubectl get pods
結(jié)語(yǔ)
我們?cè)诒疚闹辛私饬藀od的基本知識(shí)及其生命周期的幾個(gè)階段。我們看到了在Kubernetes上創(chuàng)建第一個(gè)Nginx Pod的幾個(gè)步驟,還看到了如何可以提取有關(guān)Pod的細(xì)節(jié)。此外,我們還介紹了刪除Pod的命令。
原文標(biāo)題:How to deploy your first pod on a Kubernetes Cluster
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】