部署、擴縮與監控 Stateful 應用程式

Kubernetes 入門

Frank Heilmann

Platform Architect and Freelance Instructor

無狀態應用複習

  • 快速複習:無狀態應用對應 Kubernetes 中的「Deployments」
  • 當應用的每個 Pod 執行完全相同的工作時使用
  • 有狀態應用需要一組彼此相關的 Pods,但可處理不同工作與不同資料
  • 先前學到的 Deployments 概念,多數也能套用到 StatefulSets
Kubernetes 入門

有狀態應用程式

  • 有狀態應用:

    • 一般概念
    • 很適合 Kubernetes
    • 會保存狀態
  • 當中斷或停止時,新的副本(Pod) 可讀取已保存的狀態並從該狀態繼續運作

  • 範例:
    • 資料庫後端(例如 PostgreSQL)透過 3 個 Pods 提供資料給前端。
    • 每次用任一 Pod 更新資料時,該資料都需要持久化
    • 當某個 Pod 終止時,會建立新的 Pod,且必須接續已保存的狀態
Kubernetes 入門

Kubernetes StatefulSets

  • 有狀態應用對應為「Kubernetes StatefulSets」
  • 範例 Manifest 的區塊與以下相同:
    • apiVersionkindmetadataspectemplate
  • replicas 定義 StatefulSet 中的 Pod 數量
  • selector 之後再說明
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: <deployment name>
  labels:
    app: <a label for the application>
spec:
  replicas: <number of initial replicas>
  selector:
    matchLabels:
      app: <matches the label above>
  template:
    metadata:
      labels:
        app: <label to be given to each pod>
    spec:
      containers:
      - name: <container name>
        image: <the image to be used>
        ports:
        - containerPort: <ports for networking>
Kubernetes 入門

部署到 Kubernetes 叢集

  • 佈署 StatefulSetDeployments 類似: kubectl apply -f <manifest.yml>
  • 但建立過程與 Deployment 不同:
    • Pods 會依序建立,而非像 Deployment 一次全部建立
    • Pods 有可預期的名稱,如 pod-0pod-1pod-2
  • 也就是說:相較於 Deployment 的 Pods, StatefulSet 的 Pods 具有身分與狀態
  • 因此,StatefulSet 中不同身分的 Pods 可在應用中負責不同角色
Kubernetes 入門

擴縮 StatefulSet

  • 與 Deployments 類似,StatefulSets 可向上或向下擴縮:
    • 修改 Manifest 中的 replicas 並重新套用
    • 或使用指令 kubectl scale statefulsets ...
  • 向上擴縮時,新的 Pods 會依序建立:
    • 例如,pod-0pod-1pod-2,接著新增 pod-3, 再加入 pod-4
  • 向下擴縮時,最後建立的 Pods 會先刪除:
    • 例如,先刪 pod-4,再刪 pod-3
Kubernetes 入門

監控 StatefulSet

  • 與 Deployments 相同,監控可因應各種問題,如中斷、負載尖峰、 或儲存不足
  • 這裡使用 kubectl 進行基本監控
  • 常見指令:與 Deployments 相同
  • 範例 1kubectl get pods 會列出 StatefulSet 中所有 pods 與其目前狀態
  • 範例 2kubectl get services 會列出 StatefulSet 可能使用的所有 services
Kubernetes 入門

一起來練習吧!

Kubernetes 入門

Preparing Video For Download...