在 AWS 上使用 Amazon EKS 佈署 Kubernetes 叢集,首先需佈署 Guestbook 範例應用程式,包含 Redis Leader、Redis Follower 和前端服務。透過 kubectl apply 指令佈署 YAML 檔案,並使用 kubectl get service 取得服務存取資訊。接著,我們可以透過 AWS 控制檯的 EKS 服務頁面檢視叢集資訊,包含節點、Pod、網路和存取許可權等。若遇到存取被拒問題,則需以 ekscluster 使用者登入並啟用控制檯存取許可權。除了 EKS 頁面,也可以透過 EC2 和 CloudFormation 服務頁面檢視節點例項、負載平衡器和堆積疊資訊。最後,使用 eksctl delete cluster 指令即可刪除叢集。

在 Amazon Web Services 上使用 Amazon Elastic Kubernetes Service 啟動 Kubernetes 叢集

佈署工作負載並與叢集互動

在前一章中,我們使用來自 GCP GKE 範例 GitHub 儲存函式庫的 Guestbook 範例。在本文中,我們將首先佈署工作負載,然後再探索根據 Web 的 AWS 控制檯。

佈署工作負載

儘管我們的叢集在 AWS 上使用 Amazon EKS 執行,但我們將使用與在 GKE 上啟動工作負載相同的 YAML 檔案。步驟如下:

  1. 首先,我們需要啟動 Redis Leader 佈署和服務,執行以下兩個命令:

    $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/redis-leader-deployment.yaml
    $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/redis-leader-service.yaml
    
  2. Redis Leader 佈署完成後,我們需要啟動 Redis Follower 佈署和服務,執行以下命令:

    $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/redis-follower-deployment.yaml
    $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/redis-follower-service.yaml
    
  3. Redis Leader 和 Follower 都啟動完成後,我們可以啟動前端佈署和服務,執行以下命令:

    $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/frontend-deployment.yaml
    $ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/main/quickstarts/guestbook/frontend-service.yaml
    
  4. 幾分鐘後,我們可以執行以下命令來取得剛剛啟動的服務資訊,包括存取工作負載的位置:

    $ kubectl get service frontend
    

檢視前端服務資訊

此時,輸出的內容與在 GKE 上執行工作負載時略有不同。我們得到的不是 IP 地址,而是一個 URL。將這個 URL 複製到瀏覽器中開啟。

探索 AWS 控制檯

登入 AWS 控制檯,選擇正確的區域(us-west-2),然後搜尋 Elastic Kubernetes Service。點選叢集名稱後,我們可以看到相關資訊。

此圖示顯示了在 AWS 控制檯中選擇正確區域的步驟:

疑難排解:存取被拒絕

點選叢集名稱後,如果出現存取被拒絕的錯誤,是因為 eksctl 在建立叢集時授予了 ekscluster 使用者許可權,而不是當前登入的使用者。為瞭解決這個問題,需要以 ekscluster 使用者身分登入 AWS 控制檯,並啟用控制檯存取許可權。

此圖示顯示瞭解決存取被拒絕問題的步驟:
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Amazon EKS 叢集佈署與管理

package "Kubernetes Cluster" {
    package "Control Plane" {
        component [API Server] as api
        component [Controller Manager] as cm
        component [Scheduler] as sched
        database [etcd] as etcd
    }

    package "Worker Nodes" {
        component [Kubelet] as kubelet
        component [Kube-proxy] as proxy
        package "Pods" {
            component [Container 1] as c1
            component [Container 2] as c2
        }
    }
}

api --> etcd : 儲存狀態
api --> cm : 控制迴圈
api --> sched : 調度決策
api --> kubelet : 指令下達
kubelet --> c1
kubelet --> c2
proxy --> c1 : 網路代理
proxy --> c2

note right of api
  核心 API 入口
  所有操作經由此處
end note

@enduml

#### 內容解密:

此段落詳細說明瞭如何解決在 AWS 控制檯中存取 EKS 叢集時的許可權問題。首先,我們需要了解 eksctl 在建立叢集時所設定的許可權組態。接著,我們透過傳回 IAM、選擇 ekscluster 使用者、前往 Security Credentials 分頁並點選 Enable console access 按鈕來啟用控制檯存取許可權,從而解決存取被拒絕的問題。這些步驟確保了我們能夠正確地在 AWS 控制檯中檢視和管理 EKS 叢集。

