阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!

📖 簡介

大家好,在今天的節目中,我們將探討 Kubernetes 的關鍵元件。在最新一集中,我們了解了為什麼 Kubernetes 對軟體工程如此重要,以及為什麼幾乎每個大公司都依賴它。我們的旅程將配有範例和插圖,以幫助每個人了解 Kubernetes 的基本功能。

讓我們深入了解一下吧! 🚢

📒 詞彙表:

以下是本文中使用的常用單字和術語的清單。這將有助於您在閱讀全文之前形成基本的理解。

容器:

容器是一種標準化的軟體單元,它將應用程式的程式碼及其執行所需的所有依賴項、庫和設定檔打包在一起。容器可確保軟體在任何環境下都能保持一致的行為。常見的容器技術包括Docker和Kubernetes。

分散式系統:

分散式系統是獨立電腦或節點的集合,這些電腦或節點一起工作,對最終用戶來說表現為單一的連貫系統。這些系統透過網路相互通信,以協調任務、共享資源並實現共同目標。

守護程式:

在容器編排領域,守護程式是指無需使用者介入即可持續運作和管理任務的後台服務或進程。

生產環境:

生產環境是向最終用戶提供應用程式或服務的環境。在此環境中,應用程式通常需要在真實的流量條件下以及針對效能進行最佳化的配置下穩定、有效率且安全地運作。

應用程式介面:

API(應用程式介面)是一組規則和定義,允許不同的軟體應用程式相互通訊。 API 定義如何傳送請求、如何建立資料以及如何接收回應。 API 通常用於 Web 服務(例如,REST、GraphQL)、硬體、作業系統等。

yaml:

YAML(YAML 不是標記語言)是一種人類可讀的資料序列化格式,通常用於設定檔。 YAML 使用分層縮排表示資料結構,例如對應、清單和標量值。它易於讀寫,因此在容器配置和資源編排中很受歡迎。

🏗️建築

什麼是 Kubernetes 叢集?

Kubernetes 叢集是一組稱為節點的機器,可以執行容器化應用程式。 Kubernetes 採用基於客戶端伺服器模型的分散式架構來編排容器。 Kubernetes 架構由兩個核心元件組成:

👨🏻‍⚖️ 主節點

🧠 控制平面

集群的大腦。它負責管理叢集的狀態。在生產環境中,控制平面通常執行在跨越多個資料中心區域的多個節點上。第二個是一組工作節點。這些節點執行容器化應用程式工作負載。容器化應用程式在 Pod 中運作。

什麼是 Pod?

Pod 是 Kubernetes 中最小的可部署單元。 Pod 託管一個或多個容器,並為這些容器提供共用儲存和網路。 Pod 由 Kubernetes 控制平面建立和管理。它們是 Kubernetes 應用程式的基本建置塊。

現在讓我們更深入地了解控制平面。它由API伺服器、調度器、控制器管理器等幾個核心元件組成。

🤖 API 伺服器:

這是控制平面和集群其餘部分之間的主要介面。它公開了一個 RESTful API,允許客戶端與控制平面互動並提交請求來管理叢集。 API 伺服器是kubectl的網關,kubectl 是一個命令列工具,用於使用 API 與控制平面進行通訊。

例如命令

 kubectl run "pod-name" --image="image-name"

用於建立具有所需pod-name和所需image-name 的Pod

💾 等

Etcd 是一個開源分散式鍵值存儲,在 Kubernetes 控制平面中發揮重要作用。它儲存叢集的持久狀態。在 Kubernetes 中,etcd 充當主資料存儲,儲存所有叢集資料,包括所有配置、狀態和元資料。 API 伺服器使用它來檢索和更新叢集的狀態,確保叢集的實際狀態與使用者和管理員定義的所需狀態相符。

有趣的事實:ETCD 由單字「etc」和「d」組成。 “etc”源自 UNIX 目錄“/etc”,其中包含配置文件,“d”代表“分散式”

📓 調度程序:

調度程序負責將 Pod 調度到叢集中的工作節點上。它使用有關 Pod 所需資源和工作節點上可用資源的資訊來做出放置決策。

在叢集中,滿足Pod調度要求的節點稱為可行節點。如果沒有合適的節點,則 Pod 將保持未調度狀態,直到調度程式能夠放置它。

Kube-scheduler 透過兩步驟操作為 pod 選擇節點:

  • 過濾:

過濾步驟可辨識可以調度 Pod 的節點。經過這一步驟之後,節點清單就包含了合適的節點(通常不只一個)。如果清單為空,則 Pod(尚)不可調度。

  • 評分:

