基于K8S部署ZooKeeper准备知识(StatefulSet)

这篇具有很好参考价值的文章主要介绍了基于K8S部署ZooKeeper准备知识(StatefulSet)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用k8s部署zk时,会部署一个headless service.科普一下headless service:

Headless Service(无头服务)是 Kubernetes 中的一种服务类型,它与普通的 ClusterIP 服务有所不同。普通的 ClusterIP 服务会为每个服务分配一个虚拟 IP 地址,并通过负载均衡将流量转发到后端 Pod。而 Headless Service 不分配虚拟 IP,而是直接暴露 Pod 的 IP 地址,允许直接访问后端 Pod。

Headless Service 的主要特点是它不提供负载均衡和代理功能。当你使用 Headless Service 发送请求时,Kubernetes 不会进行负载均衡和流量转发,而是直接返回与服务关联的所有后端 Pod 的 IP 地址。这样,你可以在应用中直接使用这些 IP 地址进行自定义的负载均衡或直接访问特定的 Pod。

Headless Service 在以下场景中特别有用:

  1. 需要对每个后端 Pod 进行直接访问,例如数据库或分布式存储系统。

  2. 需要自定义负载均衡逻辑,而不是依赖 Kubernetes 提供的默认负载均衡功能。

  3. 需要通过 DNS 查找所有后端 Pod 的 IP 地址。

通过定义一个 ClusterIP 为 "None" 的 Service 类型,可以创建 Headless Service。在 Service 的配置中,将 spec.clusterIP 设置为 "None" 即可。

总结:Headless Service 是 Kubernetes 中的一种服务类型,它不分配虚拟 IP,而是直接暴露后端 Pod 的 IP 地址,允许直接访问后端 Pod。它适用于需要直接访问后端 Pod、自定义负载均衡逻辑或通过 DNS 查找所有后端 Pod IP 地址的场景。

划重点:通过定义一个 ClusterIP 为 "None" 的 Service 类型,可以创建 Headless Service。在 Service 的配置中,将 spec.clusterIP 设置为 "None" 即可。

还会部署一个Cluster Service,理解了Headless Service以后,这个就容易理解了,Cluster Service跟Headless Service恰好相反,Cluster Service是可以通过虚拟IP地址经过负载均衡来访问服务对应的POD提供的服务的。

然后还会部署一个PodDisruptionBudget,科普如下:

PodDisruptionBudget(Pod 破坏预算)是 Kubernetes 中的一种资源对象,用于控制在节点维护、故障恢复或其他情况下可以同时终止的 Pod 的数量。它提供了一种机制,确保在进行节点维护或删除节点时,系统仍然具备足够的可用性和容错能力。

PodDisruptionBudget 通过定义最小可用 Pod 数量来限制 Pod 的终止数量。它指定了一个最小可用副本数,系统会确保在终止 Pod 时,剩余的可用副本数不会低于这个指定的最小值。如果终止操作会导致可用副本数低于最小可用副本数,Kubernetes 将拒绝终止 Pod,并且不会执行维护操作或节点删除。

PodDisruptionBudget 的主要特点如下:

  1. 定义最小可用 Pod 数量:通过指定一个最小可用副本数,确保在终止 Pod 时系统仍然保持足够的可用性。

  2. 控制 Pod 终止数量:在节点维护或其他情况下,控制可以同时终止的 Pod 的数量,避免系统过度受影响。

  3. 与 Deployment、StatefulSet 等资源对象结合使用:PodDisruptionBudget 可以与其他控制 Pod 创建和调度的资源对象进行关联,以提供更精确的控制和保护。

通过定义 PodDisruptionBudget,可以为关键的应用程序或服务设置保护机制,确保在节点维护或故障恢复期间,系统仍然能够保持足够的可用性和容错能力。

总结:PodDisruptionBudget 是 Kubernetes 中的一种资源对象,用于控制在节点维护、故障恢复或其他情况下可以同时终止的 Pod 的数量。它通过定义最小可用 Pod 数量来限制 Pod 终止数量,确保系统仍然具备足够的可用性和容错能力。

最后还要部署一个StatefulSet,同样科普一下:

StatefulSet(有状态副本集)是 Kubernetes 中的一种控制器(Controller),用于管理有状态应用的部署和运行。与 Deployment 控制器相比,StatefulSet 提供了一些额外的功能和保证,以支持有状态应用的需求。

StatefulSet 的主要特点如下:

  1. 稳定的唯一标识:每个 StatefulSet 中的 Pod 都有一个稳定的唯一标识符,即 Pod 名称。这使得 Pod 在重新启动、缩放或迁移时能够保持一致的标识,方便与其他系统进行交互或保持持久化存储的连接。

  2. 有序部署和伸缩:StatefulSet 可以按顺序逐个部署和伸缩 Pod。每个 Pod 都有一个固定的索引,确保 Pod 在创建、删除和更新时的有序性。

  3. 网络标识和稳定的网络域名:每个 Pod 都有一个稳定的网络标识,可以使用 Pod 名称直接访问。此外,每个 Pod 还会分配一个稳定的网络域名,以便其他应用程序可以直接通过域名进行访问。

  4. 持久化存储卷:StatefulSet 支持与持久化存储卷(Persistent Volume)的集成,确保 Pod 在重启、迁移或缩放时可以保持其持久化数据。

  5. 有序的删除:当删除 StatefulSet 时,它会按照逆序删除其中的 Pod,确保在删除过程中不会中断应用的可用性。

