不知道大家有沒有注意到我們在第14天時有教大家如何安裝自己的K8s時,我們有特別安裝了三個套件,分別是:Kubectl、Kubeadm、Kubelet。
那問題來了,我們要裝的不是 Kubernetes 嗎?為什麼要裝這三個東西?
其實我們從這三個套件的名字來看的話,就會發現它們跟 Kubernetes 的名字很像,如果我們更深入研究的話,會發現他們三個其實都各司其職,為 K8s 付出一定的心力,而今天我就來跟你們介紹他們三劍客中的一員 -- Kubelet。
簡單地來說,kubelet的主要功能就是定時從某個地方獲取節點上 Pod 的期望狀態(運行什麼容器、運行的副本數量、網絡或者存儲如何配置等等),並調用對應的容器平台接口達到這個狀態。
在 cluster 的狀態下,kubelet 會從 master 上讀取信息,但其實kubelet 還可以藉由不同的方式獲取節點的 Pod 信息。目前kubelet 支持三種數據源:
kubelet目前支援的平台包括:Docker、Rkt,在預設的情況下是使用Docker。
或許有些讀者現在看完以上的介紹後還是一頭霧水,上面那段話再更白話一點就是 kubelet 是幫助 kubernetes 管理 Pod 的角色。
我們都知道 K8s 最基本的管理單位是 Pod,Pod 是 kubernetes 在容器上的一層封裝,由一組運行在同一主機的一個,或者多個容器組成。如果我們將 Docker 的 Container 比喻為是電腦上的一個進程的話,那 Pod 就像是一台完整的主機,裡面包含著多個 Container 並共享資源,例如:網路空間的共享。
除了創建 Pod ,他還會對其進行「健康檢查」,檢驗容器是否正常運行,檢查容器是否健康主要有兩種方式:在容器中執行命令和通過 HTTP 訪問預定義的endpoint。
若是選擇前者的話,我們可以藉由它所回傳的 exit code 來判斷容器是否正常運作;如果是後者的話,我們可以透過向某個 url 發送HTTP GET的請求,並根據回傳的 response code 來判斷。而如果發現容器運作不正常的話,kubelet 會刪除該容器,並根據容器的重啟策略進行處理,例如:重啟,或者什麼都不做。
總結來說, kubelet 很像是 Kubernetes 的 Pod 管家,會將 Pod的狀態、資訊都傳回 master ,並定時檢查容器的狀態,在容器運作不正常時,做相對應的處理,確保系統的運作正常。
不曉得今天藉由這種方式跟大家介紹 kubelet 你們是否都大概了解它的作用是什麼,如果大家有興趣想要更深一步的探討的話,可以參考一下 kubelet 的官方文件,這邊有關於操作 kubelet 的所有指令,其他的功用。
那明天我會繼續介紹剩下的成員,就請各位敬請期待了,我們明天見!掰掰!