【k8s】Kubernetes存储之 StatefulSet 控制器通过 Headless Service 管理Pod

2023-11-03

一、StatefulSet 控制器简介

官方网址

  • StatefulSet 是用来管理有状态应用的工作负载 API 对象。

  • StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供序号和唯一性保证。

  • StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值:

    稳定的、唯一的网络标识符。
    稳定的、持久的存储。
    有序的部署和缩放。
    有序的、自动的滚动更新。

  • 和 Deployment 相同的是,StatefulSet 管理了基于相同容器定义的一组 Pod。但和 Deployment不同的是,StatefulSet 为它们的每个 Pod 维护了一个固定的 ID。这些 Pod是基于相同的声明来创建的,但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID。

  • StatefulSet给所有的Pod进行了编号,编号规则是: ( s t a t e f u l s e t 名 称 ) − (statefulset名称)- (statefulset)(序号),从0开始。

  • 删除或者收缩 StatefulSet 并不会删除它关联的存储卷。这样做是为了保证数据安全,它通常比自动清除 StatefulSet
    所有相关的资源更有价值。

  • 当删除 StatefulSets 时,StatefulSet 不提供任何终止 Pod 的保证。为了实现 StatefulSet 中的Pod 可以有序的终止,可以在删除之前将 StatefulSet 缩放为 0。

  • 删除或者收缩 StatefulSet 并不会删除它关联的存储卷,这样做是为了保证数据安全。

  • Pod被删除后重建,重建Pod的网络标识也不会改变,Pod的拓扑状态按照Pod的“名字+编号”的方式固定下来,并且为每个Pod提供了一个固定且唯一的访问入口,即Pod对应的DNS记录,同时重建时保证每个pod挂载到原来的卷上。

  • StatefulSet将应用状态抽象成了两种情况:
    拓扑状态:应用实例必须按照某种顺序启动。新创建的Pod必须和原来Pod的网络标识一样
    存储状态:应用的多个实例分别绑定了不同存储数据。

二、创建无存储 StatefulSet

01_创建 Headless service

vim service.yml

apiVersion: v1
kind: Service
metadata:
 name: nginx-svc
 labels:
  app: nginx
spec:
 ports:
 - port: 80
   name: web
 clusterIP: None
 selector:
  app: nginx

在这里插入图片描述

02_创建StatefulSet

  • 指定服务为创建的无头服务:nginx-svc

特点:

  • 指定StatefulSet名称为 web,pod命名自动为 web-数字编号
  • 发现名称根据副本个数依次排序,从 0 开始:web-0,web-1,web-2,web-3…
  • 上一个pod处于 Running和Ready 后再去创建下一个pod
  • 名称是它们的唯一标识
    vim pod.yml
apiVersion: apps/v1
kind: StatefulSet
metadata:
 name: web
spec:
 serviceName: "nginx-svc"
 replicas: 2
 selector:
  matchLabels:
   app: nginx
 template:
  metadata:
   labels:
    app: nginx
  spec:
   containers:
   - name: nginx
     image: myapp:v1
     ports:
     - containerPort: 80
       name: web

在这里插入图片描述

03_测试

