当前位置: 首页 > news >正文

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

前面通过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: Noneports:- 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: Noneports:- 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 # 镜像

相关文章:

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

前面通过deployment结合service来部署无状态的应用,下面来讲解通过satefulSet结合service来部署有状态的应用 一.StatefulSet详解 1.有状态和无状态区别 无状态: 无状态(stateless)、牲畜(cattle)、无名(nameless)、可丢弃(disposable) 有状态: 有状态(stateful)、宠物(pet)…...

数据库系统-甘晴void学习笔记

数据库系统笔记 计科210X 甘晴void 202108010XXX 教材&#xff1a;《数据库系统概论》第6版 &#xff08;图片来源于网络&#xff0c;侵删&#xff09; 文章目录 数据库系统<br>笔记第一篇 基础篇1 绪论1.1数据库系统概述1.2数据模型1.3数据库系统的结构(三级模式结构…...

Azure Machine Learning - 人脸识别任务概述与技术实战

Azure AI 人脸服务提供了可检测、识别和分析图像中的人脸的 AI 算法。 人脸识别软件在许多不同情形中都十分重要&#xff0c;例如识别、无接触访问控制和实现隐私的人脸模糊。你可以通过客户端库 SDK&#xff0c;或者直接调用 REST API 使用人脸服务。 目录 一、人脸识别服务场…...

强化学习的数学原理学习笔记 - 蒙特卡洛方法(Monte Carlo)

文章目录 概览&#xff1a;RL方法分类蒙特卡洛方法&#xff08;Monte Carlo&#xff0c;MC&#xff09;MC BasicMC Exploring Starts&#x1f7e6;MC ε-Greedy 本系列文章介绍强化学习基础知识与经典算法原理&#xff0c;大部分内容来自西湖大学赵世钰老师的强化学习的数学原理…...

DDIA 第十一章:流处理

本文是《数据密集型应用系统设计》&#xff08;DDIA&#xff09;的读书笔记&#xff0c;一共十二章&#xff0c;我已经全部阅读并且整理完毕。 采用一问一答的形式&#xff0c;并且用列表形式整理了原文。 笔记的内容大概是原文的 1/5 ~ 1/3&#xff0c;所以你如果没有很多时间…...

webpack知识点总结(高级应用篇)

除开公共基础配置之外&#xff0c;我们意识到两点: 1. 开发环境(modedevelopment),追求强大的开发功能和效率&#xff0c;配置各种方便开 发的功能;2. 生产环境(modeproduction),追求更小更轻量的bundle(即打包产物); 而所谓高级应用&#xff0c;实际上就是进行 Webpack 优化…...

均匀与准均匀 B样条算法

B 样条曲线的定义 p ( t ) ∑ i 0 n P i F i , k ( t ) p(t) \sum_{i0}{n} P_i F_{i, k}(t) p(t)i0∑​nPi​Fi,k​(t) 方程中 n 1 n1 n1 个控制点&#xff0c; P i P_i Pi​, i 0 , 1 , ⋯ n i0, 1, \cdots n i0,1,⋯n 要用到 n 1 n1 n1 个 k k k 次 B 样条基函数 …...

2023年12 月电子学会Python等级考试试卷(一级)答案解析

青少年软件编程(Python)等级考试试卷(一级) 分数:100 题数:37 一、单选题(共25题,共50分) 1. 下列程序运行的结果是?( ) print(hello) print(world) A. helloworld...

启发式算法解决TSP、0/1背包和电路板问题

1. Las Vegas 题目 设计一个 Las Vegas 随机算法&#xff0c;求解电路板布线问题。将该算法与分支限界算法结合&#xff0c;观察求解效率。 代码 python代码如下&#xff1a; # -*- coding: utf-8 -*- """ Date : 2024/1/4 Time : 16:21 Author : …...

阿里云新用户的定义与权益

