Kubernetes 概念 - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Kubernetes 概念

Amazon Elastic Kubernetes Service (Amazon EKS) 是以開放原始碼 Kubernetes 專案為基礎的 AWS 受管服務。雖然您需要知道 Amazon EKS 服務如何與 AWS Cloud 整合 (特別是當您第一次建立 Amazon EKS 叢集時),但一旦 Amazon Word 叢集啟動並執行,您使用 Amazon EKS 叢集的方式就與任何其他叢集一樣。Kubernetes 叢集。因此,開始管理 Kubernetes 叢集和部署工作負載,您需要至少基本了解 Kubernetes 概念。

此頁面會分割 Kubernetes 概念分為三個部分:為什麼 Kubernetes?叢集工作負載。第一節說明執行 的值 Kubernetes 服務,特別是 Amazon EKS 等受管服務。工作負載區段涵蓋如何 Kubernetes 應用程式是建置、儲存、執行和管理。叢集區段會配置組成 的不同元件 Kubernetes 叢集以及您建立和維護的責任 Kubernetes 叢集。

當您瀏覽此內容時,連結將引導您進一步描述 Kubernetes Amazon EKS 和 中的概念 Kubernetes 文件,如果您想要深入了解我們在此涵蓋的任何主題。如需有關 Amazon EKS 如何實作的詳細資訊 Kubernetes 控制平面和運算功能,請參閱 Amazon EKS 架構

為什麼 Kubernetes?

Kubernetes 旨在改善執行任務關鍵型、生產品質的容器化應用程式時的可用性和可擴展性。而不是只執行 Kubernetes 在單一機器上 (雖然可能),Kubernetes 可讓您跨可擴展或簽約以滿足需求的一組電腦執行應用程式,以達到這些目標。Kubernetes 包含的功能可讓您更輕鬆地:

  • 在多部機器上部署應用程式 (使用部署在 Pod 中的容器)

  • 監控容器運作狀態並重新啟動失敗的容器

  • 根據負載上下擴展容器

  • 使用新版本更新容器

  • 在容器之間分配資源

  • 平衡跨機器的流量

擁有 Kubernetes 自動化這些類型的複雜任務,可讓應用程式開發人員專注於建置和改善其應用程式工作負載,而不必擔心基礎設施。開發人員通常會建立格式化為 YAML 檔案的組態檔案,描述應用程式的所需狀態。這可能包括要執行的容器、資源限制、Pod 複本數量、CPU/記憶體配置、親和性規則等。

的屬性 Kubernetes

