欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > K8S学习之基础二十六:k8s的StatefulSet控制器

K8S学习之基础二十六:k8s的StatefulSet控制器

2025/3/16 7:44:03 来源:https://blog.csdn.net/xiaofengkang/article/details/146206492  浏览:    关键词:K8S学习之基础二十六:k8s的StatefulSet控制器

k8s中StatefulSet控制器

​ StatefulSet是为了管理有状态服务的问题设计的

​ StatefulSet(sts)是有状态的集合,管理有状态的服务,它管理的Pod名称不能随意变化,数据持久化的目录也不一样,每个pod都有独有的数据持久化存储目录,如mysql、redis集群等

vi statefulset.yaml 
apiVersion: v1
kind: Service
metadata: name: nginxlabels:app: nginx
spec:ports:- port: 80name: webclusterIP: Noneselector:app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata: name: web
spec:selector:           # -required-matchLabels:app: nginxserviceName: nginx  # -required-replicas: 2template:           # -required-metadata: labels:app: nginxspec: containers:- name: 172.16.80.140/nginx/nginx:1.26image: nginximagePullPolicy: IfNotPresentports:- containerPort: 80name: webvolumeMounts:- name: wwwmountPath: /usr/share/nginx/htmlvolumeClaimTemplates:- metadata:name: wwwspec:accessModes: ["ReadWriteOnce"]storageClassName: "nfs"resources:requests: storage: 1Mi

image-20250312150240926

image-20250312150511468

如果把pod web-0删除,sts会重新生成一个web-0的pod,并且还使用同一pvc

image-20250312150643643

集群内部可以通过访问service访问pod

使用kubectl run运行一个提供nslookup命令的容器的,这个命令来自于dnsutils包,通过对pod主机名执行nslookup,可以检查它们在集群内部的DNS地址:

kubectl run busybox --image 172.16.80.140/busybox/busybox:1.28  --image-pull-policy=IfNotPresent --restart=Never --rm -it busybox -- sh
# 解析pod域名,得到pod的ip
/ # nslookup web-0.nginx.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.localName:      web-0.nginx.default.svc.cluster.local
Address 1: 10.244.140.67 web-0.nginx.default.svc.cluster.local
/ # nslookup nginx.default.svc.cluster.local
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local# 解析service域名,得到service关联的pod的ip
Name:      nginx.default.svc.cluster.local
Address 1: 10.244.196.130 web-1.nginx.default.svc.cluster.local
Address 2: 10.244.140.67 web-0.nginx.default.svc.cluster.local

Statefulset总结:

Statefulset管理的pod,pod名字是有序的,由statefulset的名字-0、1、2这种格式组成

创建statefulset资源的时候,必须事先创建好一个service,如果创建的service没有ip,那对这个service做dns解析,会找到它所关联的pod ip,如果创建的service有ip,那对这个service做dns解析,会解析到service本身ip。

statefulset管理的pod,删除pod,新创建的pod名字跟删除的pod名字是一样的

statefulset具有volumeclaimtemplate这个字段,这个是卷申请模板,会自动创建pv,pvc也会自动生成,跟pv进行绑定,那如果创建的statefulset使用了volumeclaimtemplate这个字段,那创建pod,数据目录是独享的

ststefulset创建的pod,是域名的(域名组成:pod-name.svc-name.svc-namespace.svc.cluster.local)

sts中service处Headlessservice,还可以配置成ClusterIP、NodePort,这样就可以在集群内部集群外部,通过访问servcie来访问pod了

StatefulSet由以下几个部分组成:

  1. Headless Service:用来定义pod网路标识,生成可解析的DNS记录,无头服务

  2. volumeClaimTemplates:存储卷申请模板,创建pvc,指定pvc名称大小,自动创建pvc,且pvc由存储类供应。

  3. StatefulSet:管理pod的

什么是Headlessservice?

Headlessservice不分配clusterIP,headless service可以通过解析service的DNS,返回所有Pod的dns和ip地址 (statefulSet部署的Pod才有DNS),普通的service,只能通过解析service的DNS返回service的ClusterIP

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词