【GKE 教學】淺談 Google Kubernetes Engine 架構與五大面向介紹

撰文:Jason Wang, CloudMile Technical Trainer 

近幾年來,許多企業日益擁抱容器化服務,而 Google 開源的 Kubernetes(K8s)技術則是管理大規模容器的首選解方之一。這篇文章我們要與大家淺談 Google Kubernetes Engine (GKE),適合已經在使用 Kubernetes 又或是正在挑選 Kubernetes 使用平台(On-Premise/ On Cloud) 的讀者們,希望能透過文章讓大家理解 - GKE 可以如何幫助大家更有效率地部署應用程式以及使用 Kubernestes 技術。

回顧程式開發的發展歷程

在運算服務的領域,我們走過了非常多個年頭,從服務部署一開始僅能部署在實體機器上,到中期發展的虛擬機器(Virtual Machine,VM),我們在計算資源的運用效率上越發極致。而近年來熱門的容器化 (Containerized) 技術更使我們在計算資源的使用效率上做到極大化,容器化的技術不僅具備使服務更容易被運行、輕量化的特性,亦具備不被 Vendor Lock In 的可移植性 (Portability), 讓程式與服務可以更輕鬆的在環境之間搬遷與使用。

近年來熱門的容器化 (Containerized) 技術使企業在計算資源的使用效率上做到極大化。
icon/enlarge

業界標準的容器化管理服務 — Kubernetes 

而要達成大規模的 Container 技術應用與管理,Kubernetes 功不可沒, Kubernetes 是 Google 基於多年的內部技術使用、改進後研發出的一套系統,幫助用戶進行大規模的 Container 管理。Kubernetes 集強大功能於一身, 應用服務運行的 Lifecycle 管理、Autoscaling、Networking 等功能皆可透過 Kubernetes 本身的功能達成。Google 將 Kubernetes 技術開源開放給廣大社群使用並且在業界已是許多企業廣泛使用的 Container 管理平台(系統)。Kubernetes 技術在 Google 開源後目前是由 Cloud Native Computing Foundation 在管理。

Kubernetes 維運與資源管理的挑戰

然而,強大功能背後也須付出一定的成本,其最大的成本便是背後維運複雜的架構,企業若要維運一套 Production 等級的 Kubernetes 架構,人員不僅需要具備 Container, Kubernetes 相關的背景知識,同時也需在具備網管能力之情況下熟悉企業的網路架構。

第二個使用上的挑戰在於如何妥當的做資源用量的設置,這不僅僅是 Kubernetes 的難題,包括在大數據平台 Hadoop 也都會遇到類似的問題例如,該分配多少計算資源給 Kubernetes Cluster?如果機器故障需要維修,又或是需要新增計算資源 (Node),我應該怎麼管理我的 Downtime?我該怎麼分配人力來做新機器的安裝,網路設置?

總結來說,企業內部如果對 Kubernetes 技術經驗較少,又或是在維運人力資源較有限之情況下,使用與管理 Kubernetes 實屬不易。

所以,如果能夠有一個維運相對容易、資源配置彈性大、資安有保障的 Kubernetes 平台,那該有多好...

簡介 Google Kubernetes Engine (GKE)

接著要介紹的重點-Google Kubernetes Engine,又稱 GKE,我想就是以上挑戰的解答。GKE 是一套由 Google Cloud 提供的雲代管 Kubernetes 服務,幫助你大幅簡化 Kubernetes 的管理與維運,如同其他雲端的資源一般,GKE 得益於雲端資源能有彈性的部署與新增資源,讓 Kubernetes 在 Workload 的設計與使用上更有彈性。

GKE 技術概覽

GKE 不僅僅作為雲端代管的 Kubernetes,得益於與雲端整合,GKE 還擁有以下這些更進階與便利的功能,包括:

  • 與 GCP 的 Load Balancer 整合幫助你分導流量
  • Node Pool 概念的引進,讓你可以部署並同時管理不同性能的機器,為不同 Use Case 的 Workload 準備其最適合的機器
  • Autoscaling Node 的能力,讓 Kubernetes Cluster 在計算資源部署上更有彈性
  • Auto-upgrading Node 能力,幫助你在有新版本的 Control Plane 時對 Node 同步自動進行漸進升級,降低維運成本提升安全性
  • Node auto-repair 能力,保持 Node 健康以及可用
  • Logging & Monitoring 與 GCP 整合,提供一個 Centralized 且功能豐富的監控環境

GKE 具備彈性架構幫助提升用戶服務可用性

