kubernetes實踐之四十二:StatefulSet
一: 前言
1.使用StatefulSet的場景
a.穩定、唯一的網路標識
b.穩定、持久的儲存
c.按照順序、優雅的部署和擴容
d.按照順序、優雅的刪除和終止
e.按照順序、自動滾動更新
2.StatefulSet的限制
a.在Kubernetes 1.9版本之前是beta版本,在Kubernetes 1.5版本之前是不提供的。
b.Pod儲存由PersistentVolume(storage類或者管理員預先建立)提供。
c.刪除或者縮容StatefulSet不會刪除與StatefulSet關聯的資料卷,這樣能夠保證資料的安全性。
d.當前的StatefulSets需要一個Headless服務來為Pod提供網路標識,此Headless服務需要透過手工建立。
二:儲存供應模式
1.靜態資源供應模式,透過PV和PVC完成繫結。
2.動態資源供應模式,透過StorageClass和PVC完成資源動態繫結
三: StatefulSet Nginx 應用例項
1. 建立三個pv (name分別為glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)
2.建立三個pvc (name分別為glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)
3.建立Headless服務
4.建立StatefulSet
四:備註
1.StatfuleSet Pod擁有一個唯一的身份標識,它由順序、穩定的網路標識和穩定的儲存所組成。此身份標識一直跟隨著Pod,不過它被排程到那個Node上。
2.對於擁有N個副本集的StatefulSet,在StatefulSet中的每一個Pod都會被指派一個整型的序數,此序數在0和N之間,在整個集合中是唯一的。
3.在StatefulSet中,每一個Pod的主機名稱都由StatefulSet的名稱和序數所組成。Pod的主機名稱的格式:$(statefulset name)-$(ordinal)。如果建立了三個Pod,這他們的主機名稱為web-0,web-1,web-2。StatefulSet能夠使用Headless服務來控制Pod的域。Service管理的域的格式為:$(service name).$(namespace).svc.cluster.local,cluster.local是叢集域。對於每一個被建立的Pod,它將得到一個DNS子域,格式為: $(podname).$(governing service domain),這裡的管理服務在StatefulSet中,透過serviceName設定。
1.使用StatefulSet的場景
a.穩定、唯一的網路標識
b.穩定、持久的儲存
c.按照順序、優雅的部署和擴容
d.按照順序、優雅的刪除和終止
e.按照順序、自動滾動更新
2.StatefulSet的限制
a.在Kubernetes 1.9版本之前是beta版本,在Kubernetes 1.5版本之前是不提供的。
b.Pod儲存由PersistentVolume(storage類或者管理員預先建立)提供。
c.刪除或者縮容StatefulSet不會刪除與StatefulSet關聯的資料卷,這樣能夠保證資料的安全性。
d.當前的StatefulSets需要一個Headless服務來為Pod提供網路標識,此Headless服務需要透過手工建立。
二:儲存供應模式
1.靜態資源供應模式,透過PV和PVC完成繫結。
2.動態資源供應模式,透過StorageClass和PVC完成資源動態繫結
三: StatefulSet Nginx 應用例項
1. 建立三個pv (name分別為glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: PersistentVolume
-
metadata:
-
name: glusterfs-nginx-0
-
namespace: default
-
spec:
-
capacity:
-
storage: 1Gi
-
accessModes:
-
- ReadWriteOnce
-
glusterfs:
-
endpoints: "glusterfs-cluster"
-
path: "k8s-volume"
- readOnly: false
2.建立三個pvc (name分別為glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)
點選(此處)摺疊或開啟
-
kind: PersistentVolumeClaim
-
apiVersion: v1
-
metadata:
-
name: glusterfs-nginx-0
-
namespace: default
-
spec:
-
accessModes:
-
- ReadWriteOnce
-
resources:
-
requests:
- storage: 1Gi
點選(此處)摺疊或開啟
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: nginx
-
labels:
-
name: nginx
-
spec:
-
ports:
-
- port: 80
-
targetPort: 80
-
clusterIP: None
-
selector:
- role: mongo
點選(此處)摺疊或開啟
-
apiVersion: apps/v1beta1
-
kind: StatefulSet
-
metadata:
-
name: nginx
-
spec:
-
serviceName: "nginx"
-
replicas: 3
-
template:
-
metadata:
-
labels:
-
role: nginx
-
spec:
-
terminationGracePeriodSeconds: 10
-
containers:
-
- name: nginx
-
image: nginx
-
ports:
-
- containerPort: 80
-
volumeMounts:
-
- name: glusterfs
-
mountPath: /usr/share/nginx/html
-
volumeClaimTemplates:
-
- metadata:
-
name: glusterfs
-
spec:
-
accessModes: [ "ReadWriteOnce" ]
-
resources:
-
requests:
- storage: 1Gi
1.StatfuleSet Pod擁有一個唯一的身份標識,它由順序、穩定的網路標識和穩定的儲存所組成。此身份標識一直跟隨著Pod,不過它被排程到那個Node上。
2.對於擁有N個副本集的StatefulSet,在StatefulSet中的每一個Pod都會被指派一個整型的序數,此序數在0和N之間,在整個集合中是唯一的。
3.在StatefulSet中,每一個Pod的主機名稱都由StatefulSet的名稱和序數所組成。Pod的主機名稱的格式:$(statefulset name)-$(ordinal)。如果建立了三個Pod,這他們的主機名稱為web-0,web-1,web-2。StatefulSet能夠使用Headless服務來控制Pod的域。Service管理的域的格式為:$(service name).$(namespace).svc.cluster.local,cluster.local是叢集域。對於每一個被建立的Pod,它將得到一個DNS子域,格式為: $(podname).$(governing service domain),這裡的管理服務在StatefulSet中,透過serviceName設定。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2154621/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Kubernetes 實戰——有狀態應用(StatefulSet)
- kubernetes StatefulSet 中 serviceName 作用
- kubernetes實踐之十一:EFK
- 圖解kubernetes控制器StatefulSet核心實現原理圖解
- 圖解 kubernetes 控制器 StatefulSet 核心實現原理圖解
- kubernetes實踐之五十二:Helm
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之十七:架構架構
- kubernetes實踐之十九:API概述API
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- kubernetes實踐之五十九:NetworkPolicy
- kubernetes實踐之六十四:CoreDNSDNS
- kubernetes實踐之九:kube-dnsDNS
- kubernetes實踐之五:網路模型模型
- kubernetes實踐之五十六:雲原生
- kubernetes生產實踐之redis-clusterRedis
- GitOps實踐之kubernetes安裝argocdGitGo
- kubernetes實踐之六十二:Secret 使用
- kubernetes實踐之六十三:使用技巧
- kubernetes實踐之六十五:Service Mesh
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- kubernetes實踐之十二:部署Traefik Ingress
- kubernetes實踐之十四:Service Account與Secret
- kubernetes使用StatefulSet部署mysql一主多從MySql
- 在 Kubernetes 中基於 StatefulSet 部署 MySQL(上)MySql
- kubernetes實踐之七十三:Istio之配置請求路由路由
- kubernetes實踐之七十二:Istio之策略與遙測
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- K8S有狀態服務-StatefulSet使用最佳實踐K8S
- kubernetes實踐之七十:Istio之流量管理(上)
- kubernetes實踐之六十七:Istio介紹
- kubernetes實踐之四十九:Scheduler原理分析
- kubernetes實踐之六:CFSSL構建本地CA
- kubernetes實踐之五:Node節點安裝
- kubernetes實踐之五十四:垃圾回收機制
- kubernetes實踐之十六:RBAC 角色訪問控制
- kubernetes實踐之四十三: Service詳解