k8s 控制器---Statefulset

news2024/11/23 12:32:35

1. Statefulset 控制器

StatefulSet 是为了管理有状态服务的问题而设计的。
1.1 什么叫有状态服务?
StatefulSet 是有状态的集合,管理有状态的服务,它所管理的 Pod 的名称不能随意变化。数据
持久化的目录也是不一样,每一个 Pod 都有自己独有的数据持久化存储目录。比如 MySQL 主
从、redis 集群等。

1.2 什么叫无状态服务?
RC、Deployment、DaemonSet 都是管理无状态的服务,它们所管理的 Pod 的 IP、名字,启
停顺序等都是随机的。个体对整体无影响,所有 pod 都是共用一个数据卷的,部署的 tomcat 就是无状态的服务,tomcat 被删除,在启动一个新的 tomcat,加入到集群即可,跟 tomcat 的名
字无关。

1.3 StatefulSet 的组成
1. Headless Service:用来定义 pod 网路标识,生成可解析的 DNS 记录
2. volumeClaimTemplates:存储卷申请模板,创建 pvc,指定 pvc 名称大小,自动创建pvc,且 pvc 由存储类供应。
3. StatefulSet:管理 pod 的

扩展:什么是 Headless service?
Headless service 不分配 clusterIP,headless service 可以通过解析 service 的 DNS,返回所
有 Pod 的 dns 和 ip 地址 (statefulSet 部署的 Pod 才有 DNS),普通的 service,只能通过解析
service 的 DNS 返回 service 的 ClusterIP。

为什么要用 headless service(没有 service ip 的 service)?
在使用 Deployment 时,创建的 Pod 名称是没有顺序的,是随机字符串,在用 statefulset 管理
pod 时要求 pod 名称必须是有序的 ,每一个 pod 不能被随意取代,pod 重建后 pod 名称还是
一样的。因为 pod IP 是变化的,所以要用 Pod 名称来识别。pod 名称是 pod 唯一性的标识符,
必须持久稳定有效。这时候要用到无头服务,它可以给每个 Pod 一个唯一的名称。

为什么要用 volumeClaimTemplate?
对于有状态应用都会用到持久化存储,比如 mysql 主从,由于主从数据库的数据是不能存放在一
个目录下的,每个 mysql 节点都需要有自己独立的存储空间。而在 deployment 中创建的存储卷
是一个共享的存储卷,多个 pod 使用同一个存储卷,它们数据是同步的,而 statefulset 定义中
的每一个 pod 都不能使用同一个存储卷,这就需要使用 volumeClainTemplate,当在使用
statefulset 创建 pod 时,volumeClainTemplate 会自动生成一个 PVC,从而请求绑定一个
PV,每一个 pod 都有自己专用的存储卷。

Pod、PVC 和 PV 对应的关系图如下:
在这里插入图片描述

2. Statefulset 资源清单文件编写技巧

 kubectl explain statefulset.spec #可以通过帮助查看
 #官网查看:https://kubernetes.io/zh-cn/docs/tutorials/stateful-application/basic-stateful-set/

3. Statefulset 使用案例:部署 web 站点

3.1 创建存储类

cat >  class-web.yaml << EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-web
provisioner: example.com/nfs
EOF
[root@k8s-master web]# kubectl get storageclass|grep nfs-web
nfs-web   example.com/nfs   Delete          Immediate           false                  67s
[root@k8s-master web]# 

3.2 创建 Statefulset控制器资源清单

cat > statefulset.yaml << EOF
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:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 2
  template:
    metadata: 
     labels:
       app: nginx
    spec: 
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: ["ReadWriteOnce"]
      storageClassName: "nfs-web"
      resources:
        requests: 
          storage: 1Gi
EOF
[root@k8s-master web]# kubectl get pods #看到了Statefulset控制器创建的2个pod
NAME        READY   STATUS    RESTARTS   AGE
pod/web-0   1/1     Running   0          2m38s
pod/web-1   1/1     Running   0          2m20s

[root@k8s-master web]# kubectl get svc #查看 headless service
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   21d
nginx        ClusterIP   None         <none>        80/TCP    6m54s
[root@k8s-master web]# 
[root@k8s-master web]# kubectl get statefulset
NAME   READY   AGE
web    2/2     5m10s
[root@k8s-master nfs_pro]# kubectl get pv  #查看pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                 STORAGECLASS   REASON   AGE
pvc-4bdf1ade-c083-4d69-be7b-a8062a637a4e   1Gi        RWO            Delete           Bound      default/www-web-0     nfs-web                 14m
pvc-577e9608-3018-4ea9-afeb-fcd1bbfd7a73   1Gi        RWO            Delete           Bound      default/www-web-1     nfs-web                 13m
[root@k8s-master nfs_pro]# 