在 Amazon Web Services 上使用 Amazon Elastic Kubernetes Service 啟動 Kubernetes 叢集

設定 IAM 使用者與存取許可權

首先,我們需要在 AWS 控制檯中建立一個 IAM 使用者並啟用控制檯存取許可權。選擇自動生成密碼,並下載包含憑證的 CSV 檔案。下載完成後,登出 AWS 控制檯並開啟 CSV 檔案。前往控制檯登入 URL,使用 CSV 檔案中的使用者名稱和密碼登入。

登入 EKS 頁面與叢集設定

成功登入後,傳回 EKS 頁面並選擇您的叢集,此時您將不會再看到任何許可權投訴。叢集頁面包含多個標籤頁,分別提供不同的叢集資訊:

  • Overview:顯示各種叢集詳細資訊,如 Kubernetes 版本、端點資訊、叢集狀態、建立時間和日期等。
  • Resources:提供節點、Pod、名稱空間和工作負載的資訊。
  • Compute:顯示節點資訊、節點群組以及與叢集相關的任何 Fargate 組態檔的詳細資訊。
  • Networking:詳細介紹 VPC 組態。
  • Add-ons:列出已安裝和可用的附加元件。
  • Access:顯示 IAM 角色、AWS auth ConfigMap 和 Kubernetes RBAC 角色繫結。
  • Observability:組態並顯示日誌、監控和最近事件。
  • Upgrade insights:列出可用的 Kubernetes 版本升級和相容性檢查。
  • Update history:提供叢集和節點群組更新的歷史記錄。
  • Tags:列出並管理與 EKS 叢集相關的標籤。

檢視節點與工作負載資訊

Compute 標籤頁中,您可以檢視叢集中的節點詳細資訊。點選 Resources,選擇 Deployments,並篩選至預設工作空間,即可看到我們啟動的工作負載。

使用 AWS 控制檯檢視資源

除了 EKS 服務頁面外,我們還可以透過 AWS 控制檯的 EC2 服務部分檢視節點例項。選擇 Load Balancers 可以檢視在應用前端服務時組態的彈性負載平衡器。此外,AWS CloudFormation 服務頁面顯示了兩個堆積疊:一個用於 EKS 節點(我們的兩個 EC2 例項),另一個用於 EKS 叢集(Kubernetes 管理平面)。

CloudFormation 範本檢視

選擇其中一個堆積疊,可以檢視堆積疊啟動時發生的詳細資訊,包括 eksctl 在啟動 Amazon EKS 叢集期間建立的所有資源。您可以檢視範本並在設計器中檢視,甚至可以看到 eksctl 生成的 CloudFormation 範本,這是一個相當複雜的 JSON 檔案。使用 View in Application Composer 按鈕,可以獲得更易於理解的堆積疊視覺化表示。

刪除 Amazon Elastic Kubernetes Service 叢集

完成 Amazon EKS 叢集的操作後,您可以透過執行以下命令刪除叢集,請務必將叢集名稱替換為您自己的:

$ eksctl delete cluster --name hilarious-wardrobe-1717847351

刪除叢集所需的時間比啟動時短,大約需要 5 分鐘。eksctl 會在刪除資源時提供詳細資訊:

[i] deleting EKS cluster "hilarious-wardrobe-1717847351"
[i] will drain 0 unmanaged nodegroup(s) in cluster "hilarious-wardrobe-1717847351"
[i] starting parallel draining, max in-flight of 1
[i] deleted 0 Fargate profile(s)

重點解析:

  1. eksctl delete cluster 命令的作用是刪除指定的 EKS 叢集及其相關資源。
  2. --name 引數指定要刪除的叢集名稱,需替換為實際的叢集名稱。
  3. eksctl 在刪除過程中會清空節點、刪除 Fargate 組態檔等相關資源,並顯示詳細的操作日誌,方便追蹤刪除進度。

在 Amazon Web Services 上使用 Amazon Elastic Kubernetes Service 啟動 Kubernetes 叢集

