k8s-第五节-StatefulSet

StatefulSet

StatefulSet 是用来管理有状态的应用,例如数据库。

前面我们部署的应用,都是不需要存储数据,不需要记住状态的,可以随意扩充副本,每个副本都是一样的,可替代的。

而像**数据库、Redis **这类有状态的,则不能随意扩充副本。

StatefulSet 会固定每个 Pod 的名字

yaml 复制代码
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongodb
spec:
  serviceName: mongodb
  replicas: 3
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      containers:
        - name: mongo
          image: mongo:4.4
          # IfNotPresent 仅本地没有镜像时才远程拉,Always 永远都是从远程拉,Never 永远只用本地镜像,本地没有则报错
          imagePullPolicy: IfNotPresent
---
# 定义 HeadLess service
apiVersion: v1
kind: Service
metadata:
  name: mongodb
spec:
  selector:
    app: mongodb
  type: ClusterIP
  # HeadLess 就不再给Service分配IP了,通过pod名字访问
  clusterIP: None
  ports:
    - port: 27017
      targetPort: 27017

StatefulSet 特性

  • Service 的 CLUSTER-IP 是空的,Pod 名字也是固定的。
  • Pod 创建和销毁是有序的,创建是顺序的,销毁是逆序的,可以从创建的序号看出来0,1,2,3...。
  • Pod 重建不会改变名字,除了IP,所以不要用IP直连.

创建 statefulset 会在endpoints 多一个 hostname,用于service和pod之间做dns指向

  • 访问时,如果直接使用 Service 名字连接,会随机转发请求连接指定 Pod,可以这样pod-name.service-name

测试连接

运行一个临时 Pod 连接数据测试下
kubectl run mongodb-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mongodb:4.4.10-debian-10-r20 --command -- bash

进去bash 后 使用

mongo --host mongodb 为随机转发连接mongodb service下的pod
mongo --host mongodb-0.mongodb 为直接连接mongodb-0 pod

相关推荐
坚持的小马11 小时前
k8s中执行脚本如果提示etcd找不到,可以做如下的操作
容器·kubernetes·etcd
easy_coder11 小时前
从HDFS NN报错看Flink+K8s+HDFS:基础、架构与问题关联
hdfs·flink·kubernetes
回忆是昨天里的海13 小时前
k8s-部署springboot容器化应用
java·容器·kubernetes
立早正文13 小时前
Docker从零到一部署DNMP+Redis《全程干货》
docker·容器·php
hkNaruto13 小时前
【k8s】Kubernetes 资源限制设置规范手册 MB与MiB的概念混淆问题
云原生·容器·kubernetes
Mr. Cao code14 小时前
实战:Docker构建Haproxy负载均衡镜像
linux·运维·ubuntu·docker·容器·负载均衡
Xander W15 小时前
基于K8s集群的PyTorch DDP 框架分布式训练测试(开发机版)
人工智能·pytorch·分布式·python·深度学习·kubernetes
pp-周子晗(努力赶上课程进度版)16 小时前
Docker、Kubernetes与AWS中控机是什么?
docker·容器·kubernetes·aws
曾经的三心草19 小时前
最新版本组件的docker下载-Seata
运维·docker·容器
不爱笑的良田21 小时前
从零开始的云原生之旅(十一):压测实战:验证弹性伸缩效果
云原生·容器·kubernetes·go·压力测试·k6