检查pod在集群内部的地址: headless service 的 CNAME 指向 SRV 记录(记录每个 Running 和 Ready 状态的 Pod)。SRV 记录指向一个包含 Pod IP 地址的记录表项。
在这里插入图片描述
删除StatefulSet并重建,检查集群内部IP: 发现Pod 的序号、主机名、SRV 条目和记录名称没有改变,但和 Pod 相关联的 IP 地址发生了改变。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【k8s】Kubernetes存储之 StatefulSet 控制器通过 Headless Service 管理Pod 的相关文章

  • k8s之ReplicaSet

    我们在定义pod资源时 可以直接创建一个kind Pod类型的自主式pod 但是这存在一个问题 假如pod被删除了 那这个pod就不能自我恢复 就会彻底被删除 线上这种情况非常危险 所以今天就给大家讲解下pod的控制器 所谓控制器就是能够管
  • 十六、K8s安全管理与资源限制

    实验环境 按照图示部署好了K8s集群 一个Master 两个worker nodes 访问控制概述 apiserver作为k8s集群系统的网关 是访问及管理资源对象的唯一入口 余下所有需要访问集群资源的组件 包括kube controlle
  • [云原生专题-22]:K8S - 集群编排工具K8S与SWARM比较与技术选择

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122750196 目录 前言 第1章
  • K8s中的Deployment

    Deployment是kubernetes在1 2版本中引入的新概念 用于更好的解决Pod的编排问题 为此 Deployment在内部使用了ReplicaSet来实现目的 我们可以把Deployment理解为ReplicaSet的一次升 级
  • DHorse系列文章之操作手册

    在介绍DHorse的操作之前 我们先来看一下发布一个系统的流程是什么样的 发布系统的流程 我们以一个Springboot系统为例 来说明一下发布流程 1 首先从代码仓库下载代码 比如Gitlab 2 接着是进行打包 比如使用Maven 3
  • underlay和overlay? & 传统网络和数据中心网络 ?

    underlay和overlay 百度 Underlay 和 Overlay 是网络架构中两个常用的概念 用于描述不同层次或视角下的网络结构和通信方式 1 Underlay 底层网络 Underlay 是指基础网络层 即物理网络或基础网络架
  • k8s优雅停服

    在应用程序的整个生命周期中 正在运行的 pod 会由于多种原因而终止 在某些情况下 Kubernetes 会因用户输入 例如更新或删除 Deployment 时 而终止 pod 在其他情况下 Kubernetes 需要释放给定节点上的资源时
  • Harbor镜像仓库搭建

    1 安装docker comprose docker comprose是docker容器批量管理工具 curl L https get daocloud io docker compose releases download 1 25 0
  • k8s v1.16设置Job ttlSecondsAfterFinished不生效

    目录 Completed的job默认不会清理 配置自动清理job ttl机制自动清理完成的job ttl controller 开启 TTLAfterFinished kube apiserver开启TTLAfterFinished kub
  • wireshark 抓包学习TLS握手(ECDHE)

    首先放出经典的流程图 TLS 握手共分四个阶段 为了便于理解 我用wireshark抓了包来分析每一个阶段 Client Hello 第一次握手 客户端首先会发一个 Client Hello 消息 消息里面有客户端使用的 TLS 版本号 支
  • k8s部署springboot

    前言 首先以SpringBoot应用为例介绍一下k8s的部署步骤 1 从代码仓库下载代码 比如GitLab 2 接着是进行打包 比如使用Maven 3 编写Dockerfile文件 把步骤2产生的包制作成镜像 4 上传步骤3的镜像到远程仓库
  • kubernetes集群更新证书(kubeadm方式)

    一 kubernets证书详情 1 查看证书 tree etc kubernetes pki etc kubernetes pki apiserver crt apiserver etcd client crt apiserver etcd
  • Deployment Controller 典型使用场景

    1 重新调度 Rescheduling 不管想运行 1 个副本还是 1000 个副本 副本控制器都能确保指定数量的副本存在于集群中 即使发生节点故障或 Pod 副本被终止运行等意外状况 2 弹性伸缩 Scaling 手动或者通过自动扩容代理
  • k8s Pod定义yaml配置文件详解

    此文件相关配置查询 此文件只做参考 以查询为准 kubectl explain 为文档查询命令如 kubectl explain pod spec volumes apiVersion v1 版本 kind pod 类型 pod metad
  • 初学容器:Docker

    1 环境初始化 1 1 安装git vim curl等常用工具 sudo apt update sudo apt install y git vim curl jq 1 2 ubuntu是不支持远程连接的 需要安装ssh服务 sudo ap
  • kubeadm构建(Calico+Dashboard+Containerd)

    文章目录 前言 一 环境 二 部署容器网络 CNI master操作 1 下载yamll 2 修改yaml 3 部署 三 部署 Dashboard 1 下载yaml 2 修改yaml 3 部署 4 创建管理员 四 切换容器引擎为Contai
  • kubeadm配置虚拟机k8s集群

    环境 centos7 vm pro windows terminal termius 虚拟机 硬件配置 2核2G 实验用 具体可根据电脑调整 配置3台 master01 node01 node02 通过克隆虚拟机直接复制 配置通一项以后建议
  • Kubernets原理分解

    主节点 master 快速介绍 master也要装kubelet和kubeproxy 前端访问 UI CLI kube apiserver scheduler controller manager etcd kubelet kubeprox
  • K8S暴露服务的三种方式

    文章目录 暴露服务的三种方式 NodePort LoadBalane Ingress 内容参考 暴露服务的三种方式 NodePort 将服务的类型设置成NodePort 每个集群节点都会在节点上打 开 一 个端口 对于NodePort服务
  • 国内k8s集群部署的几种方式

    前言 总所周知 由于某种原因 通过官方的方式在国内是无法顺利部署k8s集群的 这里记录下在国内部署的几种方式 部署方式 目前我所了解有以下几种方式 使用kubeadmin通过离线镜像的方式 网上教程和镜像包挺多的 通过厂商集成的方式如 ra