StatefulSet 适用于有状态应用程序,如数据库、消息队列、缓存等,这些应用程序通常需要固定的标识和稳定的网络连接,以及持久化的存储。

总结:StatefulSet 是 Kubernetes 中的一种控制器,用于管理有状态应用的部署和运行。它提供了稳定的唯一标识、有序部署和伸缩、网络标识和稳定的网络域名、持久化存储卷以及有序的删除等功能,以满足有状态应用的需求。

再细看一下StatefulSet的定义清单,同样会看一些不熟悉的名词。

affinity:

Affinity(亲和性)是 Kubernetes 中的一个概念,用于指定 Pod 与其他资源(节点、Pod)之间的关联性和互动规则。通过使用亲和性,可以对 Pod 的调度和部署进行更精确的控制,以满足特定的需求和策略。

在 Kubernetes 中,有两种类型的亲和性可供使用:

  1. Node Affinity(节点亲和性):通过指定条件和规则,将 Pod 调度到特定的节点。可以基于节点的标签(labels)或其他属性来定义亲和性规则,以确保 Pod 被调度到符合条件的节点上。

  2. Pod Affinity/Pod Anti-Affinity(Pod 亲和性/反亲和性):通过指定条件和规则,将 Pod 调度到与其他 Pod 相关的节点上或避免与其他 Pod 调度在同一节点上。可以根据其他 Pod 的标签、Pod 的命名空间(namespace)或其他属性来定义亲和性规则。

通过使用亲和性规则,可以实现一些常见的场景和策略,例如:

  • 将相关的服务 Pod 调度到同一节点上,以提高网络延迟和性能。

  • 将相互依赖的应用程序 Pod 调度到同一节点上,以减少跨节点通信的开销。

  • 将敏感数据处理的 Pod 与其他非敏感数据处理的 Pod 隔离在不同的节点上。

亲和性规则通过使用标签选择器(label selectors)和拓扑约束(topology constraints)来定义,以满足特定的条件和策略。亲和性可以在 Pod 的配置文件中通过 affinity 字段进行定义。

总结:亲和性是 Kubernetes 中用于指定 Pod 与其他资源之间关联性和互动规则的概念。通过使用节点亲和性和 Pod 亲和性/反亲和性,可以对 Pod 的调度和部署进行更精确的控制,以满足特定的需求和策略。

topologyKey:

在 Kubernetes 中,topologyKey 是用于定义亲和性规则的一个关键字段。它用于指定 Pod 亲和性或反亲和性的拓扑约束条件。

topologyKey 的作用是与节点的拓扑信息相关联,以决定 Pod 应该被调度到哪个节点。它可以是节点的标签(label)或节点的拓扑域(例如:kubernetes.io/hostnamefailure-domain.beta.kubernetes.io/zone 等)。

通过设置 topologyKey,可以根据节点的拓扑信息来约束 Pod 的调度,从而实现一些特定的策略和需求,例如:

  • 将 Pod 调度到具有特定标签的节点上,以满足特定的硬件或软件要求。

  • 将 Pod 调度到特定的区域(zone)或机架(rack)上,以提高容灾性和可用性。

topologyKey 可以在 Pod 的亲和性规则或反亲和性规则中进行设置。通过结合标签选择器和拓扑约束,可以更精确地定义 Pod 的调度策略。

总结:topologyKey 是用于定义亲和性规则中的一个关键字段,在 Kubernetes 中与节点的拓扑信息相关联。通过设置 topologyKey,可以根据节点的标签或拓扑域来约束 Pod 的调度,以满足特定的策略和需求。

kubernetes.io/hostname 这个topologyKey怎么理解 ?

这个topologyKey理解起来有点困难,单独列一篇出来,讲得详细一点,参考这篇《Kubernetes之Pod亲和性与反亲和性的TopologyKey》。

image: "k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10" 这个镜像与官方的zk有区别吗