在 GCP 上,我們可以將 Infrastructure 部署在不同 Zone 上來提升服務的可用性(Availability), GKE 也提供了多種的架構配置選擇,讓你在不同的情境下做預算與 Availability 之間的權衡。

在設定Standard GKE (Autopilot GKE 不在此討論範疇內)時,你會有 Zonal 與 Regional 兩種 Location type 可以選擇,無論使用哪一種,你都可以將 Worker Node 部署在多個 Zone 中,如果需要提升 GKE Workload 的 Availability,可以在設定 GKE 時勾選多個 Zone 來將 Worker Node 部署到多個 Zone 。

Zonal 與 Regional 之設定用於決定 Control Plane 的 Availability,在 Zonal 的設定下, Control Plane 僅會部署在一個 Zone 當中,當 Control Plane 所在的 Zone 發生 Zone Outage 或是 Control Plane 更新時,你的 Workload 仍然會繼續運行,但是你會無法對 Node, Workload 做設定,直到 Control Plane 恢復 Available 狀態;而在 Regional 的設定下,由於 GKE 會在多個 Zone 當中部署 Control Plane,在正常運行狀態下即便有單一 Zone Outage 又或是 Control Plane 更新的情境,Control Plane 還是可以被訪問的。Regional Cluster 提升了 Control Plane 的 Availability,Google 也建議針對 Production Workload 可以使用 Regional Cluster 藉以提升整體的 Availability。

圖二:如果需要提升 GKE Workload 的Availability,可以在設定 GKE 時勾選多個 Zone 來將 Worker Node 部署到多個 Zone 。
icon/enlarge

GKE Node Pool 設計提供群組化 Computing 選擇

GKE 除了在網路設計上不同於普通的 Kubernetes,在 Node 的配置上也提供了更豐富的選擇。GKE 使用的是 GCP 的 Virtual Machine 服務 Compute Engine 作為其 Node 基底,從 Node 性能層面來說,GKE 得益於 Compute Engine 多種的機器規格選擇,可以很彈性的選擇要部署小型或是高效能的 Cluster。然而,如果僅能夠選擇機器規格,那僅比普通 Kubernetes 環境多一些選擇罷了,GKE 除了 Node 可以選擇機器規格外,還設計了 Node Pool 的功能,讓你可以在一個 Cluster 當中同時部署多種不同機器規格的 Node。

Node Pool 是將一群擁有相同機器規格的 Node 組合在一起的功能,你可以在 GKE 上面建立一到多個 Node Pool(左圖),每個 Node Pool 可以擁有自己的 CPU 平台、Machine Type、Local SSDs、Spot VM 等等豐富的配置,讓你的 Workload 都可以獲得最妥適的資源配置。GKE Standard 預設會給予一個 default-pool 讓用戶設定(圖三),用戶可以透過設定選單上的 ADD NODE POOL 按鈕來新增新的 Node Pool(圖四)。

Node Pool 的功能在你的 Workload 有不同效能需求時尤其實用,例如遇到高運算需求又或是需要更多 Local Disk Space 之情境,Node Pool 就提供一層額外的彈性讓你可以更隨心所欲的在 Kubernetes 上部署 Workload。

圖三:GKE Node Pool
icon/enlarge

GKE 與雲端資源的整合與運用

GKE 作為雲端服務的一環,與 GCP 的網路以及 Infra 等多方面等技術都有非常良好的結合。以網路來說,GKE 可以透過 Ingress 物件幫你建立 Google Cloud 的 HTTP/HTTPS Load Balancer 達成 Layer 7 Path-based 的 Load Balancing,除此之外,你更可以透過進階設定整合 Load Balancer 的 Cloud CDN、Cloud Armor 等功能來進一步提升使用者體驗與保護資訊安全。

圖五:GKE 可以透過 Ingress 物件幫你建立 Google Cloud 的 HTTP/HTTPS Load Balancer 。
icon/enlarge

在儲存方面,GKE 與 GCP 的 Persistent Disk 技術整合提供磁碟儲存服務。 Persistent Disk 是 Google Cloud 的 Block Storage 產品,提供 VM、GKE 等不同服務作為其儲存資源的主要來源。 GKE 透過 Persistent Volume Claim、Storage Class 等物件幫助使用者動態的建立與分配 Persistent Disk 給相對應的 Workload 使用,同時得益於 Persistent Disk 多種的磁碟類別,使用者能自由的選擇想要使用的磁碟性能(EX: 普通 HDD, SSD...),極大化用戶使用 Kubernetes 的彈性。