在評分步驟中,調度程式會對剩餘節點進行排名,以選擇 Pod 的最佳放置位置。每個通過過濾的節點都會根據有效的評分規則獲得一個分數。

最後,kube-scheduler 將 Pod 分配給排名最高的 Node。如果存在多個相同分數的節點,kube-scheduler 會隨機選擇其中一個。

🧑🏻‍💼 控制器經理:

控制器管理器負責執行管理叢集狀態的控制器。複製控制器確保 Pod 所需數量的副本正在執行,部署控制器管理部署的滾動更新和回滾,端點控制器管理服務的端點。

圖1:主節點主要元件匯總

圖1:主節點主要元件匯總

👷🏻 工作節點

執行在工作節點上的 Kubernetes 核心元件包括 kubelet、容器執行時間和 kube-proxy。

📦 庫貝萊特

kubelet 是一個在每個工作節點上執行的守護程式。它是在每個節點上執行的主節點代理。它負責與控制平面進行通訊。它可以使用以下之一向 apiserver 註冊節點: 主機名稱;覆蓋主機名稱的標誌;或雲端提供者的特定邏輯。它從控制平面接收有關在節點上執行哪些 pod 的指令,並確保維持 pod 的所需狀態。

kubelet 根據 PodSpec 工作。它需要一組 PodSpec 並確保這些 PodSpec 中描述的容器正在運作且健康。

Kubelet 不管理不是由 Kubernetes 建立的容器。

這是 PodSpec 的範例:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
    - name: nginx-container
      image: nginx:latest
      ports:
        - containerPort: 80
      resources:
        requests:
          memory: "64Mi"
          cpu: "250m"
        limits:
          memory: "128Mi"
          cpu: "500m"
      volumeMounts:
        - name: nginx-config
          mountPath: /etc/nginx/conf.d
  volumes:
    - name: nginx-config
      configMap:
        name: nginx-config-map
  restartPolicy: Always

在這種情況下,Kubelet 會讀取 PodSpec 並告訴容器執行時下載容器映像“nginx:latest”,接下來它執行容器並掛載在 spec.volumes 中定義的磁碟區。 kubelet 指派spec.resources 中定義的資源並監控容器的運作狀況。

⚙️ 容器運作時

容器執行時在工作節點上執行容器。它負責從註冊表中提取容器映像。啟動和停止容器並管理容器的資源。 Kubernetes 支援容器執行時,例如容器化、CRI-O 以及 Kubernetes CRI(容器執行時間介面)的任何其他實作。容器執行時有兩種類型:低階容器執行時和高級容器執行時。由於這是一個廣泛的主題,我將在以後的文章中詳細闡述執行時容器的概念。

💻 代理

kube-proxy 是在每個工作節點上執行的網路代理程式。它負責將流量路由到正確的 Pod。它還為 Pod 提供負載平衡,並確保流量在 Pod 之間均勻分配。安裝 kube-proxy 後,它會透過 API 伺服器進行驗證,當新增或刪除新服務或端點時,API 伺服器會將這些變更傳達給 kube-proxy,然後 kube-proxy 將這些變更套用為 NAT 規則。當流量傳送到服務時,它會根據這些規則重定向到後端 Pod。至於容器執行時,這是關於什麼是 kube-proxy 以及他的主要功能的一個小介紹,我將在一篇專門的文章中擴展所有這些概念。

圖 2:kubernetes 叢集主要元件的摘要,包括主節點和兩個工作節點。在第一個工作節點中有 5 個執行微服務的 Pod,第二個工作節點有 3 個執行微服務的 Pod

圖 2:kubernetes 叢集主要元件的摘要,包括主節點和兩個工作節點。在第一個工作節點中有 5 個執行微服務的 Pod,第二個工作節點有 3 個執行微服務的 Pod

🚀 結論

Kubernetes 元件是技術和複雜基礎架構的完美範例。今天我們探討了核心元件如何運作和互動以實現高效的應用程式部署和擴展。在下一集中,我將向您展示如何啟動您的第一個 Kubernetes 叢集以及如何部署應用程式!

感謝您的閱讀! 🙏


原文出處:https://dev.to/lorenzo_tettamanti/kubernetes-explained-understanding-the-key-components-driving-modern-infrastructure-4eef


共有 0 則留言


精選技術文章翻譯,幫助開發者持續吸收新知。

阿川私房教材:
學 JavaScript 前端,帶作品集去面試!

63 個專案實戰,寫出作品集,讓面試官眼前一亮!

立即開始免費試讀!