K8S之StatefulSet有狀態(tài)服務(wù)詳解
一、概念
1.1.無狀態(tài)和有狀態(tài)的區(qū)別
主要從網(wǎng)絡(luò)和存儲(chǔ)來對(duì)比
無狀態(tài)不考慮存儲(chǔ)和網(wǎng)絡(luò),可以任意漂移,每個(gè)副本是一樣的,如Nginx
有狀態(tài)應(yīng)用需要考慮存儲(chǔ)和網(wǎng)絡(luò),每個(gè)副本是不對(duì)等的,具有唯一的ID,如etcd、mysql
1.2.StatefulSet的特點(diǎn)
專為部署有狀態(tài)服務(wù)而生
解決Pod獨(dú)立生命周期,保持Pod啟動(dòng)順序和唯一性
應(yīng)用場景:分布式應(yīng)用、數(shù)據(jù)庫集群
穩(wěn)定,唯一的網(wǎng)絡(luò)標(biāo)識(shí)符,持久存儲(chǔ)
有序,優(yōu)雅的部署和擴(kuò)展、刪除、終止
有序,滾動(dòng)更新
1.3.Headless Service
也是一種Service,但不需要Cluster IP,需要設(shè)置clusterIP: None
1.4.serviceName
告訴StatefulSet要使用serviceName指定的headless service來保證Pod的身份
1.5.穩(wěn)定的存儲(chǔ)
存儲(chǔ)卷使用volumeClaimTemplates創(chuàng)建,稱為卷申請(qǐng)模板;當(dāng)創(chuàng)建一個(gè)PV時(shí),同樣會(huì)為每個(gè)Pod分配并且創(chuàng)建一個(gè)編號(hào)PVC
二、實(shí)例
拿Nginx測試,主要演示yaml的寫法,實(shí)際應(yīng)用中需用有狀態(tài)服務(wù)
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
設(shè)置了3個(gè)副本,從0開始標(biāo)號(hào),創(chuàng)建3個(gè)副本

自動(dòng)創(chuàng)建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

啟動(dòng)一個(gè)busybox的Pod
kubectl run test -it --rm --image=busybox -- sh nslookup headless-web
域名解析結(jié)果

在容器里可以通過<Pod Name>.<Headless Service>訪問
curl web-0.headless-web

參考視頻:https://ke.qq.com/user/index/index.html#/plan/cid=1709963&term_id=102815140
到此這篇關(guān)于K8S之StatefulSet有狀態(tài)服務(wù)詳解的文章就介紹到這了,更多相關(guān)K8S StatefulSet有狀態(tài)服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Kubernetes存儲(chǔ)系統(tǒng)數(shù)據(jù)持久化管理詳解
這篇文章主要為大家介紹了Kubernetes存儲(chǔ)系統(tǒng)數(shù)據(jù)持久化管理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
K8S?prometheus?operator監(jiān)控工作原理介紹
這篇文章主要為大家介紹了K8S?prometheus?operator監(jiān)控工作原理介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
K8S部署Kafka界面管理工具(kafkamanager)方法詳解
這篇文章主要介紹了K8S部署Kafka界面管理工具(kafkamanager)方法詳解,需要的朋友可以參考下2022-01-01
Kubernetes應(yīng)用配置管理創(chuàng)建使用詳解
這篇文章主要為大家介紹了Kubernetes應(yīng)用配置管理創(chuàng)建使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
RFO SIG之openEuler AWS AMI 制作詳解
這篇文章主要為大家介紹了RFO SIG之openEuler AWS AMI 制作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
k8s service使用詳解(云原生kubernetes)
這篇文章主要介紹了k8s service使用詳解(云原生kubernetes),一個(gè)Service可以看作一組提供相同服務(wù)的Pod的對(duì)外訪問接口,作用于哪些Pod是通過標(biāo)簽選擇器來定義的 ,Service是一個(gè)概念,主要作用的是節(jié)點(diǎn)上的kube-proxy服務(wù)進(jìn)程,本文結(jié)合示例代碼詳解,需要的朋友參考下2023-02-02
Rainbond云原生部署SpringCloud應(yīng)用架構(gòu)實(shí)踐
這篇文章主要為大家介紹了Rainbond云原生部署SpringCloud應(yīng)用架構(gòu)實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04