[root@k8s-master web]# kubectl get pvc  #查看pvc
NAME        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
www-web-0   Bound    pvc-4bdf1ade-c083-4d69-be7b-a8062a637a4e   1Gi        RWO            nfs-web        11m
www-web-1   Bound    pvc-577e9608-3018-4ea9-afeb-fcd1bbfd7a73   1Gi        RWO            nfs-web        10m
[root@k8s-master nfs_pro]# 

[root@k8s-master nfs_pro]# pwd #此目录是nfs的共享目录
/data/nfs_pro
[root@k8s-master nfs_pro]# ll #看到了两个pod绑定的pvc目录
total 0
drwxrwxrwx 2 root root 6 Apr 22 16:04 default-www-web-0-pvc-4bdf1ade-c083-4d69-be7b-a8062a637a4e
drwxrwxrwx 2 root root 6 Apr 22 16:05 default-www-web-1-pvc-577e9608-3018-4ea9-afeb-fcd1bbfd7a73
[root@k8s-master nfs_pro]# 
[root@k8s-master nfs_pro]# for i in 0 1; do kubectl exec web-$i -- sh -c 'hostname';done #查看 pod 主机名
web-0
web-1
[root@k8s-master nfs_pro]# 

#通过上面可以看到创建的 pod 是有序的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/449225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity --- UGUI --- Rect Transform(矩形变换) --- 锚点及其相关应用

1.所有的UI物体都没有Transform组件&#xff0c;取而代之的是Transform组件的派生 --- Rect Transform(矩形变换) 2.Rect Transform和Transform一样都有旋转和缩放&#xff0c;它两之间的区别是&#xff1a; Rect Transform多了&#xff1a;a.Pibot轴心点&#xff1b;b.Ancho…

002 学习鸿蒙应用开发ArkTs语言

目录 一.ArkTs语言介绍 1.ArkTs语言概述 2.ArkTs语言特性 二.基本UI描述 1.基本概念 2.UI描述规范 无参数构造配置 有参数构造配置 属性配置 事件配置 子组件配置 三.状态管理 1.基本概念 2.页面级状态管理 State Prop Link Observed和ObjectLink数据管理 P…

​从底层技术分析如何调教你的ChatGPT?

相信很多人都已经在使用类ChatGPT的工具进行工作或者娱乐了&#xff0c;这里说的类ChatGPT的是指和ChatGPT相同或者相似功能的产品&#xff0c;包括国外的开源平替模型、百度的文心一言等&#xff0c;但是你真的会使用这些工具和应用吗&#xff1f;你使用的方法是正确的吗&…

Java ---内部类

&#xff08;一&#xff09;定义 将一个类 A 定义在另一个类 B 里面&#xff0c;里面的那个类 A 就称为 内部类 &#xff08; InnerClass &#xff09; &#xff0c;类 B 则称为 外部类&#xff08; OuterClass &#xff09;。广泛意义上的内部类一般来说包括这四种&#xff1…

【中级软件设计师】—(针对上午题)软件工程上(三十五)

【中级软件设计师】—&#xff08;针对上午题&#xff09;软件工程&#xff08;三十五&#xff09; 一、CMM 1 2 3 4 5 二、能力成熟度模型集成&#xff08;CMMI&#xff09; 6 7 8 9 三、软件过程模型 &#xff08;一&#xff09;、瀑布模型 &#xff08;二&#xff09;、V模…

第八章 项目进度管理

项目进度有8个过程 1、规划项目&#xff0c;进度管理&#xff08;计划&#xff09; 2、定义活动&#xff08;活动清单&#xff09; 3、排序活动 4、估算活动资源&#xff08;估算人力&#xff09; 5、估算活动时间 6、制定进度计划表 7、控制进度 规划项目进度管理 为实施项目进…

薪资17K是一个怎样的水平?来看看98年测试工程师的面试全过程…

我的情况 大概介绍一下个人情况&#xff0c;男&#xff0c;本科&#xff0c;三年多测试工作经验&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;然而到今天都没有收到一份offer&#xff01;从年后就开始准备简历&#xff0c;年…

电容的基本知识

1、电容是电路中重要的元件&#xff0c;种类多、用途广&#xff0c;主要有插件类和贴片类两种。 2、电容主要特性参数:标称容量、耐压、误差、温度 2.1电容容量常用单位有微法《uF)、纳法《nF)、皮法《pF) 单位换算:1uF10^3nF10"6pF《电容的基本单位用法拉…

完成近4亿元C轮融资+自研底盘域控,本土线控制动玩家“拼”了