為了實現其目標,Kubernetes 具有下列屬性:

  • 容器化 - Kubernetes 是容器調度工具。使用 Kubernetes,您必須先將應用程式容器化。視應用程式類型而定,這可能是一組微型服務、批次工作或其他形式。然後,您的應用程式可以利用 Kubernetes 工作流程包含龐大的工具生態系統,其中容器可以儲存為容器登錄檔中的映像,部署到 Kubernetes 叢集,並在可用的節點上執行。您可以在本機電腦上使用 建置和測試個別容器 Docker 或其他容器執行期,然後再將其部署到您的 Kubernetes 叢集。

  • 可擴展 — 如果應用程式的需求超過這些應用程式執行中執行個體的容量,Kubernetes 能夠擴展。視需要,Kubernetes 可以判斷應用程式是否需要更多 CPU 或記憶體,並透過自動擴展可用容量或使用更多現有容量來回應。如果有足夠的運算可以只執行更多應用程式執行個體 (水平 Pod 自動擴展),也可以在節點層級執行擴展,如果需要增加更多節點來處理增加的容量 (Cluster AutoscalerKarpenter)。由於不再需要容量,這些服務可以刪除不必要的 Pod 並關閉不需要的節點。

  • 可用:如果應用程式或節點變得運作狀態不佳或無法使用,Kubernetes 可以將執行中的工作負載移至另一個可用的節點。您只需刪除正在執行工作負載的工作負載或節點的執行中執行個體,即可強制問題發生。這裡的重點是,如果工作負載無法再執行到原地,則可以在其他位置提出工作負載。

  • 宣告式 - Kubernetes 使用主動對帳來持續檢查您為叢集宣告的狀態是否符合實際狀態。例如,透過將 Kubernetes 物件套用到叢集,通常透過 YAML 格式的組態檔案,您可以要求啟動要在叢集上執行的工作負載。您可以稍後將組態變更為執行某些動作,例如使用較新版本的容器或配置更多記憶體。Kubernetes 會執行建立所需狀態所需的動作。這可能包括將節點提升或降低、停止和重新啟動工作負載,或提取更新的容器。

  • 可組合 - 由於應用程式通常由多個元件組成,因此您希望能夠同時管理一組這些元件 (通常由多個容器表示)。雖然 Docker Compose 提供直接使用 的方法 Docker、Kubernetes Kompose 命令可協助您使用 執行此操作 Kubernetes。 如需如何執行此操作的範例,請參閱將 Docker 撰寫檔案轉換為 Kubernetes 資源

  • 可擴展 — 與專屬軟體不同,開放原始碼 Kubernetes 專案旨在向您開放擴展 Kubernetes 任何您喜歡的方式來滿足您的需求。APIs 和組態檔案開放直接修改。鼓勵第三方編寫自己的控制器,以擴展基礎設施和最終使用者 Kubernetes 壯舉。Webhooks 可讓您設定叢集規則,以強制執行政策並適應不斷變化的條件。如需如何延伸的更多想法 Kubernetes 叢集,請參閱擴展 Kubernetes

  • 可攜式:許多組織已將 上的操作標準化 Kubernetes 因為它允許他們以相同的方式管理所有應用程式需求。開發人員可以使用相同的管道來建置和存放容器化應用程式。然後,這些應用程式可以部署到 Kubernetes 在內部部署、雲端、餐廳中的 on point-of-sales 終端機或分散在公司遠端站台的 IOT 裝置上執行的叢集。其開放原始碼性質可讓人們開發這些特殊的 Kubernetes 分佈,以及管理這些分佈所需的工具。

管理 Kubernetes

Kubernetes 原始碼是免費的,因此您可以使用自己的設備來安裝和管理 Kubernetes 自己。不過,自我管理 Kubernetes 需要深厚的營運專業知識,並需要時間和精力來維護。基於這些原因,部署生產工作負載的大多數人都會選擇經過測試的雲端供應商 (例如 Amazon EKS) 或內部部署供應商 (例如 Amazon EKS Anywhere) Kubernetes 的分發和支援 Kubernetes 專家。這可讓您卸載維護叢集所需的大部分未區分的繁重負載,包括:

  • 硬體:如果您沒有可執行的硬體 Kubernetes 根據您的需求,Amazon AWS EKS 等雲端供應商可以為您節省預付成本。使用 Amazon EKS,這表示您可以使用由 提供的最佳雲端資源 AWS,包括電腦執行個體 (Amazon Elastic Compute Cloud)、您自己的私有環境 (Amazon VPC)、中央身分和許可管理 (IAM) 和儲存 (Amazon EBS)。 AWS 管理電腦、網路、資料中心和執行所需的所有其他實體元件 Kubernetes。 同樣地,您不需要規劃資料中心來處理需求最高的天數的最大容量。對於 Amazon EKS Anywhere 或其他內部部署 Kubernetes 叢集,您有責任管理 中使用的基礎設施 Kubernetes 部署,但您仍然可以依賴 AWS 來協助您保持 Kubernetes 最新。

  • 控制平面管理 — Amazon EKS 管理 AWS託管 的安全性和可用性 Kubernetes 控制平面,負責排程容器、管理應用程式的可用性和其他關鍵任務,因此您可以專注於應用程式工作負載。如果您的叢集中斷, AWS 應該有將叢集還原至執行中狀態的方法。對於 Amazon EKS Anywhere,您可以自行管理控制平面。

  • 已測試的升級:當您升級叢集時,您可以依賴 Amazon EKS 或 Amazon EKS Anywhere 提供其 已測試版本的 Kubernetes 分佈。

  • 附加元件 - 有數百個專案可進行擴展和使用 Kubernetes 您可以新增至叢集的基礎設施,或使用 來協助工作負載的執行。 AWS 提供可與叢集搭配使用的 Amazon EKS 附加元件Amazon EKS 附加元件,而不是自行建置和管理這些附加元件。Amazon EKS Anywhere 提供託管套件,其中包含許多熱門開放原始碼專案的建置。因此,您不必自行建置軟體,也不必管理重要的安全修補程式、錯誤修正或升級。同樣地,如果預設值符合您的需求,則通常只需要極少的這些附加元件組態。如需使用附加元件擴展叢集的詳細資訊擴展叢集,請參閱 。