随机推荐

  • 1.4亿在线背后-QQ-IM后台架构的演化与启示

    保存于 http pan baidu com s 1bpDZc7d
  • MySQL异常:TIMESTAMP with implicit DEFAULT value is deprecated

    问题 D software mysql mysql 5 7 17 winx64 mysql 5 7 17 winx64 bin gt mysqld initialize 2017 12 13T07 08 35 613357Z 0 Warni
  • 51单片机:TLC549测量电压,并将测量值显示在数码管上

    51单片机 TLC549测量电压 并将测量值显示在数码管上 要求 在51单片机上利用TLC549这个A D转换器测量电压 并将测量值显示在数码管上 电源范围是0 5V 可以实时测量出电压大小并显示出来 仿真电路图 代码如下 TLC549测量
  • 资源分配与调度

    1 资源管理概述 1 1 资源管理的目的和任务 目的 1 保证资源的高利用率 2 在 合理 时间内使所有顾客有获得所需资源的机会 3 对不可共享的资源实施互斥使用 4 防止由资源分配不当而引起的死锁 对资源的管理应包括以下几个方面 1 资源
  • Boost练习程序(program_options)

    include
  • MFC 单文档调用对话框

    1 插入新的Dialog 如下图 2 修改ID位 IDD XMB 3 在单文件的Menu 中选中需要链接的按键 右键添加处理程序 如下图所示 添加完成后 在项目的xxxview cpp中会生成如下函数 4 对新添加的IDD XMB的Dial
  • VS在编译后.obj文件出现错误 error LNK2019: 无法解析的外部符号 的一种可能

    若有包含其他库 且规模较大 在写自己的代码时尽量避免把代码放在如小写 common 这种常见名字的文件夹内 否则容易出现编译成功 但 obj文件找不到某个函数导致错误LNK2019
  • GBase 8a视频配套联系

    1 以下关于粗粒度智能牵引描述正确的是 A 免维护 自动建立 B 每一列数据都会生成一个粗粒度智能牵引 C 牵引的建立和维护对资源的消耗可以忽略不计 D 记录DC内的最大值 最小值 空值 求和值等 答案ACD 2 GBase 8a集群数据库
  • UART和SPI简介

    UART 即通用异步收发器 是一种通用的串行 异步通信总线 该总线有两种数据线 可以实现数据的发送和接收 在嵌入式系统中常用于主机与辅助设备之间的通信 通信基础 并行和串行 并行通信 串行通信 单工通信 双工通信 半双工 发送和接收不可以同
  • c++观察者模式

    观察者模式 1 观察者模式简介 观察者模式也叫发布 订阅模式 模型 视图模式 源 监听器模式以及从属者模式 观察者模式定义了对象之间的一对多依赖关系 使得每当一个对象状态发生改变时 其相关依赖对象皆得到通知并被自动更新 2 实例讲解 假如张
  • wsl linux 安装

    1 首先确保windwos的操作系统 win 10 我的系统版本Microsoft Windows 版本 10 0 17134 285 2 开启 适用于linux的windows子系统 在 控制面板 程序 程序和功能 中 3 下载linux
  • 刚刚微软的3月安全更新中,这几个安全漏洞值得注意

    近日 安全专家建议IT团队应优先修补两个零日漏洞 一个是微软Outlook的认证机制 另一个是web标记的绕过 这两个漏洞是微软在其3月补丁星期二安全更新中披露的74个安全漏洞的一部分 在一篇博文中 Automox的研究人员建议企业在24小
  • 获取map的长度、map与list的区别

    获取map的长度 map与list的区别 1 首先看一下map和list有何区别 List 是存储单列数据的集合 存储的数据是有序并且是可以重复的 Map 存储双列数据的集合 通过键值对存储数据 存储 的数据是无序的 Key值不能重复 va
  • TCP协议三次握手,四次挥手

    TCP建立连接的过程叫做握手 握手需要在客户端和服务器端之间交换三个TCP报文段 称之为三次握手 TCP断开连接的过程叫做挥手 即在客户端和服务器端之间交换四个TCP报文段 称之为四次挥手 下面是一次完整的TCP连接过程 上图中对于发送SY
  • echart 点击事件

    以柱状图为例 点击单个柱形上 myChart off click 在渲染点击事件之前先清除点击事件 一定要加上否则会重复加载先前的点击事件 myChart on click function params console log 获取点击的
  • 内核dma_cache_maint介绍

    搞idm internal DMA 模块时 看到数据从主芯片传输到WiFi芯片之前 会有一个idm invalid cache的动作 该函数里封装着dma cache maint 这也就是我们平时经常说的刷cache 那这个内核函数作用是怎
  • Python随机生成企业及统一社会信用代码

    import random import string 随机生成企业名称 def generate company name prefix ABC XYZ ACME BEST TOP suffix Corp Inc Ltd LLC retu
  • 免费AI视频换脸工具-roop安装教程

    工具介绍 roop是一款使用python开发的深度AI视频换脸工具 不过目前工具没有开箱即用 需要一点点的python开发命令知识 不过官方也提供文档步骤 建议使用python 3 10 安装完必须的包即可 安装步骤 1 必备的工具环境 自
  • 【深度学习】手写数字识别及神经网络基本模型

    2021 10 7 学习日记 手写数字识别及神经网络基本模型 1 概述 张量 tensor 是数字的容器 是矩阵向任意维度的推广 其维度称为轴 axis 深度学习的本质是对张量做各种运算处理 其分层几乎总是通过神经网络 neural net
  • 【k8s】Kubernetes存储之 StatefulSet 控制器通过 Headless Service 管理Pod

    一 StatefulSet 控制器简介 官方网址 StatefulSet 是用来管理有状态应用的工作负载 API 对象 StatefulSet 用来管理 Deployment 和扩展一组 Pod 并且能为这些 Pod 提供序号和唯一性保证