当前位置: 首页 > article >正文

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

k8s中StatefulSet控制器

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

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

vi statefulset.yaml 
apiVersion: v1
kind: Service
metadata: 
  name: nginx
  labels:
     app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata: 
  name: web
spec:
  selector:           # -required-
    matchLabels:
      app: nginx
  serviceName: nginx  # -required-
  replicas: 2
  template:           # -required-
    metadata: 
     labels:
       app: nginx
    spec: 
      containers:
      - name: 172.16.80.140/nginx/nginx:1.26
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      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.local

Name:      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


http://www.kler.cn/a/584409.html

相关文章:

  • 在 Ubuntu 上安装和配置 Docker 的完整指南
  • 网络爬虫-1:发送请求+维持会话+代理设置/超时设置
  • 高德爬取瓦片和vue2使用
  • Sglang部署大模型常用参数详解
  • 【Oracle】19c数据库控制文件多路径配置
  • 使用阿里云操作系统控制台巧解调度抖动
  • Python----数据可视化(pyecharts二:绘图一:条形图,直方图,折线图,散点图,箱图,饼图,热力图)
  • 若依RuoYi-Cloud-Plus微服务版(完整版)前后端部署
  • Spring MVC中的Controller加载控制与Bean加载控制详解
  • cu118 安装vllm 极简教程 踩坑笔记
  • 信奥赛CSP-J复赛集训(模拟算法专题)(10):P2356 弹珠游戏
  • 本地算力部署大模型详细流程(一)
  • 虚幻引擎入门
  • 玩转云服务器——阿里云操作系统控制台体验测评
  • 游戏引擎学习第154天
  • Hutool RedisDS:Java开发中的Redis极简集成与高阶应用
  • 云原生性能测试全解析:如何构建高效稳定的现代应用?
  • 一文了解JVM的垃圾回收
  • LLMs基础学习(二)涌现能力、Scaling Law 和 幻觉
  • Science Advances 视触觉传感机制的交互装置,可以实时测量来自手不同部位的分布力