Kubernetes – 節點

wongchaofan發表於2024-06-05

Kubernetes 節點是實際工作發生的工作器或主機。每個 Kubernetes 節點都有執行 Pod 所需的服務,並由控制平面控制。每個 Kubernetes 節點可以有多個 Pod,Pod 內有容器執行。每個節點中有 3 個程序用於排程和管理這些 Pod。

  1. Container runtime需要容器執行時來執行在 pod 內部 pod 上執行的應用程式容器。示例-> Docker。
  2. kubelet: kubelet 與容器執行時以及 Node 互動。它是負責啟動包含容器的 pod 的程序。
  3. 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 節點自注冊的不同選項

  1. 訪問 Kubeconfig 檔案: 我們可以向 kubelet 提供 kubeconfig 檔案的路徑,以便它可以透過 API 伺服器進行身份驗證。
  2. 設定標誌 True:“–register-nodes”預設值為 true,當設定為 true 時,kubelet 將聯絡 API 伺服器並將所有資訊傳送到新新增的節點,API 伺服器在 kubernetes 叢集中建立節點物件,kubernetes 排程程式將使用節點物件在節點上排程 pod。

還有其他一些選項,但以上是最常用的選項。

手動 Kubernetes 節點管理

kubernetes 中的手動節點管理是指手動註冊節點,而無需任何節點的自我註冊,可以使用某些命令來手動管理節點,如下所示。

  1. kubectl create node.
  2. kubectl delete node.
  3. kubectl create node.
  4. 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、多少記憶體可用。

以下是註冊時將跟蹤的節點資源:

  1. CPU
  2. Memory記憶
  3. Ephemeral storage臨時儲存
  4. 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 沒有響應,它們將自動終止。

優雅終止節點的好處

  1. 沒有資料丟失。
  2. 在終止之前留出時間來儲存 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 叢集。

  • 節點強化和漏洞管理。
  • 網路安全和訪問控制。
  • 容器執行時和安全注意事項。

相關文章