您好,登錄后才能下訂單哦!
這篇文章主要介紹“K8S之StatefulSet有狀態服務實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“K8S之StatefulSet有狀態服務實例分析”文章能幫助大家解決問題。
1.1.無狀態和有狀態的區別
主要從網絡和存儲來對比
無狀態不考慮存儲和網絡,可以任意漂移,每個副本是一樣的,如Nginx
有狀態應用需要考慮存儲和網絡,每個副本是不對等的,具有唯一的ID,如etcd、mysql
1.2.StatefulSet的特點
專為部署有狀態服務而生
解決Pod獨立生命周期,保持Pod啟動順序和唯一性
應用場景:分布式應用、數據庫集群
穩定,唯一的網絡標識符,持久存儲
有序,優雅的部署和擴展、刪除、終止
有序,滾動更新
1.3.Headless Service
也是一種Service,但不需要Cluster IP,需要設置clusterIP: None
1.4.serviceName
告訴StatefulSet要使用serviceName指定的headless service來保證Pod的身份
1.5.穩定的存儲
存儲卷使用volumeClaimTemplates創建,稱為卷申請模板;當創建一個PV時,同樣會為每個Pod分配并且創建一個編號PVC
拿Nginx測試,主要演示yaml的寫法,實際應用中需用有狀態服務
2.1.statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: labels: app: web name: web spec: replicas: 3 selector: matchLabels: app: web serviceName: "headless-web" template: metadata: labels: app: web spec: containers: - image: nginx imagePullPolicy: IfNotPresent name: web ports: - containerPort: 8080 volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www spec: storageClassName: "managed-nfs-storage" accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi
設置了3個副本,從0開始標號,創建3個副本
自動創建PV和PVC
2.2.headless-svc.yaml
apiVersion: v1 kind: Service metadata: name: headless-web spec: clusterIP: None ports: - port: 80 protocol: TCP selector: app: web
CLUSTER-IP為None
啟動一個busybox的Pod
kubectl run test -it --rm --image=busybox -- sh nslookup headless-web
域名解析結果
在容器里可以通過<Pod Name>.<Headless Service>訪問
curl web-0.headless-web
關于“K8S之StatefulSet有狀態服務實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。