显然&#xff0c;线控制动赛道已经进入白热化竞争阶段。 高工智能汽车研究院监测数据显示&#xff0c;2022年中国市场&#xff08;不含进出口&#xff09;乘用车前装搭载线控制动系统&#xff08;One-Box&#xff0c;Two-Box&#xff09;上险交付合计497.39万辆&#xff0c;同…

java反序列化 cc链6 分析

前言 这里分析完cc1的两个以后&#xff0c;白日梦佬又介绍了cc6链&#xff0c;最主要的是这个链子不受jdk的版本影响&#xff0c;甚至不受cs版本的影响&#xff0c;这么说就是cs大部分都是可以使用cc链6&#xff0c;而且这个链子要简洁的很多&#xff0c;我一听这个好啊&#x…

springcloud-02

1、微服务概述 1.1 概念 1.2 架构演进 单体架构&#xff1a; 将业务的所有功能集中在一个项目中年开发&#xff0c; 打成一个jar包 优点&#xff1a;架构简单&#xff0c;部署成本低 缺点&#xff1a;耦合度高 分布式架构 按业务功能对系统进行拆分&#xff0c;每一个业务模块…

如何将项目提交到别人的仓库

大纲&#xff1a; 1、在gitee中克隆(clone)别人仓库的代码。 首先&#xff0c;进入别人的仓库&#xff0c;点击 克隆/下载 2、在你存放项目的文件夹下克隆你刚刚复制的代码 &#xff08;右键点击Git Clone即可&#xff09; 点击OK 就开始克隆了 克隆成功之后&#xff0c;文件上…

【HuggingGPT】Solving AI Tasks with ChatGPT and its Friends in Hugging Face

文章目录 所解决的问题&#xff1f;背景所采用的方法&#xff1f;取得的效果&#xff1f;问题所出版信息&#xff1f;作者信息&#xff1f;参考链接 所解决的问题&#xff1f; 当前的语言模型Large Language Models (LLMs)缺乏处理复杂信息的能力&#xff0c;像视觉&#xff0…

重学Java设计模式-行为型模式-中介者模式

重学Java设计模式-行为型模式-中介者模式 内容摘自&#xff1a;https://bugstack.cn/md/develop/design-pattern/2020-06-27-重学 Java 设计模式《实战中介者模式》.html#重学-java-设计模式-实战中介者模式「按照mybatis原理手写orm框架-给jdbc方式操作数据库增加中介者场景」…

Maven项目中出现【不再支持目标选项 1.5】的解决办法

1 快速解决【单项目】 本方法只适用于单个项目&#xff0c;新建项目使用maven还会出现问题。 在pom.xml配置&#xff1a; <properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target>&l…

高并发高吞吐IO秘密武器——epoll池化技术

1、epoll函数详解 epoll是Linux特有的IO复用函数&#xff0c;使用一组函数来完成任务&#xff0c;而不是单个函数。 epoll把用户关心的文件描述符上的事件放在内核的一个事件表中&#xff0c;不需要像select、poll那样每次调用都要重复传入文件描述符集或事件集。 epoll需要…

闲人闲谈PS之四十一——重新认识PS模块

惯例闲话&#xff1a;4月份参加了SAP咨询大师乐老师组织的公司间业务培训&#xff0c;印象极为深刻&#xff0c;乐老师从三权分立的角度同大家分析了公司间业务交易对象–库存的属地权、管理权、所有权&#xff0c;通过这种全新的视角&#xff0c;把复杂难以理解的公司交易用最…

万字复盘Vue2相关知识(适合学过但忘了然而需要上手的朋友)

目录 前言一&#xff0c;Vue2项目的创建及基本配置1.1 用脚手架创建项目1.2 项目结构1.3 入口文件main.js1.4 组件配置1.4 运行项目 二&#xff0c;Vue的基础知识2.1 数据显示2.2 数据绑定2.3 事件处理2.4 循环遍历2.5 判断语法2.6 计算属性2.7 监视属性 三&#xff0c;重要的生…

python 资料

算法和设计模式 Python实现算法和设计模式 algorithms - Python的一个算法模块. PyPattyrn - 一个用于实现常见设计模式的简单而有效的库. python-patterns - Python中设计模式的集合. sortedcontainers - 快速&#xff0c;纯Python的SortedList&#xff0c;SortedDict和So…

第1章:算法基础【AcWing】

文章目录 快速排序题目描述输入格式输出格式样例样例输入样例输出 提示 算法&#xff08;分治&#xff0c;双指针&#xff09; O ( n l o g n ) O(nlogn) O(nlogn)示例代码注意事项时间复杂度稳定性 归并排序题目描述算法&#xff08;分治&#xff0c;双指针&#xff09; O (…