Kubernetes 節點是實際工作發生的工作器或主機。每個 Kubernetes 節點都有執行 Pod 所需的服務,並由控制平面控制。每個 Kubernetes 節點可以有多個 Pod,Pod 內有容器執行。每個節點中有 3 個程序用於排程和管理這些 Pod。
- Container runtime:需要容器執行時來執行在 pod 內部 pod 上執行的應用程式容器。示例-> Docker。
- kubelet: kubelet 與容器執行時以及 Node 互動。它是負責啟動包含容器的 pod 的程序。
- kube-proxy:負責將請求從Kubernetes 服務轉發到pod 的程序。它具有智慧邏輯,可以將請求轉發到工作節點中的正確 pod。
Kubernetes
Kubernetes是一個開源容器管理工具,可自動執行容器部署、容器擴充套件、降級和容器負載平衡(也稱為容器編排工具)。它用 Golang 編寫,擁有龐大的社群,因為它最初由 Google 開發,後來捐贈給 CNCF(雲原生計算基金會)。Kubernetes 可以將“n”個容器分組為一個邏輯單元,以便輕鬆管理和部署它們。它可以與所有云供應商(即公共、混合和本地)完美配合。
什麼是 Kubernetes 節點?
Kubernetes Pod 如何工作?
Pod 是 Kubernetes 中存在的最小單元。它類似於 C 或 C++ 語言中的令牌。特定 Pod 可以有一個或多個應用程式。Pod 的性質是短暫的,這意味著在任何情況下,如果 Pod 發生故障,Kubernetes 都可以自動建立該 Pod 的新副本/重複並繼續操作。Pod 可以根據需求包含一個或多個容器。容器甚至可以是 Docker 容器。Kubernetes 中的 Pod 提供環境依賴項,包括持久儲存卷,這意味著它是永久性的,並且可用於所述叢集中的所有 Pod,甚至在 Pod 內執行容器所需的配置資料。
Kubernetes 節點如何工作?
節點的主要工作是為包含容器的 pod 提供便利。根據分配給它們的角色,節點分為兩種:工作節點和主節點。主節點負責工作節點,節點負責 pod。根據專案要求,工作節點沒有特定的限制,您可以擁有 n 個節點,並且建議至少擁有兩個主節點,以防一個主節點發生故障,另一個將負責管理工作節點。
Kubernetes 節點名稱唯一性
在 kubernetes 叢集中,兩個節點不應該有相同的名稱,當叢集中的物件被修改時,這將導致叢集不一致。Kubernetes 叢集假定具有相同名稱的節點將具有相同的標籤、相同的狀態和卷。如果例項被更新,那麼具有相同名稱的節點將很難找到您當前談論的節點。
對於具有相同節點名稱有一些假設,例如,如果您在每個節點中執行單個 pod,那麼多個 pod 具有相同的名稱就不會成為問題。
Kubernetes 節點未就緒
要檢視 kubernetes 叢集中可用的節點數,您可以使用以下命令。
kubectl get nodes
上述命令還將顯示以下內容
Kubenrets 節點狀態
- Ready:節點執行正常,排程程式可以在該節點中排程 Pod。
- NotReady:節點尚未準備好執行 Pod。發生這種情況的原因有很多,其中一些是網路問題、Pod 故障或 kubelet 錯誤。
- Unknow:如果節點未響應排程程式來排程 Pod。如果主節點無法與該節點通訊,則狀態將顯示為未知。
Kubernetes 節點的自注冊
叢集中已經可用的節點或將要新建的節點應該在 API 伺服器中註冊,這樣主伺服器將開始識別 kubernetes 叢集中可用的節點。
與其手動操作,不如自動化,這也是一種首選方式。預設情況下,kubernetes 叢集中將啟用此自注冊,kubelet 將負責自動註冊。
Kubernets 節點自注冊的不同選項
- 訪問 Kubeconfig 檔案: 我們可以向 kubelet 提供 kubeconfig 檔案的路徑,以便它可以透過 API 伺服器進行身份驗證。
- 設定標誌 True:“–register-nodes”預設值為 true,當設定為 true 時,kubelet 將聯絡 API 伺服器並將所有資訊傳送到新新增的節點,API 伺服器在 kubernetes 叢集中建立節點物件,kubernetes 排程程式將使用節點物件在節點上排程 pod。
還有其他一些選項,但以上是最常用的選項。
手動 Kubernetes 節點管理
kubernetes 中的手動節點管理是指手動註冊節點,而無需任何節點的自我註冊,可以使用某些命令來手動管理節點,如下所示。
- kubectl create node.
- kubectl delete node.
- kubectl create node.
- kubectl delete node.
在 kubernetes 叢集中建立物件之前,您應該在 yaml 檔案中提及節點名稱、標籤和汙點。要了解有關 kubectl 的更多命令,請參閱Kubernetes – Kubectl 命令。要控制特定節點上的 pod 排程,您可以使用汙點和容忍度或包含 pod 的標籤來排程特定節點上的 pod。
Kubernetes 節點狀態
要檢視節點的狀態和其他資訊,請使用 kubectl:
$ kubectl describe node <node-name>
一個健康的節點由下面的JSON結構描述:
"conditions": [ { "type": "Ready", "status": "True", "reason": "KubeletReady", "message": "kubelet is posting ready status", "lastHeartbeatTime": <last heartbeat time>, "lastTransitionTime": <last transition time> } ]
Kubernetes 節點控制器
為了監控叢集中的節點,Kubernetes 有一組服務可以根據後設資料監控資料。名稱。如果 –register-node 標誌為 true,Kubernetes 會自動註冊該節點。
–register-node = true
要手動實現,您需要設定
–register-node = false
資源容量跟蹤
當將節點自注冊到 Kubernetes API 時,節點物件將跟蹤有關節點資源容量的資訊。節點報告容量意味著節點中有多少個 CPU、多少記憶體可用。
以下是註冊時將跟蹤的節點資源:
- CPU
- Memory記憶
- Ephemeral storage臨時儲存
- Persistent storage持久儲存
如果節點沒有足夠的容量來容納 pod,那麼排程程式會確保 pod 不會在該特定節點上進行排程。
Kubernetes 節點拓撲
在 kubernetes 中,一些 pod 相互依賴,就像 statefullset 應用程式一樣,在這種情況下,我們需要確保兩個 pod 將部署在同一個節點上,在這種情況下您可以使用節點拓撲。
您可以為 pod 分配標籤,這將有助於將所有同名的 pod 排程到某個節點,這對於效能相關的 pod 很有幫助。
節點拓撲的示例 YAML 檔案
apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: – name: my-container image: nginx nodeSelector: topology.kubernetes.io/zone: us-east-1a
節點優雅關閉
節點可以透過兩種方式關閉,一種是優雅關閉,另一種是強制關閉。優雅關閉節點將給節點中執行的 pod 留出時間儲存其狀態,之後它們將優雅地終止,併發出關閉通知,而不是突然關閉。
如果節點上執行的 pod 在寬限期後不會終止,則它們將被強制終止,並且如果 pod 沒有響應,它們將自動終止。
優雅終止節點的好處
- 沒有資料丟失。
- 在終止之前留出時間來儲存 pod 的狀態。
非正常節點關閉處理
在特定節點上執行的 Pod 將被終止,而不會正常關閉。節點上執行的kubelet CLI將不會向在該 Pod 中執行的 Pod 發出任何通知,因此 Pod 將沒有時間儲存資料,也無法保留 Pod 的狀態。
在 kubernets 叢集中,非優雅終止被認為是一個最大的問題,因為包含狀態完整應用程式的 pod 將沒有時間來保留狀態,並且 pod 將自動處於終止狀態,這意味著控制器不會在執行良好的節點中建立新的 pod。
Kubernetes 節點與 Kubernetes Pod
節點 |
Pod |
---|---|
Kubernetes 節點將允許一個或多個 pod 在其上執行。 |
Kubernetes pods將包含一個或多個計劃在節點上執行的容器。 |
Node 可以表示一個允許您執行 kubernetes 的虛擬機器。 |
Pod 將用於在節點上執行容器。 |
CPU、記憶體和儲存等資源將由節點提供 |
pod 將使用來自節點的所有資源。 |
如果您在任何雲上使用 kubernetes,那麼節點將由雲本身負責,或者 kubernetes 將負責節點。 |
節點將負責 kubernetes pod。 |
管理 Kubernetes 節點
管理 Kubernetes 節點涉及許多工,從部署新節點到管理現有節點,這有助於維護應用程式對終端使用者的高可用性,以下是管理 Kubernetes 節點的全面概述。
- 配置和部署 Kubernetes 節點。
- 維護和更新 Kubernetes 節點。
- 擴充套件 Kubernetes 節點以提高效能和可用性。
最佳化 Kubernetes 節點效能
透過最佳化叢集節點使用的資源,可以提高 Kubernetes 叢集的效能。如果資源利用率很高,效能就會慢慢下降。在排程策略和最佳化容器執行時引數時,你需要更加小心,這樣可以大大提高 Kubernetes 叢集的速度。
資源利用最佳化
- 集裝箱包裝。
- 資源請求和限制。
- 驅逐政策。
- 資源監控。
排程策略
- 節點親和性和反親和性。
- 工作負載感知排程。
- 動態排程。
容器執行時調優
- 容器執行時配置。
- 影像最佳化。
- 容器執行時更新。
- 執行時記憶體管理。
保護 Kubernetes 節點
為了阻止未經授權的訪問、漏洞和潛在攻擊,您需要保護您的 kubernetes 叢集和容器化應用程式,您可以藉助 kubernetes 提供的以下服務來保護 kubernetes 叢集。
- 節點強化和漏洞管理。
- 網路安全和訪問控制。
- 容器執行時和安全注意事項。