Kubernetes那点事儿——statefulset控制器

本文详细介绍了Kubernetes中的StatefulSet控制器,包括其特点、应用场景、部署示例以及与Deployment的区别。重点讨论了如何使用HeadlessService和VolumeClaimTemplate来实现稳定网络和持久化存储。还以Consul为例展示了StatefulSet的实际应用。


前言

statefulset控制器用于部署无状态应用,所谓无状态应用简单理解就是各个节点存在主从关系,如ZK集群存在leader、fllower,mysql集群的master和slave,他们各个独立有序运行,有单独的存储,这里存储就要用到前面咱们学习的PV/PVC。

一、statefulset控制器

特点:

  1. 部署有状态应用(deployment部署都是无状态应用)
  2. 解决Pod独立生命周期,保持Pod启动顺序和唯一性
  3. 稳定,唯一的网络标识符,持久存储
  4. 有序,优雅的部署和扩展、删除和终止
  5. 有序,滚动更新

应用场景:分布式应用、数据库集群

K8s中实现statefulset控制器两个必备条件,网络和存储

  • 稳定的网络ID

    使用Headless Service(相比普通Service只是将spec.clusterIP定义为None)来维护Pod网络身份。
    并且添加serviceName: "nginx"字段指定StatefulSet控制器要使用这个Headless Service。
    DNS解析名称:...svc.cluster.local

  • 稳定的存储

    StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当StatefulSet使用
    VolumeClaimTemplate创建一个PersistentVolume时,同样也会为每个Pod分配并创建一个编号的PVC。

二、示例

# cat statefulset.yaml

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web-statefulset
spec:
  selector:
    matchLabels:
      app: nginx1 # has to match .spec.template.metadata.labels
  serviceName: "nginx-svc"   # match service
  replicas: 2 # by default is 1
  template:
    metadata:
      labels:
        app: nginx1 # has to match .spec.selector.matchLabels
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www-volume
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偷学技术的梁胖胖yo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值