Kubernetes 是一種為跨集群的服務發現提供松散耦合機制的架構。一個 Kubernetes 集群 有一個或多個控制平面,以及一個或多個計算節點。總體而言,控制平面負責管理整個集群,公開應用程序接口 (API),并根據所需配置安排計算節點的啟動和關閉。每個計算節點都運行像 Docker 一樣的容器運行時,以及與控制平面通信的代理 kubelet。每個節點可以是裸機服務器,也可以是本地或基于云的 虛擬機 (VM)。
什么是 Kubernetes 架構組件?
Kubernetes 集群的主要組件包括:
- 節點: 節點是托管容器化應用程序的虛擬機或物理服務器。集群中的每個節點都可以運行一個或多個應用程序實例。可能只有一個節點,但是,一個典型的 Kubernetes 集群將有多個節點(具有數百或更多節點的部署并不少見)。
- Image Registry:容器鏡像保存在注冊表中,并由控制平面傳輸到節點,以便在容器 pod 中執行。
- Pods:Pods 是容器化應用程序運行的地方。它們可以包含一個或多個容器,并且是 Kubernetes 集群中應用程序的最小部署單元。
什么是 Kubernetes 控制平面架構?
Kubernetes 控制平面是 Kubernetes 集群的控制平面。其組成部分包括:
- kube-apiserver。顧名思義,API 服務器公開了作為通信中心的 Kubernetes API。通過命令行界面 (CLI) 或其他用戶界面 (UI) 的外部通信傳遞到 kube-apiserver,所有控制平面到節點的通信也通過 API 服務器。
- etcd:存儲與集群相關的所有數據的鍵值存儲。etcd 具有高可用性和一致性,因為對 etcd 的所有訪問都是通過 API 服務器進行的。etcd 中的信息通常以人類可讀的 YAML 格式(代表遞歸的“YAML Ain't Markup Language”)。
- kube-scheduler:創建新 Pod 時,該組件會根據資源需求、策略和關于地理位置和與其他工作負載干擾的“親和性”規范將其分配給節點執行。
- kube-controller-manager:雖然 Kubernetes 集群有多個控制器功能,但它們都被編譯成一個名為 kube-controller-manager 的二進制文件。
此過程中包含的控制器功能包括:
- 復制控制器:確保集群中運行的每個復制 pod 存在正確數量的 pod
- 節點控制器:監控每個節點的健康狀況,并在節點上線或無響應時通知集群
- Endpoints 控制器:連接 Pod 和服務以填充 Endpoints 對象
- 服務帳戶和令牌控制器:將 API 訪問令牌和默認帳戶分配給集群中的新命名空間
- cloud-controller-manager:如果集群部分或全部基于云,云控制器管理器會將集群鏈接到云提供商的 API。只有那些特定于云提供商的控件才會運行。云控制器管理器不存在于完全在本地的集群上。可以在集群中運行多個云控制器管理器以實現 容錯 或提高整體云性能。
云控制器管理器的元素包括:
- 節點控制器:確定已停止響應的基于云的節點的狀態,即是否已被刪除
- 路由控制器:在云提供商基礎設施中建立路由
- 服務控制器:管理云提供商的負載均衡器
什么是 Kubernetes 節點架構?
節點是 Kubernetes 放置 Pod 執行的機器,無論是虛擬機還是物理服務器。節點組件包括:
- kubelet:每個節點都有一個名為 kubelet 的代理。它確保 PodSpecs 中描述的容器已啟動并正常運行。
- kube-proxy:每個節點上的網絡代理,它維護網絡節點,允許從 Pod 到網絡會話的通信,無論是在集群內部還是外部,如果可用的話,使用操作系統 (OS) 數據包過濾。
- 容器運行時:負責運行容器化應用程序的軟件。盡管 Docker 是最流行的,但 Kubernetes 支持任何遵循 Kubernetes CRI(容器運行時接口)的運行時。
其他 Kubernetes 基礎設施組件是什么?
- Pods:通過封裝一個(或多個)應用程序容器,Pods 是 Kubernetes 應用程序最基本的執行單元。每個 Pod 都包含執行所需的代碼和存儲資源,并擁有自己的 IP 地址。Pod 也包含配置選項。通常,一個 Pod 包含一個或幾個容器,這些容器耦合到一個應用程序或業務功能中,并共享一組資源和數據。
- Deployments:一種部署容器化應用程序 Pod 的方法。Deployment 中描述的期望狀態將導致控制器更改集群的實際狀態,以有序地實現該狀態。了解有關 Kubernetes 部署的更多信息。
- ReplicaSet:確保指定數量的相同 Pod 在任何給定時間點運行。
- Cluster DNS:提供運行 Kubernetes 服務所需的 DNS 記錄。
- 容器資源監控:在中央數據庫中捕獲和記錄容器指標。
Kubernetes 架構最佳實踐和設計原則是什么?
Gartner 的容器最佳實踐提出了一種平臺戰略,該戰略考慮了安全、治理、監控、存儲、網絡、容器生命周期管理和編排,如 Kubernetes。以下是構建 Kubernetes 集群的一些最佳實踐:
- 確保您已更新到 最新的 Kubernetes 版本 (撰寫本文時為 1.18)。
- 預先投資 于開發人員和運營團隊的培訓。
- 在企業范圍內建立治理 。確保工具和供應商與 Kubernetes 編排保持一致并集成。
- 通過將圖像掃描流程集成 為 CI/CD 流程的一部分、在構建和運行階段進行掃描來增強安全性。從 Github 存儲庫中提取的開源代碼應始終被視為可疑代碼。
- 在集群中采用基于角色的訪問控制 (RBAC)。最小特權、零信任模型應該是標準。
- 通過僅使用非 root 用戶 并使 文件系統只讀來進一步保護容器 。
- 避免使用默認值,因為簡單的聲明更不容易出錯并且更清楚地展示意圖。
- 使用基本 Docker Hub 映像時要小心,這些映像可能包含惡意軟件或包含不必要的代碼。從精簡、干凈的代碼開始,然后從那里構建包。小圖像構建速度更快,在磁盤上更小,圖像拉取也更快。
- 保持容器簡單。每個容器一個進程將讓編排器報告該進程是否健康。
- 當有疑問時,崩潰。Kubernetes 會重啟一個失敗的容器,所以不要在失敗時重啟。
- 詳細一點。描述性標簽可以幫助當前的開發人員,并且對于開發人員追隨他們的腳步非常寶貴。
- 不要對微服務過于細化。并非邏輯代碼組件中的每個功能都需要自己的微服務。
- 自動化,在有意義的地方。自動化 CI/CD 管道可以讓您完全避免手動 Kubernetes 部署。
- 使用 livenessProbe 和 readinessProbe 來幫助管理 Pod 生命周期,否則 pod 可能會在初始化時終止,或者在它們準備好之前開始接收用戶請求。
Kubernetes 架構 簡單直觀。控制平面和節點之間的松散耦合允許幾乎無限的靈活性,并且應用程序能夠幾乎即時橫向擴展以滿足不斷變化的需求,將用戶遷移到新版本,并支持從本地遷移到基于云的節點或在多個云之間利用每個云提供商的所需功能。