從冰山一角往下看#

這個系列只是 Kubernetes 世界的入口。整個容器化生態的「冰山」非常深,本系列覆蓋的內容大概只在最上層的兩、三層之間:核心概念、常用資源、部署策略、Volume、資源管理、AutoScaling、安全。再往下還有許多值得深入的主題,本篇用三個方向把後續的學習路線收個尾:

  • Templating:用 Helm 管理多環境設定。
  • Service Mesh:用 Istio 把服務之間的溝通標準化。
  • Monitoring:用 Grafana 與 Prometheus 觀察叢集狀態。

這三條路線都是容器化與微服務時代下的自然延伸。

Helm:Kubernetes 設定的模板引擎#

當服務分為 production、staging、development 等多個環境時,YAML 設定常常只差幾個欄位(例如 label、image tag、replicas),如果每個環境都複製一份完整 YAML,維護成本會指數成長。

Helm 是 Kubernetes 設定檔的模板引擎,把可變欄位抽成變數、其餘共用部分維持一份原始檔,再用 Values 檔分別餵給各環境。

對照一下原本的設定:

apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep
  labels:
    environment: production
spec:
  containers:
    - name: busybox
      image: busybox
      args:
        - sleep
        - "1000000"

Helm 化之後:

apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep
  labels:
    environment: { { .Values.environment } }
spec:
  containers:
    - name: busybox
      image: busybox
      args:
        - sleep
        - "1000000"

多個環境共用同一份 template,只需要分別維護各自的 Values 檔。Helm 在實務上也常用來打包第三方服務(例如 Prometheus、Grafana)成「Chart」,再透過幾個指令快速部署。

Istio:把服務之間的溝通拉平#

當應用變成微服務之後,「服務之間怎麼互打」就會變成一個獨立的工程問題:路由、重試、限流、熔斷、TLS、追蹤、授權……如果每個服務各寫各的,很快就會失控。

Service Mesh 的想法是把這些網路層的能力抽出應用之外,由獨立的 sidecar 代理接管。Istio 是其中最具代表性的實作,提供:

  • 統一的服務治理介面。
  • 細粒度的 L7 流量管理(例如 header-based routing、流量切分)。
  • 負載均衡(Load Balancing)。
  • 鏈路追蹤與日誌收集。
  • 預設整合的可觀測性插件。

Service Mesh 不是只有 Istio,Linkerd、Consul 等也是常見選項。共同特色是「把網路能力下沉到平台」這個思路。

Grafana 與 Prometheus:可觀測性的入口#

當服務數量與互相呼叫的鏈路變複雜,光看單一容器的日誌已經難以排查問題。Logging、Metrics、Tracing 三件事都需要被設計進系統,而 Grafana 與 Prometheus 是市場上最成熟的監控組合:

  • Prometheus:拉取式(pull-based)的時序資料庫與指標收集器,適合監控容器化環境的資源用量與自訂業務指標。
  • Grafana:通用的可視化儀表板,能把 Prometheus、Loki、Elasticsearch 等多種資料源組合在同一個頁面上。

得益於前面提到的 Istio 已經把流量資訊集中化,Istio 也預設整合了 Grafana 與 Prometheus 插件,可以大幅降低踏進 Monitoring 領域的門檻。

還可以再延伸的方向#

除了上述三條主要路線,這些主題也都是值得進一步研究的:

  • Operator 與 Custom Resource Definition(CRD):把領域邏輯包裝成叢集原生資源。
  • ArgoCD 與 GitOps:把部署狀態收斂到 Git,靠 controller 持續對齊。
  • 安全強化:Pod Security Admission、Network Policy、SealedSecrets、外部 Secret 管理。
  • 多叢集治理:Cluster API、Karmada、Service Mesh 跨叢集連線。

每一個方向都足以再寫一個鐵人賽系列。

小結#

本系列只覆蓋了 Kubernetes 的基本面,後續的方向可以歸納成「設定模板化(Helm)、服務溝通標準化(Service Mesh / Istio)、運維可觀測化(Monitoring)」三條主線,再加上 GitOps、Operator、安全強化等延伸主題。挑一條跟自己工作最貼近的路線往下走,比同時鋪開多條更容易累積進度。

原文出處#

  • GitHub:https://github.com/MikeHsu0618/2022-ithelp/tree/main/Day30
  • iThome:https://ithelp.ithome.com.tw/articles/10300813