首先更新的是本地的 kubectl 組態,如下所示: [✔] kubeconfig 已更新 接著,任何作為佈署工作負載到叢集的一部分而啟動的資源都會被終止: [i] 清理由 Kubernetes 物件(如 Service 或 Ingress)建立的 AWS 負載平衡器 然後,兩個 AWS CloudFormation 堆積疊被移除,這反過來又刪除了它們建立和組態的所有資源,如下面的程式碼片段所示: [i] 2 個順序任務:{ 刪除節點組 “ng-11c87ff4”,刪除叢集控制平面 “hilarious-wardrobe-1717847351” [非同步] } [i] 將刪除堆積疊 “eksctl-hilarious-wardrobe-1717847351-nodegroup-ng-11c87ff4” [i] 等待堆積疊 “eksctl-hilarious-wardrobe-1717847351-nodegroup-ng-11c87ff4” 被刪除 [i] 等待 CloudFormation 堆積疊 “eksctl-hilarious-wardrobe-1717847351-nodegroup-ng-11c87ff4” [i] 將刪除堆積疊 “eksctl-hilarious-wardrobe-1717847351-cluster” [✔] 所有叢集資源已刪除 此時,我們的叢集已經完全被刪除。

那麼,我們的 Amazon EKS 叢集一個月執行成本是多少? 我們需要考慮兩種成本: • 首先是 Amazon EKS 叢集本身的成本。每個建立的 Amazon EKS 叢集每小時的成本是 0.10 美元;然而,每個 Amazon EKS 叢集可以執行多個節點組,因此您不應該在每個區域啟動多個叢集。這意味著 Amazon EKS 叢集每月的成本約為 73 美元。 • 下一個需要考慮的是叢集使用的 AWS 資源,例如 EC2 叢集節點,在我們的例子中,每個節點的成本約為 70 美元,而執行我們的叢集一個月的總成本約為 213 美元。之所以說是約,因為還有頻寬和 AWS Elastic Load Balancing(ELB)服務的費用,這將進一步增加我們的工作負載成本。 可以在本章末尾的「進一步閱讀」部分找到定價概覽頁面的連結。

請在 AWS 控制檯中仔細檢查 EC2、EKS 和 CloudFormation 部分,以確保所有服務都已正確刪除,因為您將為任何遺留或閒置的資源付費。雖然這種情況不太可能發生,但最好現在就檢查,而不是在月底收到意外的賬單。

內容解密:

上述內容描述了刪除 Amazon EKS 叢集的過程和相關成本計算。首先,本地的 kubectl 組態被更新,然後與叢集相關的資源被清理,接著兩個 AWS CloudFormation 堆積疊被移除,從而刪除了所有相關資源。在成本計算方面,Amazon EKS 叢集本身的成本是固定的,而其他 AWS 資源(如 EC2 節點)的成本則根據使用情況而有所不同。最後,提醒讀者檢查 AWS 控制檯,以避免因遺留資源而產生額外費用。

進一步閱讀

以下是本章中介紹的一些主題和工具的更多資訊連結: • AWS:https://aws.amazon.com/ • Amazon EKS:https://aws.amazon.com/eks/ • AWS CLI:https://aws.amazon.com/cli/ • eksctl:https://eksctl.io/ • eksctl 支援狀態更新:https://github.com/aws/containers-roadmap/issues/2280 • 官方檔案:https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html • Amazon EKS 定價:https://aws.amazon.com/eks/pricing/

內容解密:

本章總結了在 Amazon EKS 上啟動和管理 Kubernetes 叢集的過程,並比較了與其他雲提供商(如 Google)的體驗。同時提供了進一步閱讀的資源連結,以便讀者能夠更深入地瞭解相關主題。

在 Microsoft Azure 上使用 Azure Kubernetes Service 啟動 Kubernetes 叢集

我們將要研究的最後一個公共雲 Kubernetes 服務是 Azure Kubernetes Service(AKS),它託管在 Microsoft Azure 上,Azure 是「三大」公共雲提供商之一,另外兩個我們已經在第 15 章「Google Kubernetes Engine 上的 Kubernetes 叢集」和第 16 章「在 Amazon Web Services 上使用 Amazon Elastic Kubernetes Service 啟動 Kubernetes 叢集」中介紹過。 在本章結束時,您將組態本地環境,使用必要的工具與您的 Microsoft Azure 帳戶互動並啟動您的 AKS 叢集。 佈署叢集後,我們將啟動與前幾章相同的工作負載,並探索您的 AKS 叢集與 Microsoft Azure 門戶之間的整合級別。 最後,在本章結束時,我們將討論在本章和前兩章中介紹的三個服務,以及我會推薦哪一個。 為此,我們將涵蓋以下主題: • 什麼是 Microsoft Azure 和 Azure Kubernetes Service? • 準備您的本地環境 • 啟動您的 Azure Kubernetes Service 叢集 • 佈署工作負載並與您的叢集互動 • 刪除您的 Azure Kubernetes Service 叢集

