【K8S】Kubernetes 中有状态的资源对象——StatefulSet

这篇具有很好参考价值的文章主要介绍了【K8S】Kubernetes 中有状态的资源对象——StatefulSet。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、StatefulSet 资源对象需求背景

现在基本上很多服务中的应用都是有状态的,比如MySQL数据库、Redis等,因为其中的数据在不断地变化,所以这些应用每个时刻都处于一个不同的状态。或者一个系统中存在多个不同的应用,这些应用存在一定的依赖关系。例如一个博客服务,该服务中包含了Redis缓存和MySQL数据库,我们在启动时需要先启动 MySQL数据库,Redis缓存,再去启动博客应用。Kubernetes 未这种存在状态的应用专门设计了一种资源对象,就是 StatefulSet

二、在 Yaml 文件中定义 StatefulSet 资源对象

StatefulSet 资源对象类似于 Deployment 资源对象,都是包含多个 Pod 副本,但是 Deployment 资源对象的 Pod 副本Pod 名称不固定,而且启动顺序也是随机的,但是 StatefulSet 资源对象Pod 副本的名称是固定的,且启动关系也是确定的。

2.1 StatefulSet 资源对象状态

  • StatefulSet 资源对象的Pod 副本名一般取值为节点名 + 序号(序号从0开始,最大值未Pod副本数目-1)。StatefulSet 资源对象的Pod副本的启动先后顺序依赖于这个Pod副本的序号。
  • StatefulSet 资源对象的访问需要额外的创建对应的 Service 资源对象,该Service 资源对象的名称要与 StatefulSet 资源对象中定义的 ServiceName 一致。

2.2 StatefulSet 资源对象定义

StatefulSet 资源对象的简称是sts。下面是 StatefulSet 资源对象与其对应的 Service 资源对象在 Yaml 文件中定义的内容示例:

apiVersion: apps/v1		# API 资源对象的版本
kind: StatefulSet		# API 资源对象的类型
metadata:
  name: test-sts		# # API 资源对象名

spec:
  serviceName: test-svc
  volumeClaimTemplates: 		# 在StatefulSet 资源对象中直接定义对应的PVC
  - metadata:
      name: test-redis-pvc		# 定义了该 PVC 的名称
    spec:
      storageClassName: nfs-client		# 明确PVC与PV绑定的StorageClass
      accessModes:		# 定义需要的存储设备的权限
        - ReadWriteMany
      resources:		# 定义需要的存储容量大小
        requests:
          storage: 60Mi

  replicas: 2		# 明确 statefulSet 资源对象对应的 pod 副本数
  selector:		# 定义statefulSet 标签选择器
    matchLabels:
      app: test-sts

  template:
    metadata:		# statefulSet资源对象下Pod 副本中的标签
      labels:
        app: test-sts
    spec:
      containers:
      - image: redis:5-alpine
        name: redis
        ports:
        - containerPort: 6379

        volumeMounts:
        - name: test-redis-pvc
          mountPath: /redis-data
---
apiVersion: v1
kind: Service
metadata:
  name: test-svc

spec:
  selector:
    app: test-sts
  ports:
  - port: 6379
    protocol: TCP
    targetPort: 6379

2.3 StatefulSet 资源对象

与我们之前讨论的 Deployment 资源对象相比,StatefulSet 资源对象的定义主要有2处独特之处,一个是serviceName,一个是volumeClaimTemplates。

  • serviceName: 该字段规定了使用 DNS 访问Pod时,Pod所属的子域。形式如:$(pod 名称).$(serviceName)
  • volumeClaimTemplates: StatefulSet 资源对象内置的专门用于定义 PVC 的字段;

因为 StatefulSet 资源对象是有状态的,不存在 Pod 漂移的情况,因此可以通过域名 \$(pod 名称).\$(serviceName) 被稳定的访问。

三、StatefulSet 资源对象的使用

利用上面的Yaml 文件,我们通过如下命令直接创建 StatefulSetService 资源对象:

kubectl apply -f test-svc-sts.yaml

通过如下命令可查看 statefulSet 资源对象和 service 资源对象的状态,同时使用hostname 命令查看短格式节点名与Pod名称的关系:文章来源地址https://www.toymoban.com/news/detail-765917.html

# 查看节点名短格式
hostname
# 查看StatefulSet资源对象状态
kubectl get sts
# 查看Service资源对象状态
kubectl get svc
# 查看资源对象test-sts详细信息
kubectl describe test-sts
# 查看资源对象test-svc详细信息
kubectl describe test-svc