k8s.gcr.io这个容器镜像仓库下载会超时,去dockerhub(https://hub.docker.com/)上搜索kubernetes-zookeeper,能找到很多,选择“docker pull tonybian/kubernetes-zookeeper”这个下载。tag成私服的镜像,并上传私服harbor,然后删除原镜像:

docker tag tonybian/kubernetes-zookeeper ${HARBOR_DOMAIN}/google_containers/kubernetes-zookeeper:1.0-3.4.10
​
docker rmi tonybian/kubernetes-zookeeper:latest
​
docker push ${HARBOR_DOMAIN}/google_containers/kubernetes-zookeeper:1.0-3.4.10

可以使用这个启动:sh -c start-zookeeper servers=3 ?这是什么命令?

sh -c zookeeper-ready

zk持久化数据使用了StatefulSet的持久化卷声明模板(volumnClaimTemplate)属性

介绍篇幅较长,单独起一篇说明,跳转《StatefulSet的volumeClaimTemplates》查看文章来源地址https://www.toymoban.com/news/detail-477351.html

到了这里,关于基于K8S部署ZooKeeper准备知识(StatefulSet)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • k8s之StatefulSet

    是用来创建有状态应用,可以通过过某种方式记录这些状态,然后在 Pod 被重新创建时,能够为新 Pod 恢复这些状态。 什么是有状态应用? 首先是需要有数据的持久化,及时Pod被重启后,也能恢复,与重启前保持一致。然后是应用创建的所有pod有依赖关系,顺序的创建、需要

    2024年02月07日
    浏览(34)
  • K8S如何部署ZooKeeper以及如何进行ZooKeeper的平滑替换

    在之前的章节中,我们已经成功地将Dubbo项目迁移到了云环境。在这个过程中,我们选择了单机ZooKeeper作为注册中心。接下来,我们将探讨如何将单机ZooKeeper部署到云端,以及在上云过程中可能遇到的问题及解决方案。 ZooKeeper是一个开源的分布式协调服务,由Apache软件基金会

    2024年02月11日
    浏览(31)
  • k8s笔记 | StatefulSet 有状态

    利用滚动更新中的partition 属性,可以实现简易的灰度发布效果 简介:加入我们有5个pod,如果当partition设置为3,那么此时滚动更新是,只会更新需要=3的pod,利用该机制,我们可以通过控制partion来决定更新那一部分的内容,确定没有问题后,在逐渐增大更新pod的数量;如果par

    2024年04月27日
    浏览(30)
  • 开源项目one-api的k8s容器化部署(上)-- 制作镜像及部署准备

    最近需要对开源项目one-api进行k8s容器化部署,主要分以下几个步骤: 制作docker镜像 申请mysql和redis数据库 docker-compose部署方式 k8s部署方式 整个的篇幅比较长,将会分成上下两篇来阐述。 开源项目one-api已经提供了Dockerfile文件,按说制作一个私有镜像是非常简单的事情,可是

    2024年04月15日
    浏览(24)
  • k8s部署kafka,并使用zookeeper做注册中心

    kafka在3.x版本后增加KRaft作为自己的注册中心,可以不依赖外部的zk;这里上一篇已经部署好了zk,kafka依然使用zk作为注册中心。 这里使用kafka是为集成zipkin收发微服务接口链路日志数据,只需要部署1个实列即可够用。 编写脚本yaml vi kafka.yaml 执行部署 kubectl apply -f kafka.yaml 查

    2024年02月07日
    浏览(33)
  • 【K8S系列】深入解析StatefulSet(二)

    那些看似不起波澜的日复一日,一定会在某一天让你看见坚持的意义。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记一级论点 蓝色 :用来标记二级论点 Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下Sta

    2023年04月09日
    浏览(37)
  • 【K8S系列】深入解析StatefulSet(一)

    那些看似不起波澜的日复一日,一定会在某一天让你看见坚持的意义。 文章标记颜色说明: 黄色 :重要标题 红色 :用来标记结论 绿色 :用来标记一级论点 蓝色 :用来标记二级论点 Kubernetes (k8s) 是一个容器编排平台,允许在容器中运行应用程序和服务。今天学习一下Sta

    2024年01月16日
    浏览(33)
  • k8s 部署zookeeper-kafka,nfs作为存储

    目录 备注:nfs存储参考链接 一、zk镜像拉取并制作为自己镜像 二、编辑zookeeper.yaml文件  三、安装zk并检查状态  四、验证zookeeper集群可用性 五、制作对应版本的kafka镜像 六、编辑kafka.yaml文件 七、创建kafka并查看状态 八、zk与kafka连通性查看 九、错误解决 k8s 配置hadoop集群,

    2024年02月16日
    浏览(33)
  • k8s控制器之StatefulSet--第四弹StatefulSet 的更新策略

    在 Kubernetes 1.7 及之后的版本中,可以为 StatefulSet 设定 .spec.updateStrategy 字段,以便您可以在改变 StatefulSet 中 Pod 的某些字段时(container/labels/resource request/resource limit/annotation等)禁用滚动更新。 On Delete OnDelete 策略实现了 StatefulSet 的遗留版本(kuberentes 1.6及以前的版本)的行为

    2024年02月09日
    浏览(38)
  • k8s 控制器StatefulSet原理解析

    🐇明明跟你说过:个人主页 🏅个人专栏:《Kubernetes航线图:从船长到K8s掌舵者》 🏅 🔖行路有良友,便是天堂🔖 目录 一、前言 1、k8s概述 2、有状态服务和无状态服务  二、StatefulSet基本概念 1、StatefulSet特性  2、StatefulSet与Deployment、DaemonSet的对比  三、StatefulSet核心组件

    2024年04月17日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包