為了解決這樣多應(yīng)用聯(lián)合運行的問題,同時還要不破壞容器的隔離,就需要在容器外面再建立一個“收納艙”,讓多個容器既保持相對獨立,又能夠小范圍共享網(wǎng)絡(luò)、存儲等資源,而且永遠是“綁在一起”的狀態(tài)。
Pod 的概念也就呼之欲出了,容器正是“豆莢”里那些小小的“豌豆”,你可以在 Pod 的 YAML 里看到,“spec.containers”字段其實是一個數(shù)組,里面允許定義多個容器。
因為 Pod 是對容器的“打包”,里面的容器是一個整體,總是能夠一起調(diào)度、一起運行,絕不會出現(xiàn)分離的情況,而且 Pod 屬于 Kubernetes,可以在不觸碰下層容器的情況下任意定制修改。所以有了 Pod 這個抽象概念,Kubernetes 在集群級別上管理應(yīng)用就會“得心應(yīng)手”了。
Kubernetes 讓 Pod 去編排處理容器,然后把 Pod 作為應(yīng)用調(diào)度部署的最小單位,Pod 也因此成為了 Kubernetes 世界里的“原子”(當(dāng)然這個“原子”內(nèi)部是有結(jié)構(gòu)的,不是鐵板一塊),基于 Pod 就可以構(gòu)建出更多更復(fù)雜的業(yè)務(wù)形態(tài)了。
?所有的 Kubernetes 資源都直接或者間接地依附在 Pod 之上,所有的 Kubernetes 功能都必須通過 Pod 來實現(xiàn),所以 Pod 理所當(dāng)然地成為了 Kubernetes 的核心對象。
我們在使用 Docker 創(chuàng)建容器的時候,可以不給容器起名字,但在 Kubernetes 里,Pod 必須要有一個名字,這也是 Kubernetes 里所有資源對象的一個約定。
“containers”是一個數(shù)組,里面的每一個元素又是一個 container 對象,也就是容器。
和 Pod 一樣,container 對象也必須要有一個 name 表示名字,然后當(dāng)然還要有一個 image 字段來說明它使用的鏡像,這兩個字段是必須要有的,否則 Kubernetes 會報告數(shù)據(jù)驗證錯誤。
- ports:列出容器對外暴露的端口,和 Docker 的 -p 參數(shù)有點像。
- imagePullPolicy:指定鏡像的拉取策略,可以是 Always/Never/IfNotPresent,一般默認是 IfNotPresent,也就是說只有本地不存在才會遠程拉取鏡像,可以減少網(wǎng)絡(luò)消耗。
- env:定義 Pod 的環(huán)境變量,和 Dockerfile 里的 ENV 指令有點類似,但它是運行時指定的,更加靈活可配置。
- command:定義容器啟動時要執(zhí)行的命令,相當(dāng)于 Dockerfile 里的 ENTRYPOINT 指令。
- args:它是 command 運行時的參數(shù),相當(dāng)于 Dockerfile 里的 CMD 指令,這兩個命令和 Docker 的含義不同,要特別注意。
不過 kubectl exec 的命令格式與 Docker 有一點小差異,需要在 Pod 后面加上 --,把 kubectl 的命令與 Shell 命令分隔開,你在用的時候需要小心一些:
kubectl exec -it ngx-pod -- sh
Pod 屏蔽了容器的一些底層細節(jié),同時又具有足夠的控制管理能力,比起容器的“細粒度”、虛擬機的“粗粒度”,Pod 可以說是“中粒度”,靈活又輕便,非常適合在云計算領(lǐng)域作為應(yīng)用調(diào)度的基本單元,因而成為了 Kubernetes 世界里構(gòu)建一切業(yè)務(wù)的“原子”。文章來源:http://www.zghlxwxcb.cn/news/detail-578826.html
此文章為7月Day12學(xué)習(xí)筆記,內(nèi)容來源于極客時間《Kubernetes入門實戰(zhàn)課》,推薦該課程。文章來源地址http://www.zghlxwxcb.cn/news/detail-578826.html
到了這里,關(guān)于Pod:Kubernetes里最核心的概念的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!