Kubernetes 動作中

下圖顯示您會以 身分進行的關鍵活動 Kubernetes 管理員或應用程式開發人員以建立和使用 Kubernetes 叢集。在此過程中,它說明了如何 Kubernetes 元件彼此互動,使用 AWS 雲端作為基礎雲端供應商的範例。

執行中的 Kubernetes 叢集。

A Kubernetes 管理員會建立 Kubernetes 叢集,使用要建置叢集之提供者類型的特定工具。此範例使用 AWS 雲端作為提供者,提供 受管 Kubernetes 稱為 Amazon EKS 的服務。受管服務會自動配置建立叢集所需的資源,包括為叢集建立兩個新的虛擬私有雲端 (Amazon VPCs)、設定聯網、映射 Kubernetes 許可,以管理雲端中的資產,查看控制平面服務有執行位置,並將零個或多個 Amazon EC2 執行個體配置為 Kubernetes 節點,用於執行工作負載。會針對控制平面 AWS 管理一個 Amazon VPC 本身,而另一個 Amazon VPC 包含執行工作負載的客戶節點。

許多 Kubernetes 管理員接下來的任務使用 完成 Kubernetes 工具,例如 kubectl。該工具會直接向叢集的控制平面提出服務請求。然後,對叢集進行查詢和變更的方式與您在任何 上進行查詢和變更的方式非常類似 Kubernetes 叢集。

想要將工作負載部署到此叢集的應用程式開發人員可以執行數個任務。開發人員需要將應用程式建置到一或多個容器映像中,然後將這些映像推送到可供 存取的容器登錄檔 Kubernetes cluster.為該目的 AWS 提供 Amazon Elastic Container Registry (Amazon ECR)。

若要執行應用程式,開發人員可以建立 YAML 格式的組態檔案,告訴叢集如何執行應用程式,包括要從登錄檔提取的容器,以及如何在 Pod 中包裝這些容器。控制平面 (排程器) 會將容器排程到一或多個節點,而每個節點上的容器執行時間實際上會提取並執行所需的容器。開發人員也可以設定應用程式負載平衡器,將流量與在每個節點上執行的可用容器平衡,並公開應用程式,以便讓外部在公有網路上使用。完成所有操作後,想要使用應用程式的人可以連線至應用程式端點來存取它。

以下各節從 的角度,詳細介紹了這些功能。Kubernetes 叢集和工作負載。

叢集

如果您的任務是啟動和管理 Kubernetes 叢集,您應該知道如何 Kubernetes 建立、增強、管理和刪除叢集。您也應該知道組成叢集的元件是什麼,以及您需要做什麼來維護這些元件。

用於管理叢集的工具可處理 之間的重疊 Kubernetes 服務和基礎硬體提供者。因此,這些任務的自動化通常由 Kubernetes 提供者 (例如 Amazon EKS 或 Amazon EKS Anywhere) 使用提供者特有的工具。例如,若要啟動 Amazon EKS 叢集,您可以使用 eksctl create cluster,而對於 Amazon EKS Anywhere,您可以使用 eksctl anywhere create cluster。請注意,雖然這些命令會建立 Kubernetes 叢集,它們是提供者特有的,不屬於 Kubernetes 專案本身。

叢集建立和管理工具

所以此 Kubernetes 專案提供建立 的工具 Kubernetes 手動叢集。因此,如果您想要安裝 Kubernetes 在單一機器上,或在機器上執行控制平面,並手動新增節點,您可以使用 CLI 工具,例如種類迷你立方kubeadm,這些工具列於 Kubernetes 安裝工具。為了簡化和自動化叢集建立和管理的完整生命週期,使用已建立的工具會更容易 Kubernetes 供應商,例如 Amazon EKS 或 Amazon EKS Anywhere。