到了这里,关于【K8S】Kubernetes 中有状态的资源对象——StatefulSet的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8s(Kubernetes)学习(四):Controller 控制器:Deployment、StatefulSet、Daemonset、Job

    什么是 Controller 以及作用 常见的 Controller 控制器 Controller 如何管理 Pod Deployment 基本操作与应用 通过控制器实现 Pod 升级回滚和弹性伸缩 StatefulSet 基本操作与应用 Daemonset 基本操作与应用 Job 基本操作与应用 Controller 无法解决问题 1 Controller 控制器 官网: http://kubernetes.p2hp.com/

    2024年02月09日
    浏览(56)
  • [Kubernetes]5. k8s集群StatefulSet详解,以及数据持久化(SC PV PVC)

    前面通过 deployment 结合 service 来部署 无状态的应用 ,下面来讲解通过 satefulSet 结合 service 来部署 有状态的应用 无状态: 无状态 (stateless) 、牲畜 (cattle) 、无名 (nameless) 、可丢弃 (disposable) 有状态: 有状态 (stateful) 、宠物 (pet) 、具有名 (haviing name) 、不可丢弃 (non-disposable) St

    2024年02月01日
    浏览(44)
  • yum部署kubernetes(k8s)集群、k8s常用资源管理

    目录 一、环境搭建 1、准备环境 1)计算机说明,建议系统版本7.4或者7.6 2)修改所有主机的计算机名设置host文件  2、安装master节点 1)安装etcd配置etcd 2)安装k8s-master节点 3)配置apiserver 4)配置controller和scheduler 5)启动k8s服务 3、安装k8s-master上的node 1)安装node 2)配置kube

    2024年02月13日
    浏览(64)
  • kubernetes/k8s配置资源管理

    配置资源管理 Secret Configmap*.1.2加入新特征 1.18 Secret:保存密码,token,敏感的k8s资源 这类数据可以存放在镜像当中,但是防止secret可以更方便的控制,减少暴漏风险。 保存加密的信息 Secret的类型: docker-registry:存储docker仓库认证信息,以及docker组件的认证信息(私有的) generic:是

    2024年01月17日
    浏览(53)
  • (kubernetes)k8s常用资源管理

    目录 k8s常用资源管理 1、创建一个pod 1)创建yuml文件 2)创建容器 3)查看所有pod创建运行状态 4)查看指定pod资源 5)查看pod运行的详细信息 6)验证运行的pod 2、pod管理 1)删除pod 2)查看删除pod无法找到 3)创建pod 4)发现最先创建的pod运行在k8s-master节点上,下载镜像速度太

    2024年02月13日
    浏览(50)
  • k8s资源对象

    什么是资源对象? 所谓资源对象是指在k8s上创建的资源实例;即通过apiserver提供的各资源api接口(可以理解为各种资源模板),使用yaml文件或者命令行的方式向对应资源api接口传递参数赋值实例化的结果;比如我们在k8s上创建一个pod,那么我们就需要通过给apiserver交互,传

    2024年02月03日
    浏览(39)
  • 【Kubernetes】K8s 查看 Pod 的状态

    NAME :Pod 的名称。 READY :代表 Pod 里面有几个容器,前面是启动的,后面是总数, 1 / 1 1/1 1/1 。 STATUS :就是当前 Pod 状态,最常见的就是 Running 正在运行,最期望的状态,只要不是 Running 的就说明有问题,就算是 Running 的就不一定没有问题。 状态 说明 Pending 挂起 在执行创建

    2024年01月15日
    浏览(96)
  • k8s资源对象(二)

    secret和configmap资源都是通过挂载的方式将对应数据挂载到容器内部环境中去使用,两者的使用没有太多的不同 ,configmap资源通常用于为pod提供配置文件;secret资源主要用于为pod提供证书、用户名密码等敏感数据; Configmap将非机密性信息(如配置信息)和镜像解耦, 实现方式为将

    2024年02月06日
    浏览(31)
  • 【Kubernetes资源篇】StatefulSet无状态服务管理入门实战详解

    官方中文参考文档 1、StatefulSet Pod控制器特性 StatefulSet(简写sts)也是K8S集群中的一种Pod资源管理器,与deployment Pod控制器不同的是,StatefulSet用于管理无状态程序,特性如下: 稳定的网络标识符:管理的Pod都拥有一个稳定的网络标识符。可以通过网络标识符进行访问。 有序部署

    2024年02月13日
    浏览(38)
  • Kubernetes(k8s)核心资源解析:Pod详解

    💖The Begin💖点点关注,收藏不迷路💖 Pod是Kubernetes中最小的调度单元,它可以包含一个或多个容器。Pod中的所有容器共享网络和存储卷,它们一起运行在同一个节点上。Pod提供了一种抽象层,使得容器可以作为一个逻辑单元来管理。 Pod中的容器共享IP地址、端口空间和存储

    2024年04月11日
    浏览(76)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包