FuFu KK8s
  • K~K8s index
  • Kubernetes 的基礎世界
  • Why container is not Docker
  • Startup Local Kubernetes via Minikube
  • K8s Master node Component 介紹
  • NameSpace、Deployments 概念說明
  • 常見的 kubectl 指令
  • 回顧第一次部署,淺談 Pod、Deployment
  • 回顧第一次部署,淺談 Service
  • 今日來介紹 Pod 靜態文件~ Manifest
  • Pod 的健康檢查方式
  • Pod 的健康檢查方式 Part-2
  • Pod 的資源請求、上限
  • Pod 資料,如何持久化存放、讀取
  • Pod 副本管理~ 描述 ReplicaSet 控制器
  • Pod 副本管理~ 實作篇
  • 淺談 DaemonSet,及相對 ReplicaSet 的差異
  • 來說說 Label
  • 從 Label 再回頭談 Service
  • Service 續集之 Cluster IP、Kube-proxy、LoadBalancer
  • 從 Service 發現 K8s 網路層全貌
  • Container Data Persistent
  • 發現、初談 StatefulSet
  • 再談 StatefulSet
  • 認識 ConfigMap
  • 第一次使用 Play with Kubernetes
  • 手工 Installing kubeadm
  • 手工 Installing CRI-O、kubeadm init
  • 繼上篇,排查 kubelet、kubeadm init 問題
  • Installing a pod network add-on
  • K8s add Nodes(join)
  • 驗證自建的 K8s
  • 筆記
    • kubectl get 筆記
    • kubectl 部署筆記
    • kubectl describe nodes
  • 實務記憶篇
    • 整理下記憶
    • 有哪些 Kubernetes 雲端服務
    • 如何從本機連線至 GKE Pod
    • GCP Memorystore 服務介紹
    • 如何連線至 GCP Memorystore
    • GCP Cloud SQL 服務介紹
    • 如何連線至 Cloud SQL
    • 關於 GCP VPC 網路
    • HELM 工具用途
    • 臨時題目:查修 prometheus
    • 繼續離題:繼續查修Prometheus
    • 臨時題目:限定 Pod 訪問外網時,固定 public ip
    • K8s 監控數據來源 Prometheus
    • 監控要告警啊 AlertManager
    • 監控要有圖表啊 Grafana
    • Grafana收集Kubernetes系統資訊
    • 系統 Log 資料
    • 系統 Log 資料收集至 EFK
    • 關於 EFK 角色
    • 系統 Log 資料 - fluent-bit 串接
    • 開放網站對外存取
    • 網站提供 https 安全連線服務 - 憑證管理
    • 網站提供 https 安全連線服務 - 憑證與Ingress整合
    • 網站提供 https 安全連線服務 - Istio 範例
    • 需要額外的 非http 連線
    • Istio 初略介紹
    • Istio 整合 Certmanager DNS01
    • 番外篇:Istio 如何限制訪問來源
    • 番外篇:如何擴充 PV PVC storage size
    • 番外篇:如何利用 Binlog 還原資料庫
  • Helm 實務學習心得
    • Helm requirements 見解
    • 同環境,一次部署多個相同App
  • Python
    • 11-1 Firebase 資料庫簡介
Powered by GitBook
On this page
  • ordinal index
  • Stable Network ID
  • Domain
  • Stable Storage
  • 補充說明:什麼是 StorageClass

再談 StatefulSet

上一篇提到 StatefulSet 是與 Deployment 不同之處,今日要針對下面兩個特點,特別獨立出此篇來敘述。

  • 穩定的唯一性網路標誌 Stable, unique network identifiers.

  • 穩定的持久化儲存服務 Stable, persistent storage.

StatefulSet Pods 具有一組唯一識別的 ordinal,穩定的網路狀態與儲存服務, 無需在意 pod 是在哪些 K8s node 上運行。

ordinal index

  • 對於有 N replicas 的 StatefulSet,此識別序號必然是唯一性,有其重要性。

  • 每個 StatefulSet Pod 皆賦予一組整數序號,從 0 開始至 N-1。

Stable Network ID

  • 每個 StatefulSet Pod 的 name 作為前綴加上 ordinal,建構出 hostname = $(statefulset name)-$(ordinal)

  • 上一篇 StatefulSet 範例中,將創建出三個名稱是 web 的 Pod,其 hostname = web-0、web-1、web-2

Domain

  • StatefulSet 可以透過 Headless Service 來決定旗下的 Pod Domain。

  • 此 Domain 的格式:$(service name).$(namespace).svc.cluster.local ; 其中 “cluster.local” 是 Cluster Domain。

  • 每個 Pod 建立時,將取得一個 DNS subdomain 格式:

    • $(podname).$(governing service domain) ;

    • 其中 governing service 取之於 StatefulSet yaml 定義中的 serviceName 欄位。

官網解說的,上面敘述的方法使我自己也好複雜,需要心靜的腦筋消化~ 下面有簡單的解說方式~

StatefulSet 中每個 Pod DNS Domain 格式如下:

$(statefulset name)-$(ordinal).$(service name).$(namespace).svc.cluster.local

$(statefulset name) 是 StatefulSet 的名字。
-$(ordinal) 是 StatefulSet Pod 賦予的一組整數序號,從 0 開始至 N-1。
$(service name) 是 Headless Service 的名字。
$(namespace) 是服務所在的 namespace,Headless Service 和 StatefulSet 需在相同的 namespace。
.cluster.local 是 Cluster Domain。

Stable Storage

  • 在K8s StatefulSet 中,透過 VolumeClaimTemplate 所定義的規格建立出 PV。

  • 當相關的 Pod 重新被調度至其他 K8s node 上,則會掛載與 PersistentVolume Claim 關聯的 PV。

  • 需要注意:

    • 依此 PersistentVolume Claim 關聯的 PV 在 Pods or StatefulSet 刪除時,不會刪除 PV 內資料,需要手動移除。

補充說明:什麼是 StorageClass

  • StorageClass 透過 PV 的類別(等級)名稱,來定義 PV 的類別屬性,方便管理者去分門別類儲存屬性,例如 High/Slow IO

  • 建立 StorageClass 時,管理員設置名稱與相關參數,一但建立後不可再對其進行更新。

  • 一個有指定StorageClassName的 PV,只許被相同StorageClassName的 PVC 綁定請求。

  • 一個沒指定StorageClassName的 PV,只有無指定StorageClassName的 PVC 綁定請求。

K8s API server 上的 DefaultStorageClass 是否啟用,攸關到 StorageClass default 的變因。

  • 如啟用,可以設定 default StorageClassName,當 PVC 中沒有設置StorageClassName,則會套用 default StorageClassName。

  • 如啟用,但沒設定 defaultStorageClassName,當 PVC 創建時 K8s 會回應。

  • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  • 如沒啟用,則就沒有 StorageClass 概念;

  • 在此情況,没有storageClassName的 PVC 與 「storageClassName: ""的 PVC 」 的處理方式相同。

Previous發現、初談 StatefulSetNext認識 ConfigMap

Last updated 6 years ago

參考書籍\文章出處: Kubernetes 建置與執行 書中 P.180~181 內容。 ​

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
https://jimmysong.io/kubernetes-handbook/concepts/statefulset.html
https://feisky.gitbooks.io/kubernetes/concepts/statefulset.html