在 AWS Cloud 中,您可以使用 CLI 工具建立 Amazon EKS 叢集,例如 eksctl,或 Terraform 等更多宣告工具 (請參閱 Amazon EKS Blueprints for Terraform)。您也可以從 建立叢集 AWS Management Console。請參閱 Amazon EKS 功能,以取得您使用 Amazon EKS 取得的清單。Kubernetes Amazon EKS 為您承擔的責任包括:

若要在您自己的內部部署電腦和網路上執行叢集,Amazon 提供 Amazon EKS Anywhere。您可以選擇使用自己的設備,在 Word 上執行 Amazon EKS Anywhere、裸機 (Tinkerbell 供應商)、SnowCloudStackNutanix 平台,而不是以 AWS Cloud 作為提供者。 VMWare vSphere

Amazon EKS Anywhere 是以 Amazon EKS 使用的相同 Amazon Word Distro 軟體為基礎。 EKS不過,Amazon EKS Anywhere 依賴 Kubernetes Cluster API (CAPI) 介面的不同實作來管理 Amazon EKS Anywhere 叢集中機器的完整生命週期 (例如 CAPV for vSphere 和 CAPC for CloudStack)。由於整個叢集都在您的設備上執行,因此您承擔管理控制平面和備份其資料的額外責任 (請參閱本文件稍後的 )。

叢集元件

Kubernetes 叢集元件分為兩個主要區域:控制平面和工作者節點。控制平面元件管理叢集,並提供對其 APIs 的存取權。工作者節點 (有時又稱為節點) 提供實際工作負載執行的位置。節點元件包含在每個節點上執行的服務,以與控制平面和執行容器通訊。叢集的工作者節點集稱為資料平面

控制平台

控制平面由一組管理叢集的服務組成。這些服務可能都在單一電腦上執行,也可能分散到多個電腦。在內部,這些稱為控制平面執行個體 (CPIs)。CPIs 的執行方式取決於叢集的大小和高可用性的需求。隨著叢集的需求增加,控制平面服務可以擴展以提供該服務的更多執行個體,並在執行個體之間平衡載入請求。

的 元件任務 Kubernetes 控制平面執行包括:

  • 與叢集元件 (API 伺服器) 通訊 — API 伺服器 (kube-apiserver) 公開 Kubernetes 因此,可以從叢集的內部和外部對叢集提出請求的API。換句話說,新增或變更叢集物件 (Pod、服務、節點等) 的請求可能來自外部命令,例如來自 執行 Pod kubectl的請求。同樣地,也可以從 API 伺服器向叢集內的元件提出請求,例如查詢 kubelet Pod 狀態的服務。

  • 儲存有關叢集的資料 (*etcd 金鑰值存放區)* — etcd服務提供追蹤叢集目前狀態的關鍵角色。如果etcd服務變得無法存取,您將無法更新或查詢叢集的狀態,但工作負載會繼續執行一段時間。因此,關鍵叢集通常具有多個同時執行etcd的服務負載平衡執行個體,並在資料遺失或損毀時定期備份etcd金鑰值存放區。請記住,在 Amazon EKS 中,預設會自動為您處理。Amazon EKS Anywhere 提供蝕刻備份和還原的指示。請參閱 etcd`https://etcd.io/docs/v3.5/learning/data_model/[Data Model] to learn how `etcd管理資料。

  • Pod 排程至節點 (排程器) — 請求在 中啟動或停止 Pod Kubernetes 會導向 Kubernetes Scheduler (kube-scheduler)。由於叢集可能有多個節點可以執行 Pod,因此 Pod 應該在哪個節點 (或節點,如果是複本) 上執行。如果可用容量不足,無法在現有節點上執行請求的 Pod,則除非您有其他條款,否則請求將會失敗。這些規定可能包括啟用 使用受管節點群組簡化節點生命週期Managed Node Groups 或 Karpenter 等服務,這些服務可以自動啟動新的節點來處理工作負載。

  • 將元件保持在所需狀態 (Controller Manager) — Kubernetes Controller Manager 會以常駐程式程序 (kube-controller-manager) 執行,以監控叢集的狀態,並變更叢集以重新建立預期狀態。特別是,有幾個控制器可監控不同的 Kubernetes 物件,其中包含 statefulset-controllerendpoint-controllercronjob-controllernode-controller和其他。

  • 管理雲端資源 (Cloud Controller Manager) — 之間的互動 Kubernetes 和執行基礎資料中心資源請求的雲端提供者,是由 Cloud Controller Manager (cloud-controller-manager) 處理。Cloud Controller Manager 管理的控制器可以包括路由控制器 (用於設定雲端網路路由)、服務控制器 (用於使用雲端負載平衡服務) 和節點生命週期控制器 (以在節點的整個生命週期中與 Kubernetes 保持同步)。