除了 Load Balancing 與儲存之外,GKE 還與 Google Cloud 的 Logging, Monitoring 等維運系列服務做整合,隨開即用的特性,讓你在第一時間掌握服務與 Cluster 的運行狀態。

圖六:GKE 與 Google Cloud 的 Logging、Monitoring 等維運系列服務做整合。
icon/enlarge

GKE 運算資源擴充解決方案 - Cluster Autoscaler

文章前述有提到,在地端環境管理 Kubernetes 的成本是相對高的,除了要維持機器正常運行,另一個挑戰便是要如何保持與提升部署服務的效能並同時衡量成本預算。以電商來說,倘若在週年活動或是大型活動發生時,維運人員會需要預期網站與服務的運載容量並且準備好相應的機器備用。但在活動結束後,這些為了活動準備的高效能機器又會有大量時間閒置無人使用,其維運、機器的折舊對企業來說都是額外且浪費的成本。

GKE Cluster Autoscaler 是 GKE 對運算資源擴充的一種解決方案,GKE 會根據用戶提出的 Workload  需求自動調整機器的數量。 Cluster Autoscaler 是以 Node Pool 為單位進行開啟,用戶僅需要設定 Autoscaling 的最高與最低機器數量,剩下的會由 Google 幫你搞定。在一定的情況下,有些 Node Pool 甚至可以關閉至 0 台機器,幫企業節省成本。

如圖所示,在 Node Pool 的設定中有一個 Enable Cluster Autoscaler 選項,使用者可以針對需要的 Node Pool 勾選開啟此功能,在開啟後下方也會提供的兩個欄位讓你做此 Node Pool 擴增與縮減機器的設定。

圖七:在 Node Pool 的設定中有一個「Enable Cluster Autoscaler」選項,使用者可以針對需要的 Node Pool 勾選開啟此功能
icon/enlarge

簡化再簡化,更容易配置使用的 GKE Cluster:GKE Autopilot

Kubernetes 的配置複雜,從前述你可以略窺一二。在架構 Standard 版本的 GKE 時,我們已經減低很多部署機器與安裝元件的工作,但用戶仍需要對 Cluster 機器規格、Instance 數量、 Node Pool、是否使用 Autoscaling 等層面做設計與考量,這需要用戶擁有較深厚的 Kubernetes 概念,才有辦法做到妥適的調教。

如果企業今天希望能夠在降低 Kubernetes 的維運成本的同時兼顧效能優化,GKE Autopilot 是你可以參考的一個選擇。GKE Autopilot 版本是由具備高可用性(HA)的 Control Plane 以及多組的 Worker node 組成。與 GKE Standard 一樣,你仍然可以透過 Kubectl 配合著 YAML 配置文件來部署你的服務, 但是他幫你省去中間很多效能優化的作業,比方說管理 Worker Node、Scaling、Security 的設置等。

Autopilot 的設定在官方文章上提到已為 Production Ready 的優化設置,並且在 Cluster 配置、Workload 設置、Security 等層面都遵循著 GKE 本身的 Best Practice 設計與建議。在 Autopilot 模式底下,GKE 會根據 Pod 的規格需求自動對 GKE Cluster 進行 Scaling,你不再需要自行管理與配置 Worker Node 以及規劃 Node Pool。換句話說,你可以更專注在服務開發與設計上。

圖八:GKE Autopilot 架構圖
icon/enlarge

結論

GKE 在既有的 Kubernetes 架構下,結合雲端特性的優勢與 Google Cloud 本身優秀的產品,打造出一套更多元、強大的 Kubernetes 服務,GKE 在性能(Node 機器規格)、配置方式(Standard, Autopilot)、架構設計(Regional, Zonal)等面向上皆有良好的彈性,讓每位用戶可以基於自己的需求打造出屬於自己的 Kubernetes Cluster。有興趣的朋友,可以到 Google Cloud 上試用 GKE,如有任何問題,也歡迎聯繫我們—Google Cloud 菁英合作夥伴 CloudMile ,讓我們可以為您的企業提供專業的上雲與雲端服務架構建議。

文章參考:

https://cloud.google.com/kubernetes-engine/docs/concepts/types-of-clusters

https://cloud.google.com/kubernetes-engine/docs/concepts/node-pools

https://cloud.google.com/kubernetes-engine/docs/concepts/ingress

https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-overview

https://cloud.google.com/kubernetes-engine/docs/concepts/choose-cluster-mode

https://cloud.google.com/kubernetes-engine/docs/concepts/regional-clusters

訂閱 CloudMile 電子報

所有 CloudMile 最新消息、產品動態、活動資訊和特別優惠,立即掌握。