[Kubernetes]5. k8s集群StatefulSet详解,以及数据持久化(SC PV PVC)

news2024/9/22 3:40:31

前面通过deployment结合service来部署无状态的应用,下面来讲解通过satefulSet结合service来部署有状态的应用

一.StatefulSet详解

1.有状态和无状态区别

  • 无状态: 无状态(stateless)、牲畜(cattle)、无名(nameless)、可丢弃(disposable)
  • 有状态: 有状态(stateful)、宠物(pet)、具有名(haviing name)、不可丢弃(non-disposable)
  • StatefulSet是用来管理有状态的应用,例如数据库
  • 前面部署的应用,都是不需要存储数据,不需要记住状态的,可以随意扩充副本,每个副本都是一样的可替代的,这时候可以通过deployment结合service来部署
  • 而像数据库、Redis这类有状态的,并且有数据的应用,则不能随意扩充副本,这时候就需要通过statefulSet结合service来部署
  • StatefulSet 会固定每个 Pod 的名字

2.statefulset的组成

  • headless service 用于定义网络标识(DNS
  • StatefulSet 控制器,用于定义具体应用
  • volumeClaimTemplate 存储卷申请模板,用于创建PV,保证数据库的持久化操作

下面就来通过statefulSet结合service部署一个Mongodb

3.创建 Service部署StatefulSet类型的Mongodb

定义一个mongo.yaml,这个yaml和deployment.yaml类似,如下:

  • 下面yaml中的 --- 表示:把多个配置文件放在一个yaml中,下面就是把kind为StatefulSet类型的mongo.yaml和service.yaml放在同一个文件中,当然也可以拆分开来
apiVersion: apps/v1
#类型statefulSet
kind: StatefulSet
metadata:
  #部署的名字
  name: mongodb
spec:
  serviceName: mongodb #必须设置,和下面的name保持一致
  #创建Pod的副本数
  replicas: 2
  #定义标签选择器:定义Deployment如何找到要管理的Pod,与template的label(标签)对应
  selector:
    matchLabels:
      app: mongodb #需要和下面的labels统一,进行关联
  #定义 Pod 相关数据
  template:
    metadata:
      labels:
        app: mongodb 
    #指定该资源的内容
    spec:
      # 定义容器,可以多个
      containers:
        - name: mongo # 容器名字
          image: mongo # 镜像
          # [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
          imagePullPolicy: IfNotPresent
---
apiVersion: v1
#类型Service
kind: Service
metadata:
  #部署的服务名字,这个可以随意
  name: mongodb
spec:
 selector:
      app: mongodb #需要mongdb.yaml中,也就是上面的pod中的template中定义的metadata.labels.app名称统一,这样mongodb和service才能相互找到
 type: ClusterIP  #默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP,当外部访问项目时,自动分配一个虚拟的pod ip,达到负载均衡操作,下面详细讲解
 #HeadLess: 不分配IP地址
 clusterIP: None
 ports:
    - port: 27017 #本 Service 的端口
      targetPort: 27017 # 容器端口

 拆分开来的文件如下:

mongo.yaml

apiVersion: apps/v1
#类型statefulSet
kind: StatefulSet
metadata:
  #部署的名字
  name: mongodb
spec:
  serviceName: mongodb #必须设置,和下面的name保持一致
  #创建Pod的副本数
  replicas: 2
  #定义标签选择器:定义Deployment如何找到要管理的Pod,与template的label(标签)对应
  selector:
    matchLabels:
      app: mongodb #需要和下面的labels统一,进行关联
  #定义 Pod 相关数据
  template:
    metadata:
      labels:
        app: mongodb 
    #指定该资源的内容
    spec:
      # 定义容器,可以多个
      containers:
        - name: mongo # 容器名字
          image: mongo # 镜像
          # [Always | Never | IfNotPresent] #获取镜像的策略 Alawys表示下载镜像 IfnotPresent表示优先使用本地镜像,否则下载镜像,Nerver表示仅使用本地镜像
          imagePullPolicy: IfNotPresent

service.yaml

apiVersion: v1
#类型Service
kind: Service
metadata:
  #部署的服务名字,这个可以随意
  name: mongodb
spec:
 selector:
      app: mongodb #需要mongdb.yaml中,也就是上面的pod中的template中定义的metadata.labels.app名称统一,这样mongodb和service才能相互找到
 type: ClusterIP  #默认类型,自动分配一个仅Cluster内部可以访问的虚拟IP,当外部访问项目时,自动分配一个虚拟的pod ip,达到负载均衡操作,下面详细讲解
 #HeadLess: 不分配IP地址
 clusterIP: None
 ports:
    - port: 27017 # 本 Service 的端口
      targetPort: 27017 # 容器端口

mongo.yaml和deployment.yaml的区别

  • kind不同:deployment.yaml的kind为Deployment,mongo.yaml的kind为StatefulSet
  • mongo.yaml的spec的serverName必须配置,必须和service名字统一起来,这样才能关联
  • mongo.yaml的service.yaml的type必须是ClusterIP(集群内部访问),访问的时候是没有IP地址的,故需设置ClusterIP:none.当然,type类型也可以是NodePort,这样就可以在外部进行端口映射访问操作

4.部署mongo.yaml

(1).先删除其他无用的配置

该操作可以执行,也可以不执行

(2).创建mongo.yaml 

vi .mongo.yaml,然后把上面的配置复制进入即可

[root@node1 ~]# cat  mongo.yaml 
apiVersion: apps/v1
#类型statefulSet
kind: StatefulSet
metadata:
  #部署的名字
  name: mongodb
spec:
  serviceName: mongodb #必须设置,和下面的name保持一致
  #创建Pod的副本数
  replicas: 2
  #定义标签选择器:定义Deployment如何找到要管理的Pod,与template的label(标签)对应
  selector:
    matchLabels:
      app: mongodb #需要和下面的labels统一,进行关联
  #定义 Pod 相关数据
  template:
    metadata:
      labels:
        app: mongodb 
    #指定该资源的内容
    spec:
      # 定义容器,可以多个
      containers:
        - name: mongo # 容器名字
          image: mongo # 镜像
       

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

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

相关文章

万界星空科技低代码平台基本模块与优势

低代码平台(Low-Code Development Platform,LCDP)就是使用低代码的方式进行开发,能快速设置和部署的平台。低代码平台旨在简化应用开发过程,降低开发难度,缩短开发周期,并使非专业程序员&#x…

【日常记录】自动化部署与持续交付:GitHub Actions CICD

文章目录 1.背景2.具体流程2.1 在自己的项目2.2 设置GitHub token2.3 配置 workflows2.4 配置服务器SSH2.5 配置 repository secret2.6 服务器安装宝塔2.7 搭建网站 备注不知道怎么处理的一个错误 1.背景 当我们做项目的时候,如果做完了,要发布&#xff…

C#如何将本地文件上传至阿里云OSS中

要想将文件上传至OSS,那么阿里云的AccessKeyId和AccessKeySecret必不可少 一.去哪找AccessKeyId和AccessKeySecret 进入阿里云工作台,点击右上角头像,选择AccessKey管理,就能看到ID了 但是Secret目前阿里云不支持查看了&#xf…

DVWA-Hight-xss漏洞

首先来到DVWA高级模式下反射型xss漏洞处 开始测试 <script>alert(/xss/)</script> 发现直接使用js代码不行&#xff0c;被直接过滤稍微试探针对的过滤对象 发现这里针对 <script>标签会直接过滤 我们改用<img>标签试探是否过滤 发现这里针对img标签没…

ARM Cortex-Mx 权威指南笔记—SysTick定时器

前言 通过本次学习你可以学到&#xff1a; 1、什么是SysTick定时器&#xff1f; 2、Systick定时器的操作。 3、如何使用Systick定时器。 正文内容参考 ARM Cortex-Mx 权威指南笔记 9.5小节。 什么是Systick定时器 SysTick定时器是Cortex-M处理器内部集成的名为系统节拍定时…

【FPGA】分享一些FPGA数字信号处理相关的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…

【Linux Shell】10. 函数

文章目录 【 1. 函数的定义 】【 2. 函数参数 】 【 1. 函数的定义 】 所有函数在使用前必须定义 。这意味着必须将函数放在脚本开始部分&#xff0c;直至shell解释器首次发现它时&#xff0c;才可以使用。 调用函数仅使用其函数名即可 。 函数返回值在调用该函数后通过 $? 来…

《罗素论教育》笔记

目录 全书架构 书简介 经典摘录 一、教育的理想 教育的基本原理 教育的目的 二、品性的教育 一岁前的教育 主要是2岁到6岁的教育 三、智力教育 14岁前的课程安排 最后的学年 大学教育 四、结束语 全书架构 书简介 经典摘录 一、教育的理想 教育的基本原理 1、我…

Mysql大数据量下流式查询优化:Jdbc中的useFetchSize参数及其原理解析

前言 最近我朋友公司有个需求场景&#xff1a;查询千万级数据量并写入txt文件的程序优化需求。 朋友找到我对程序进行优化&#xff0c; 不然饭碗不保......&#x1f4a6; 下面就分享一下解决这个优化问题的过程和思路&#xff0c;并总结一下&#xff0c;在以后不要在踩同样的坑…

滴水逆向1

八进制加法乘法表 EF11101111 j记住其映射关系 十进制的定义&#xff1a;由十个符号组成&#xff0c;分别是0 1 2 3 4 5 6 7 8 9 逢十进一。九进制的定义&#xff1a;由九个符号组成&#xff0c;分别是0 1 2 3 4 5 6 7 8 逢九进一。十六进制的定义&#xff1a;由十六个符号组成…

C++ 对象模型 | 关于对象

一、C 对象模型 1、对象内存布局 在C中&#xff0c;有两种数据成员&#xff1a;static和nonstatic&#xff0c;以及三种成员方法static、nonstatic、virtual&#xff0c;下面从虚函数、非虚函数、静态成员变量、非静态成员变量等维度来分析&#xff0c;类对象的内存布局。例如…

苍穹外卖Day01——总结1

总结1 1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 技术选项 3. Swagger4. 补充内容&#xff08;待解决...&#xff09; 1. 软件开发整体介绍 1.1 软件开发流程 1.2 角色分工 从角色分工里面就可以查看自己以后从事哪一…

lv14 IO模型:阻塞和非阻塞 7

1 五种IO模型------读写外设数据的方式 阻塞: 不能操作就睡觉 非阻塞&#xff1a;不能操作就返回错误(通过轮询即才能实现阻塞的情况 &#xff09; 多路复用&#xff1a;委托中介监控 信号驱动&#xff1a;让内核如果能操作时发信号&#xff0c;在信号处理函数中操作 异步IO&a…

视频AI智剪方法:快速批量处理视频,批量剪辑视频的操作

随着科技的飞速发展&#xff0c;视频内容已是获取信息和娱乐的主要方式之一。对于视频创作者和内容生产者来说&#xff0c;如何快速、高效地处理和剪辑大量视频已成为一项重要的需求。现在借助AI技术的不断发展&#xff0c;可以更加智能、高效的处理视频。下面来看云炫AI智剪如…

kubernetes入门到进阶(5)

目录 镜像仓库&#xff1a;怎么用好docker hub这个宝藏 什么是镜像仓库&#xff08;Registry&#xff09; 什么是docker hub 如何在docker hub上挑选镜像 docker hub上进行概念股命名规则是什么 该怎么上传自己的镜像 离线环境该怎么办 小结 镜像仓库&#xff1a;怎么用好docke…

《BackTrader量化交易图解》第8章:plot 绘制金融图

文章目录 8. plot 绘制金融图8.1 金融分析曲线8.2 多曲线金融指标8.3 Observers 观测子模块8.4 plot 绘图函数的常用参数8.5 买卖点符号和色彩风格8.6 vol 成交参数8.7 多图拼接模式8.8 绘制 HA 平均 K 线图 8. plot 绘制金融图 8.1 金融分析曲线 BackTrader内置的plot绘图函…

多线程-synchronized详解

1、基本作用&#xff1a;Java提供了一种内置的锁机制来支持原子性&#xff0c;同步代码块&#xff08;Synchronized Block &#xff09; 同步代码块包括两个部分&#xff1a; 1、锁的对象引用。2、锁作用的代码块。 例子&#xff1a; synchronized(Object){ //被保护的共享…

windows安装kafka以及kafka管理工具推荐

windows安装 1.下载地址 下载地址 下载最新版本的.tgz文件解压 2.修改配置 修改config目录下的zookeeper.properties中的dataDir属性 server.properties文件中的log.dir属性 3.启动zookeeper 进入到bin\windows\下的用cmd输入zookeeper-server-start.bat ..\..\config\zo…

【陈老板赠书活动 - 21期】- Python树莓派编程从零开始(第3版)

陈老老老板&#x1f9d9;‍♂️ &#x1f46e;‍♂️本文专栏&#xff1a;赠书活动专栏&#xff08;为大家争取的福利&#xff0c;免费送书&#xff09; &#x1f934;本文简述&#xff1a;活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f473;‍♂️上一篇文章&#xff…

LaTex引用字体变色

使用下面这条语句进行修改。 ‘citecolor’改变参考文献颜色&#xff0c; ‘linkcolor’改变图标公式引用的颜色&#xff0c; ‘urlcolor’ 文本网站超链接颜色。 \usepackage[colorlinks,bookmarksopen,bookmarksnumbered,citecolorblue, linkcolorblue, urlcolorblue]{hyper…