工作者節點 (資料平面)

對於單一節點 Kubernetes 叢集,工作負載會在與控制平面相同的機器上執行。不過,較標準的組態是擁有一或多個專用於執行的個別電腦系統 (節點) Kubernetes 工作負載。

當您第一次建立 Kubernetes 叢集,某些叢集建立工具可讓您設定要新增至叢集的特定數量節點 (透過識別現有的電腦系統或讓提供者建立新節點)。將任何工作負載新增至這些系統之前,服務會新增至每個節點以實作這些功能:

  • 管理每個節點 (*kubelet)* — API 伺服器會與在每個節點上執行的 kubelet 服務進行通訊,以確保節點已正確註冊,且排程器要求的 Pod 正在執行中。kubelet 可以讀取 Pod 清單,並在本機系統上設定 Pod 所需的儲存磁碟區或其他功能。它也可以檢查本機執行中容器的運作狀態。

  • 在節點上執行容器 (容器執行期) — 每個節點上的容器執行期會管理指派給節點的每個 Pod 所需的容器。這表示它可以從適當的登錄檔提取容器映像、執行容器、停止容器,以及回應容器的查詢。預設容器執行時間是容器化的。截至 Kubernetes 1.24,特殊整合 Docker 可用作容器執行期的 (dockershim) 已從 捨棄 Kubernetes。 雖然您仍然可以使用 Docker 在本機系統上測試和執行容器、使用 Docker 取代為 Kubernetes 您現在必須在每個節點上安裝 Docker 引擎,以搭配 使用 Kubernetes.

  • 管理容器之間的聯網 (kube-proxy) — 若要支援 Pod 之間的通訊,Kubernetes 使用稱為 服務的 功能來設定 Pod 網路,以追蹤與這些 Pod 相關聯的 IP 地址和連接埠。kube-proxy 服務在每個節點上執行,以允許 Pod 之間的通訊進行。

擴展叢集

某些服務可以新增至 Kubernetes 以支援叢集,但 不在控制平面中執行。這些服務通常直接在 kube-system 命名空間或其自己的命名空間中的節點上執行 (就像通常與第三方服務供應商一起執行)。常見的範例是 CoreDNS 服務,它為叢集提供 DNS 服務。請參閱探索內建服務,了解如何查看叢集上哪些叢集服務正在 kube-system 中執行。

您可以考慮將不同類型的附加元件新增至叢集。為了保持叢集運作狀態,您可以新增可監控叢集效能並檢視日誌觀測性功能,讓您執行記錄、稽核和指標等工作。透過此資訊,您可以對發生的問題進行故障診斷,通常透過相同的可觀測性界面進行故障診斷。這些服務類型的範例包括 Amazon GuardDuty使用 Amazon CloudWatch 監控叢集資料CloudWatch、AWS Ditro for OpenTelemetry、適用於 的 Amazon VPC CNIAmazon VPC CNI Kubernetes和 Grafana Kubernetes Monitoring。對於儲存叢集的應用程式資料儲存,Amazon EKS 的附加元件包括 使用 Amazon EBS 存放 Kubernetes 磁碟區Amazon Elastic Block Store CSI 驅動程式 (用於新增區塊儲存裝置)、使用 Amazon EFS 儲存彈性檔案系統Amazon Elastic File System CSI 驅動程式 (用於新增檔案系統儲存) 和數個第三方儲存附加元件 (例如 使用 FSx for NetApp ONTAP儲存高效能應用程式Amazon FSx for NetApp ONTAP WordCSI驅動程式)。

如需可用 Amazon EKS 附加元件的更完整清單,請參閱 Amazon EKS 附加元件

工作負載

