operator:

statefulset:有状态副本集

特点

运行在: 1,稳定且唯一的网络标识符

2,稳定且持久的存储

3,有序,平滑地部署和扩展

4,有序,平滑地删除和终止

5,有序的滚动更新

三个组件:headless service(无头服务), statefuleset,volumeClaimTemplate(存储卷申请模板)

先准备pv

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv001

labels:

name: pv001

polity: fast

spec:

nfs:

path: /data/volumes/v1

server: node2

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 5Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv002

labels:

name: pv002

polity: fast

spec:

nfs:

path: /data/volumes/v2

server: node2

accessModes: ["ReadWriteOnce"]

capacity:

storage: 5Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv003

labels:

name: pv003

polity: fast

spec:

nfs:

path: /data/volumes/v3

server: node2

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 5Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv004

labels:

name: pv004

polity: fast

spec:

nfs:

path: /data/volumes/v4

server: node2

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 10Gi

---

apiVersion: v1

kind: PersistentVolume

metadata:

name: pv005

labels:

name: pv005

polity: fast

spec:

nfs:

path: /data/volumes/v5

server: node2

accessModes: ["ReadWriteMany","ReadWriteOnce"]

capacity:

storage: 10Gi

kubectl apply -f pv-demo.yaml

kubectl get pv

实例

apiVersion: v1

kind: Service

metadata:

name: myapp-svc  service名

labels:

app: myapp

spec:

ports:

- port: 80  service端口

name: web  service端口名

clusterIP: None  statefulset要求无头服务

selector:  与pod关联的标签

app: myapp-pod

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: myapp  statefulset控制器名 创建的pod名也为这个

spec:

serviceName: myapp-svc 关联的service服务名,必须是无头服务

replicas: 2

selector:  管理哪些pod,关联pod的label

matchLabels:

app: myapp-pod

template: 定义pod模板

metadata:

labels:  定义的pod的标签label

app: myapp-pod

spec:

containers:

- name: myapp  pod中容器名

image: ikubernetes/myapp:v1

ports:

- containerPort: 80

name: web

volumeMounts:

- name: myappdata 挂载myappdata存储卷

mountPath: /usr/share/nginx/html 容器中挂载的路径

volumeClaimTemplates:   pvc模板 为每个pod定义volume 自动创建pvc

- metadata:

name: myappdata   定义的pvc名

spec:

accessModes: ["ReadWriteOnce"]  单路读写

resources:   资源

requests: 请求

storage: 5Gi 大小5Gi存储空间

创建

kubectl explain sts

kubectl apply -f stateful-demo.yaml

验证:

kubectl get sts

kubectl get pvc

kubectl get svc

kubectl get pv

kubectl get pods

删除sts时

逆向删除pod

kubectl delete -f stateful-demo.yaml

删除时pvc还在,且一直保留给固定的pod

statefulset支持滚动更新,规模扩展

逆向更新

dns解析

kubectl exec -it myapp-0 -- /bin/sh

nslookup  myapp-3.myapp-svc.default.svc.cluster.local

域名构成   pod名 service名 命名空间 集群域名svc.cluster.local

域名 pod_name.service_name.namaspace_name.svc.cluster.local

nslookup  myapp-3.myapp-svc

扩容宿容

kubectl scale sts myapp --replicas=3

kubectl patch sts myapp -p '{"spec":{"replicas":2}}'

更新策略

kubectl explain sts.spec.updateStrategy

kubectl explain sts.spec.updateStrategy.rollingUpdate

分区更新

kubectl explain sts.spec.updateStrategy.rollingUpdate.partition

myapp-0

myapp-1

myapp-2

myapp-3

myapp-4

partition:N

N>=3

即更新3和4,即myapp-3,myapp-4 这叫金丝雀发布

验证

方法一

kubectl patch sts myapp -p '{"spec":{"replicas":5}}'

kubectl patch sts myapp -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":4}}}}' 打上补丁 partition>=4

kubectl describe sts myapp 查看更新策略

kubectl set image sts/myapp myapp=ikubernetes/myapp:v2 改变镜像就会更新了

kubectl get sts -o wide

方法二

vim stateful-demo.yaml

kind: StatefulSet

...

spec:

updateStrategy:

rollingUpdate:

partition: 3

kubectl apply -f stateful-demo.yaml

如果版本没问题,就全部更新

vim stateful-demo.yaml

kind: StatefulSet

...

spec:

updateStrategy:

rollingUpdate:

partition: 0

kubectl apply -f stateful-demo.yaml