随着云计算的普及&#xff0c;阿里云作为国内领先的云计算服务提供商&#xff0c;吸引了越来越多的用户。对于新用户来说&#xff0c;了解阿里云新用户的定义和相关权益非常重要&#xff0c;因为它关系到用户能否享受到更多的优惠和服务。 一、阿里云新用户的定义 阿里云新用户…...

go语言多线程操作

目录 引言 一、如何实现多线程 1. 线程的创建与管理: 2. 共享资源与同步: 3. 线程间通信: 4. 线程的生命周期管理: 5. 线程安全: 6. 考虑并发问题: 7. 性能与资源利用: 8. 特定语言或框架的工具和库: 二、go语言多线程 Goroutine 1. 轻量级: 2. 动态栈: 3. 调度:…...

GreatSQL社区2023全年技术文章总结

GreatSQL社区自成立以来一直致力于为广大的数据库爱好者提供一个交流与学习的平台。在2023年&#xff0c;我们见证了社区的蓬勃发展&#xff0c;见证了众多技术文章的诞生与分享。 此篇总结呈现GreatSQL社区2023年社区技术文章在CSDN发布的全部。这些文章涵盖了GreatSQL、MGR、…...

【论文阅读笔记】Stable View Synthesis 和 Enhanced Stable View Synthesis

目录 Stable View Synthesis摘要引言 Enhanced Stable View Synthesis 从Mip-NeRF360的对比实验中找到的两篇文献&#xff0c;使用了卷积神经网络进行渲染和新视角合成&#xff0c;特此记录一下 ToDo Stable View Synthesis paper&#xff1a;https://readpaper.com/pdf-ann…...

网络报文分析程序的设计与实现(2024)

1.题目描述 在上一题的基础上&#xff0c;参照教材中各层报文的头部结构&#xff0c;结合使用 wireshark 软件&#xff08;下载地址 https://www.wireshark.org/download.html#releases&#xff09;观察网络各层报文捕获&#xff0c;解析和分析的过程&#xff08;如下 图所示&a…...

贯穿设计模式-享元模式思考

写享元模式的时候&#xff0c;会想使用ConcurrentHashMap来保证并发&#xff0c;没有使用双重锁会不会有问题&#xff1f;但是在synchronize代码块里面需要尽量避免throw异常&#xff0c;希望有经验的同学能够给出解答&#xff1f; 1月6号补充&#xff1a;没有使用双重锁会有问…...

牛客刷题:BC45 小乐乐改数字(中等)

自我介绍&#xff1a;一个脑子不好的大一学生&#xff0c;c语言接触还没到半年&#xff0c;若涉及到效率等问题&#xff0c;各位都可以在评论区提出见解&#xff0c;谢谢啦。 该账号介绍&#xff1a;此帐号会发布游戏&#xff08;目前还只会简单小游戏&#xff09;&#xff0c…...

设计模式学习2

代理模式&#xff1a;Proxy 动机 “增加一层间接层”是软件系统中对许多复杂问题的一种常见解决方案。在面向对象系统中&#xff0c;直接食用某些对象会带来很多问题&#xff0c;作为间接层的proxy对象便是解决这一问题的常见手段。 2.伪代码&#xff1a; class ISubject{ pu…...

Rust:如何判断位置结构的JSON串的成员的数据类型

如何判断位置结构的JSON串的成员的数据类型&#xff0c;给一个Rust的例子&#xff0c;其中包含对数组的判断&#xff1f; 在Rust中&#xff0c;你可以使用serde_json库来处理JSON数据&#xff0c;并通过serde_json::Value类型的方法来判断JSON串中成员的数据类型。以下是一个示…...

Kafka(五)生产者

目录 Kafka生产者1 配置生产者bootstrap.serverskey.serializervalue.serializerclient.id""acksallbuffer.memory33554432(32MB)compression.typenonebatch.size16384(16KB)max.in.flight.requests.per.connection5max.request.size1048576(1MB)receive.buffer.byte…...

【Leetcode】242.有效的字母异位词

一、题目 1、题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例1: 输入: s = "anagram", t = "nagaram" 输出: true示例2: 输入: …...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...