Kubernetes 將工作負載定義為「在 上執行的應用程式 Kubernetes." 該應用程式可以包含一組在 Pod 中作為容器執行的微服務,也可以作為批次任務或其他類型的應用程式執行。的任務 Kubernetes 是為了確保您為要設定或部署的物件提出的請求已執行。部署應用程式的人應了解容器的建置方式、Pod 的定義方式,以及您可以使用哪些方法進行部署。

容器

您在 中部署和管理的應用程式工作負載的最基本元素 Kubernetes 是 Pod 。Pod 代表保存應用程式元件的方式,以及定義描述 Pod 屬性的規格。將此與 RPM 或 Deb 套件之類的內容形成對比,該套件會封裝 Linux 系統的軟體,但本身不會以實體形式執行。

因為 Pod 是最小的可部署單位,所以通常容納單一容器。不過,如果容器緊密耦合,多個容器可以位於 Pod 中。例如,Web 伺服器容器可能封裝在 Pod 中,並具有邊載容器類型,可提供與 Web 伺服器容器緊密連結的記錄、監控或其他服務。在此情況下,位於同一個 Pod 中可確保每個執行中的 Pod 執行個體,兩個容器一律在同一個節點上執行。同樣地,Pod 中的所有容器共用相同的環境,Pod 中的容器執行方式就像位於相同的隔離主機一樣。這樣做的影響是容器共用一個 IP 地址,提供對 Pod 的存取,並且容器可以彼此通訊,就像在自己的 localhost 上執行一樣。

Pod 規格 (PodSpec) 定義 Pod 的所需狀態。您可以使用工作負載資源來管理 Pod 範本,以部署個別 Pod 或多個 Pod。工作負載資源包括部署 (管理多個 Pod 複本)、StatefulSets (部署需要唯一性的 Pod,例如資料庫 Pod) 和 DaemonSets (其中 Pod 需要在每個節點上持續執行)。稍後的更多內容。

雖然 Pod 是您部署的最小單位,但容器是您建置和管理的最小單位。

建置容器

Pod 實際上只是一或多個容器周圍的結構,每個容器本身都保存檔案系統、可執行檔、組態檔案、程式庫和其他元件,以實際執行應用程式。因為名為 的公司 Docker Inc. 第一個熱門容器,有些人將容器稱為 Docker 容器。不過,Open Container Initiative 自定義以來已為業界定義容器執行期、映像和分發方法。此外,容器是從許多現有的 Linux 功能建立的,其他容器通常稱為 OCI Containers、Linux Containers 或僅 Containers。

當您建置容器時,通常會從 Dockerfile (實際上命名為 )。在該 Dockerfile 中,您可以識別:

  • 基本映像:基本容器映像通常是從作業系統檔案系統 (例如 Red Hat Enterprise LinuxUbuntu) 的最小版本,或是增強以提供軟體來執行特定類型應用程式 (例如節點python 應用程式) 的最小系統建置的容器。

  • 應用程式軟體 — 您可以將應用程式軟體新增至容器,方法與將軟體新增至 Linux 系統的方式大致相同。例如,您可以在 Dockerfile 中執行 npmyarn 安裝 Java 應用程式或 yumdnf 安裝 RPM 套件。換句話說,在 Dockerfile 中使用 RUN 命令,您可以執行基礎映像的檔案系統中可用的任何命令,以便在產生的容器映像內安裝軟體或設定軟體。

  • 指示Dockerfile 參考說明您可以在設定時新增至 Dockerfile 的指示。其中包括用於建置容器本身 (ADD 或本機系統中COPY的檔案) 的說明、識別容器執行時要執行的命令 (CMDENTRYPOINT),以及將容器連接至其執行所在的系統 (透過識別USER要執行的 、VOLUME要掛載的本機 或要掛載的連接埠)EXPOSE

雖然docker命令和服務傳統上用於建置容器 (docker build),但其他可用於建置容器映像的工具包括 Podmannerdctl。請參閱建置更好的容器映像Docker Build 概觀,以了解建置容器的相關資訊。

儲存容器

建置容器映像之後,您可以將其存放在工作站的容器分佈登錄檔中,或公有容器登錄檔中。在工作站上執行私有容器登錄檔可讓您將容器映像儲存在本機,讓您隨時可用。