k8s之statefulset控制器的更多相关文章

  1. 5.深入k8s:StatefulSet控制器

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 在上一篇中,讲解了容器持久化存储,从中我们知道什么是PV和PVC,这一篇我们讲通过Sta ...

  2. 容器编排系统K8s之StatefulSet控制器

    前文我们聊到了k8s的configmap和secret资源的说明和相关使用示例,回顾请参考:https://www.cnblogs.com/qiuhom-1874/p/14194944.html:今天 ...

  3. k8s StatefulSet控制器-独立存储

    k8s-StatefulSet控制器-独立存储 1. StatefulSet控制器-独立存储 独享存储:StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当 ...

  4. Kubernetes K8S之资源控制器StatefulSets详解

    Kubernetes的资源控制器StatefulSet详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  5. Kubernetes K8S之资源控制器Daemonset详解

    Kubernetes的资源控制器Daemonset详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2C/ ...

  6. Kubernetes K8S之资源控制器Job和CronJob详解

    Kubernetes的资源控制器Job和CronJob详解与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master CentOS7.7 2 ...

  7. Kubernetes学习之路(十七)之statefulset控制器

    目录 一.statefulset简介 二.为什么要有headless?? 三.为什么要 有volumeClainTemplate?? 四.statefulSet使用演示 (1)查看statefulse ...

  8. 还不会用 K8s 集群控制器?那你会用冰箱吗?(多图详解)

    作者 | 阿里云售后技术专家 声东 导读:当我们尝试去理解 K8s 集群工作原理的时候,控制器(Controller)肯定是一个难点.这是因为控制器有很多,具体实现大相径庭:且控制器的实现用到了一些较 ...

  9. kubernetes学习控制器之StatefulSet控制器

    StatefulSet介绍 一.StatefulSet概述 StatefulSet是用来管理stateful(有状态)应用的StatefulSet管理Pod时,确保Pod有一个按序增长的ID与Depl ...

  10. k8s之pod控制器

    1.生产中,很少会跑一个自主式pod,一般由控制器去创建pod,其配置文件中内嵌了pod的创建方式. pod控制器:ReplicaSet.Deployment.DaemonSet.Job.Cronjo ...

随机推荐

  1. HBuilder X对vue的支持有多强?

      HBuilder X对vue的支持有多强? 分类:HBuilder Vue HBuilderX中使用vue,如果是打开vue文件,会自动挂载vue语法库.如果是HTML文件里引用vue框架,需要点 ...

  2. MES生产制造管理系统-BI看板 MES大屏看板

    可视化看板最主要的目的是为了将生产状况透明化,让大家能够快速了解当前的生产状况以及进度,通过大数据汇总分析,为管理层做决策提供数据支撑,看板数据必须达到以下基本要求: 数据准确--真实反映生产情况 数 ...

  3. Typecho 数据备份及程序升级详细步骤教程

    数据库备份看自己,习惯性更新前都备份,出错直接滚回去 数据库备份 直接在宝塔数据库那个模块备份即可,备份完建议下载本地或者保存到OSS 备份网站文件 理论上只需要备份/usr/目录即可,因为这个目录包 ...

  4. K8s - 容器编排引擎Kubernetes

    什么是Kubernetes? 背景 Kubernetes 是开源的容器集群管理项目,诞生于2014年,由Google公司发起 前身Borg系统在Google内部应用了十几年,积累了大量来自生产环境的实 ...

  5. 【渗透测试】Vulnhub DarkHole

    渗透环境 攻击机:   IP: 192.168.216.129(Kali) 靶机:     IP:192.168.216.130 靶机下载地址:https://www.vulnhub.com/entr ...

  6. Deepseek学习随笔(12)--- 清华大学发布第4弹:DeepSeek+DeepResearch让科研像聊天一样简单(附网盘链接)

    一.文档简介 清华大学发布的<DeepSeek+DeepResearch让科研像聊天一样简单>介绍了如何通过DeepSeek和DeepResearch工具简化科研流程,提升研究效率.文件分 ...

  7. RedHat8密码复杂度策略配置

    1.密码复杂度策略概念 在Linux系统中,确保用户密码的复杂度是提高系统安全性的重要措施之一.通过配置密码策略,可以强制用户使用强密码,从而降低被破解的风险.本文将详细介绍如何在 Linux 系统中 ...

  8. 深度研究JDK的各种技术细节

    打算建立一个JDK网站,将目前JDK的各种重要特性都深入分析一下.希望JDK中各种技术实现细节都可以在这个网站上查到.相关的模块以及阅读顺序如下图所示. 没有将一些内容规划进来,Java语言基本语法太 ...

  9. camunda工作流实战项目【PRO版】(表单设计器+流程编辑器,零代码创建流程)

    pro版本主要对流程设计器.表单模块做了优化和改造,下面是各版本功能对比 一.整体情况介绍 基于ruoyi平台和camunda工作流开发而成,结合bpmn.js流程编辑器和vform表单设计器,实现常 ...

  10. GPU的硬件组成及运行原理

    GPU的硬件组成 GPU 是一种专门为图形处理而设计的处理器,它的设计目标是在处理大规模.高并发的图形数据时提供高效的计算能力.与 CPU 相比,GPU 的处理器数量更多,每个处理器的计算能力相对较弱 ...