技術要求

如果您計劃跟隨本章中介紹的示例,您需要一個具有有效付款方式的 Microsoft Azure 賬戶。

內容解密:

本章介紹了在 Microsoft Azure 上使用 Azure Kubernetes Service(AKS)啟動 Kubernetes 叢集的過程。內容涵蓋了必要的技術要求,包括擁有一個有效的 Microsoft Azure 賬戶,並概述了本章將要討論的主題,包括準備本地環境、啟動 AKS 叢集、佈署工作負載以及刪除 AKS 叢集等。

在 Microsoft Azure 上使用 Azure Kubernetes Service 佈署 Kubernetes 叢集

Microsoft Azure 與 Azure Kubernetes Service 簡介

在開始安裝支援工具之前,讓我們先來瞭解我們將要使用的服務的由來,首先是 Microsoft Azure。

Microsoft Azure 的起源與發展

2008 年,微軟正式宣佈推出名為 Windows Azure 的新服務。這個服務是內部專案「Project Red Dog」的一部分,該專案自 2004 年開始開發,旨在利用核心 Windows 元件提供資料中心服務。

微軟在 2008 年開發者大會上宣佈的五個核心元件包括:

  • Microsoft SQL 資料服務:一種雲端的 Microsoft SQL 資料函式庫服務,以平台即服務(PaaS)模式執行,旨在簡化自行託管 SQL 服務的複雜性。
  • Microsoft .NET 服務:另一種 PaaS 服務,允許開發人員將根據 .NET 的應用程式佈署到微軟管理的 .NET 執行環境中。
  • Microsoft SharePoint:一種軟體即服務(SaaS)版本的熱門內部網路產品。
  • Microsoft Dynamics:一種 SaaS 版本的微軟 CRM 產品。
  • Windows Azure:一種基礎設施即服務(IaaS)產品,與其他雲端供應商類別似,能夠讓使用者啟動虛擬機器、儲存和網路服務,以支援其運算工作負載。

所有這些服務都建立在 Red Dog 作業系統之上,這是一個專門為雲端設計的 Windows 作業系統版本。

2014 年,Windows Azure 更名為 Microsoft Azure,反映了底層作業系統的名稱,以及 Azure 正在執行許多根據 Linux 的工作負載的事實。

Azure Kubernetes Service 的演進

最初,微軟推出了一個名為 Azure Container Service (ACS) 的容器服務。該服務允許使用者佈署容器工作負載,並選擇由三種不同的協調器(Docker Swarm、DC/OS 或 Kubernetes)提供支援。

隨著 Kubernetes 成為最受歡迎的協調器,ACS 逐漸被 AKS 取代。AKS 是一個符合 CNCF 標準、純粹根據 Kubernetes 的服務。這個轉變過程大約花了兩年時間,AKS 在 2018 年正式推出,而 ACS 則在 2020 年初退役。

準備本地環境

在啟動叢集之前,您需要完成一些任務。首先,您需要一個地方來啟動叢集,因此,如果您還沒有 Azure 帳戶,您需要註冊一個。

建立免費的 Microsoft Azure 帳戶

如果您還沒有帳戶,請造訪 https://azure.microsoft.com/free/,在那裡您可以註冊一個免費帳戶。

目前,您的免費帳戶包括 12 個月的熱門服務、200 美元的信用額度,可以用來探索和測試不同的 Azure 服務,以及超過 55 種始終免費的服務。

點選「Start free」按鈕並按照螢幕上的指示進行註冊。註冊過程大約需要 15 分鐘,您需要提供有效的信用卡或簽帳金融卡資訊以完成註冊並獲得免費帳戶的存取許可權。

安裝 Azure CLI

微軟提供了一個強大的跨平台命令列工具,用於管理您的 Microsoft Azure 資源。在 macOS、Linux 和 Windows 上安裝它非常簡單。

在 macOS 上安裝

如果您已經跟隨前兩章的內容,您可能已經猜到我們將使用 Homebrew 在 macOS 上安裝 Azure CLI。

要執行此操作,請執行以下命令:

brew install azure-cli

安裝完成後的步驟

安裝完成後,您可以使用 Azure CLI 管理您的 Azure 資源。具體的使用方法和命令將在後續章節中詳細介紹。