若要以更公開的方式儲存容器映像,您可以將它們推送至公有容器登錄檔。公有容器登錄檔提供集中位置,用於儲存和分發容器映像。公有容器註冊的範例包括 Amazon Elastic Container RegistryRed Hat Quay 登錄檔和 Docker Hub 登錄檔。

在 Amazon Elastic Kubernetes Service (Amazon EKS) 上執行容器化工作負載時,我們建議提取 的複本 Docker 存放在 Amazon Elastic Container Registry 中的官方影像。Amazon ECR 自 2021 年以來一直在儲存這些映像。您可以在 Amazon ECR Public Gallery 中搜尋熱門容器映像,特別是 Docker 中樞映像,您可以搜尋 Amazon ECR Docker Gallery

執行容器

由於容器是以標準格式建置,因此容器可以在任何可以執行容器執行期的機器上執行 (例如 Docker) 及其內容符合本機機器的架構 (例如 x86_64arm)。若要測試容器,或在本機桌面上執行容器,您可以使用 docker runpodman run命令在 localhost 上啟動容器。用於 Kubernetes不過,每個工作者節點都部署了容器執行期,其上限為 Kubernetes 請求節點執行容器。

將容器指派到節點上執行後,節點會查看節點上是否已存在請求的容器映像版本。如果沒有,Kubernetes 會告知容器執行期從適當的容器登錄檔中提取該容器,然後在本機執行該容器。請記住,容器映像是指在筆記型電腦、容器登錄檔和 Kubernetes 節點。容器是指該映像的執行中執行個體。

Pod

容器準備就緒後,使用 Pod 包括設定、部署和讓 Pod 可存取。

設定 Pod

定義 Pod 時,您會為其指派一組屬性。這些屬性必須至少包含要執行的 Pod 名稱和容器映像。不過,還有許多其他要設定 Pod 定義的內容 (請參閱 PodSpec 頁面,了解哪些內容可以進入 Pod 的詳細資訊)。其中包含:

  • 儲存體 - 停止和刪除執行中的容器時,該容器中的資料儲存體會消失,除非您設定更永久的儲存體。Kubernetes 支援許多不同的儲存體類型,並在磁碟區傘下進行摘要。儲存類型包括 CephFSNFSiSCSI 和其他。您甚至可以從本機電腦使用本機區塊裝置。透過叢集提供的其中一種儲存類型,您可以將儲存磁碟區掛載到容器檔案系統中選取的掛載點。持久性磁碟區是在刪除 Pod 後繼續存在的磁碟區,而刪除 Pod 時則會刪除偶發磁碟區。如果您的叢集管理員為叢集建立不同的 StorageClasses,您可以選擇您使用的儲存體屬性,例如使用後是否刪除或回收磁碟區、是否需要更多空間時是否會擴展,甚至是是否符合特定效能需求。

  • 秘密 - 透過讓秘密可供 Pod 規格中的容器使用,您可以提供這些容器存取檔案系統、資料庫或其他受保護資產所需的許可。金鑰、密碼和權杖是可以儲存為秘密的項目。使用秘密可讓您不必將此資訊存放在容器映像中,而只需要將秘密提供給執行中的容器即可。類似於秘密是 ConfigMapsConfigMap 往往會保留較不重要的資訊,例如用於設定服務的鍵值對。

  • 容器資源 — 用於進一步設定容器的物件可以採用資源組態的形式。對於每個容器,您可以請求其可以使用的記憶體和 CPU 數量,以及設定容器可以使用之資源總數量的限制。如需範例,請參閱 Pod 和容器的資源管理

  • 中斷:Pod 可能會非自願中斷 (節點關閉) 或自願中斷 (需要升級)。透過設定 Pod 中斷預算,您可以對應用程式在中斷發生時保持可用狀態進行一些控制。如需範例,請參閱指定應用程式的中斷預算

  • 命名空間 — Kubernetes 提供不同的隔離方式 Kubernetes 元件和工作負載。在同一命名空間中執行特定應用程式的所有 Pod,是一起保護和管理這些 Pod 的常見方式。您可以建立自己的命名空間來使用,或選擇不指示命名空間 (這會導致 Kubernetes 使用default命名空間)。Kubernetes 控制平面元件通常在 kube-system 命名空間中執行。

