目標
- 了解什么是Pods
- 了解什么是Nodes
- 應用部署問題定位
Kubernetes Pods
當你在模塊 2中創(chuàng)建一個Deployment的時候奕锌,Kubernetes創(chuàng)建了一個Pod來放置你的應用實例循签。Pod是Kubernetes中的一個抽象概念我擂,一個Pod包含了一組應用容器(比如Docker或者rkt)和這些容器共用的資源屡贺。這些資源包括:
- 共享存儲,Volumes
- 網(wǎng)絡,一個集群內(nèi)唯一的IP地址
- 每個容器執(zhí)行的相關配置赊窥,比如容器的鏡像版本或者是需要使用的特定端口
Pod模擬出了一個應用運行所需要的"邏輯主機",并且還能包含一些緊密耦合的其他應用。舉個例子狸页,在你的Node.js應用中锨能,一個Pod可能包含了兩個容器,除了Nodes.js本身以外還有一個是用來給Node.js webserver提供數(shù)據(jù)來開放給外部訪問芍耘。在Pod中的容器共享同一個IP地址和端口區(qū)間址遇,它們總是放置在同一個地方,一起被調(diào)度斋竞,并且運行在基于同一個Node上的共享上下文之中倔约。
Pod在Kubenetes中是最小不可分割的單元。當我們在Kubenetes上創(chuàng)建一個Deployments的時候坝初,Deployment會創(chuàng)建Pod并且同時在Pod里面創(chuàng)建容器(不要直接創(chuàng)建容器)浸剩。每個Pod都會放在預定的Node上面,并且會一直存在于那里直到運行終止(這個要根據(jù)restart策略來看具體情況)或者被刪除鳄袍。萬一Node宕機了绢要,整個Pod會被調(diào)度到集群中另外一個可用的Node上去
Pods概覽
Nodes
一個Pod總是運行在一個Node上。在Kubernetes中一個Node是一個執(zhí)行具體工作的機器拗小,它可用是虛擬機也可用是物理機重罪,這個取決于所在的集群。每個Node都由Master統(tǒng)一管理哀九。每個Node上面可用有多個Pod剿配,Kubernetes Master會自動在Node之間處理調(diào)度相關的處理。Master的自動調(diào)度會記錄每個Node上的可用資源。
每個Kubernetes Node運行至少需要:
- Kubelet,一個負責和Master和Node通訊的進程筒饰;同時它會管理當前節(jié)點上的運行的Pods和容器晋柱。
- 一個容器運行時(Docker,rkt)負責從中心拉取容器鏡像琢融,解包容器界牡,運行應用。
假如幾個容器互相緊密耦合并且需要使用一些共享的資源(比如磁盤)漾抬,那它們應該要放到同一個Pod中當做一個整體進行調(diào)度
Node架構(gòu)
使用kubectl進行問題定位
在模塊2中宿亡,我們使用了kubectl命令行工具。在模塊3中纳令,我們會繼續(xù)使用它來獲取所部署應用的相關信息和它們所運行的環(huán)境信息挽荠。下面是kubectl的一些最常用的操作:
kubectl get - 列出所有的資源
kubectl describe - 列出某個資源的詳細信息
kubectl logs - 輸出pod中容器的日志
kubectl exec - 在pod中的某個容器里面執(zhí)行命令
你可以使用這些命令來觀察應用程序什么時候被部署了克胳,它現(xiàn)在處于什么狀態(tài),它運行在何處和它當前的配置是什么