剛才描述的組態通常會在要套用至 的 YAML 檔案中收集在一起 Kubernetes 叢集。對於個人 Kubernetes 叢集,您可能只會將這些 YAML 檔案存放在本機系統上。不過,隨著更關鍵的叢集和工作負載,GitOps 是自動化儲存和更新工作負載和 Kubernetes 基礎設施資源。

用於收集和部署 Pod 資訊的物件由下列其中一種部署方法定義。

部署 Pod

您要選擇部署 Pod 的方法取決於您計劃搭配這些 Pod 執行的應用程式類型。以下是您的一些選擇:

  • 無狀態應用程式:無狀態應用程式不會儲存用戶端的工作階段資料,因此另一個工作階段不需要參考先前工作階段發生的情況。如果 Pod 變得運作狀態不佳或四處移動而不儲存狀態,這就更容易將 Pod 替換為新的 Pod。如果您執行的是無狀態應用程式 (例如 Web 伺服器),您可以使用部署來部署 PodReplicaSets。A ReplicaSet 定義您希望同時執行的 Pod 執行個體數量。雖然您可以直接執行 a ReplicaSet ,但通常會直接在部署中執行複本,以定義一次應執行的 Pod 複本數量。

  • 具狀態應用程式:具狀態應用程式是 Pod 的身分和啟動 Pod 的順序很重要的應用程式。這些應用程式需要穩定且需要以一致方式部署和擴展的持久性儲存體。在 中部署具狀態應用程式 Kubernetes,您可以使用 StatefulSets。通常以 a StatefulSet 執行的應用程式範例是資料庫。在 a StatefulSet 中,您可以定義複本、Pod 及其容器、要掛載的儲存磁碟區,以及儲存資料的容器中的位置。如需以 a ReplicaSet 部署的資料庫範例,請參閱執行複寫狀態應用程式

  • 每個節點應用程式:有時您想要在 中的每個節點上執行應用程式 Kubernetes 叢集。例如,您的資料中心可能需要每個電腦執行監控應用程式或特定的遠端存取服務。用於 Kubernetes,您可以使用 DaemonSet 來確保選取的應用程式在您叢集的每個節點上執行。

  • 應用程式執行到完成 — 您想要執行某些應用程式來完成特定任務。這可能包括執行每月狀態報告或清除舊資料。任務物件可用來設定應用程式以啟動和執行,然後在任務完成時結束。CronJob 物件可讓您使用 Linux crontab 格式定義的結構,將應用程式設定為在某個特定小時、分鐘、月中的日期、月或週中的日期執行。

讓應用程式可從網路存取

隨著應用程式通常部署為一組微服務,這些微服務會移動到不同的位置,Kubernetes 需要一種方法來讓這些微服務能夠互相尋找。此外,讓其他人在 之外存取應用程式 Kubernetes 叢集、Kubernetes 需要一種在外部地址和連接埠上公開該應用程式的方式。這些聯網相關功能分別使用 Service 和 Ingress 物件完成:

  • 服務 - 由於 Pod 可以移動到不同的節點和地址,因此另一個需要與第一個 Pod 通訊的 Pod 可能會發現很難找到所在位置。若要解決此問題,Kubernetes 可讓您將應用程式表示為服務。使用 服務時,您可以識別具有特定名稱的 Pod 或一組 Pod,然後指出哪個連接埠會公開該應用程式的 Pod 服務,以及另一個應用程式可以使用哪些連接埠來聯絡該服務。叢集中的另一個 Pod 可以僅依名稱和 請求服務 Kubernetes 會將該請求導向執行該服務的 Pod 執行個體的正確連接埠。

  • 輸入 - 輸入可讓應用程式由 表示 Kubernetes 叢集外用戶端可用的服務。輸入的基本功能包括負載平衡器 (由輸入管理)、輸入控制器,以及將請求從控制器路由至服務的規則。有數個輸入控制器可供選擇 Kubernetes.

後續步驟

了解基本 Kubernetes 概念及其與 Amazon EKS 的關聯,將協助您導覽 Amazon EKS 文件Kubernetes 文件,以尋找管理 Amazon EKS 叢集和將工作負載部署到這些叢集所需的資訊。若要開始使用 Amazon EKS,請選擇下列選項: