首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

kubernetes kafka 和 zookeeper 有状态集群服务部署实践 (一)

kubernetes中提StatefulSet(1.5版本之前称为Petset)方便了有状态集群服务在上部署和管理。...zookeeperStatefulSet(Petset)资源和headless服务创建 StatefulSet是为了解决有状态服务问题(对应Deployments和ReplicaSets是为无状态服务而设计...(即没有Cluster IPService)来实现 有序部署,有序扩展,即Pod是有顺序,在部署或者扩展时候要依据定义顺序依次依序进行(即从0到N-1,在下一个Pod运行之前所有之前Pod必须都是...由于本文使用kubernetes为1.4.6版本,所以示例采用名称仍然为Petset。.../zkCli.sh [zk: localhost:2181(CONNECTED) 0] ls / [zookeeper] kafkaStatefulSet(Petset)资源和headless服务创建

19.6K50

KubernetesStatefulset 和 Operator

Statefulset简介 k8s权威指南这样介绍 “在Kubernetes系统,Pod管理对象RC、Deployment、DaemonSet和Job都面向无状态服务。...(1)每个节点都有固定身份ID,通过这个ID,集群成员可以相互发现并通信。 (2)集群规模是比较固定,集群规模不能随意变动。...另外,为了能够在其他节点上恢复某个失败节点,这种集群Pod需要挂接某种共享存储,为了解决这个问题,Kubernetes从1.4版本开始引入了PetSet这个新资源对象,并且在1.5版本更名为StatefulSet...StatefulSet本质上是Deployment一种变体,在v1.9版本已成为GA版本,它为了解决有状态服务问题,它所管理Pod拥有固定Pod名称,启停顺序,在StatefulSet,Pod...在Deployment,与之对应服务是service,而在StatefulSet与之对应headless service,headless service,即无头服务,与service区别就是它没有

1.5K50
您找到你想要的搜索结果了吗?
是的
没有找到

k8s实践(13)--有状态服务StatefulSet详解

(消费方不使用静态IP,而是通过DNS域名去找到某台特定机器) StatefulSet本质上是Deployment一种变体,在v1.9版本已成为GA版本,它为了解决有状态服务问题,它所管理...Pod拥有固定Pod名称,启停顺序,在StatefulSet,Pod名字称为网络标识(hostname),还必须要用到共享存储。       ...除了依照社区民意改了名字之外,这一 API 对象没有太大变化,kubernetes集群部署 Pod 增加了每索引最多一个”语义,有了顺序部署、顺序终结、唯一网络名称以及持久稳定存储。...headless service,即无头服务,与service区别就是它没有Cluster IP,解析它名称将返回该Headless Service对应全部PodEndpoint列表。...名字叫kafka,那么第一个起来Pet叫kafka-0,第二个叫kafk-1,依次类推,基于Headless Service(即没有Cluster IPService)来实现。

3.2K20

k8s实践(12)--K8s service服务详解

Kubernetes Service这个对象,并由Kubernetes管理和分配P地址 Cluster IP无法被ping,他没有一个“实体网络对象”来响应....”IP地址,因为它没有一个实体网络对象,所以无法响应ping命令。...5、总结各方式利弊 hostPort和hostNetwork直接使用节点网络,部署时节点需固定,访问ip固定(也可以用host),端口为正常端口 nodeport方式部署不要求固定节点,可通过集群内任一...比如StatefulSet名字叫kafka,那么第一个起来Pet叫kafka-0,第二个叫kafk-1,依次类推,基于Headless Service(即没有Cluster IPService)来实现...首先kafka和zookeeper都需要存储盘来保存有状态信息,其次kafka和zookeeper每一个实例都需要有对应实例Id(Kafka需要broker.id,zookeeper需要my.id)来作为集群内部每个成员标识

6.3K23

k8s部署Kafka集群

前言 本次目的是通过使用k8s搭建一个三节点kafka集群,因为kafka集群需要用到存储,所以我们需要准备三个持久卷(Persistent Volume) 简称就是PV。...创建zk-pv 首先通过nfs创建三个共享目录 mkdir -p /data/share/pv/{kafka01,kafka02,kafka03} 分别对应三节点zk集群三个pod持久化目录,创建好目录之后编写...persistentVolumeReclaimPolicy: Recycle --- 使用如下命令创建kafka-pk kubectl create -f kafka-pv.yaml 出现如下提示就代表创建成功...image-20200726131248218 创建Kafka集群 我们选择使用statefulset去部署kafka集群三节点,并且使用刚刚创建pv作为存储设备。...kind: StatefulSet metadata: name: kafka namespace: tools spec: serviceName: kafka-hs replicas

4K20

kubernetes 权威指南学习笔记(2) -- 基本概念和术语

StatefulSet 名字是kafka, 第一个pod叫kafka-0, 依次类推 StatefulSet 控制Pod副本启停顺序是受控,操作第n个Pod, 前n-1个Pod已经运行且准备好状态...StatefulSetPod采用稳定持久化存储卷,通过PV/PVC来实现, 删除Pod默认不会删除与StatefulSet相关存储卷。....kafkakafka-2.kafka 这些DNS名称可以直接在集群配置文件中固定下来。...名字由开发者自己定义,部署也不需要改,所以完全可以固定在配置。 最早使用环境变量(env),在每个Pod容器在启动,自动注入。但是不够直观。...地址池) 无法被Ping, 没有一个"实体网络对象"来响应 只能结合Service Port 组成一个具体通信端口,单独Cluster IP 不具备TCP/IP通信基础,并且他们属于集群内部封闭空间

89230

K8S部署Kafka集群 - 部署笔记

因此,在K8S集群里面部署类似kafka、zookeeper这种有状态服务,不能使用Deployment,必须使用StatefulSet来部署,有状态简单来说就是需要持久化数据,比如日志、数据库数据、...Service(即没有Cluster IPService)来实现 有序部署,有序扩展,即Pod是有顺序,在部署或者扩展时候要依据定义顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前...Service 用于创建PersistentVolumesvolumeClaimTemplates 定义具体应用StatefulSet StatefulSet每个PodDNS格式为: statefulSetName...; 当我们通过对":端口"请求建立连接,kafka服务器会通过 zookeeper 中注册监听器,找到定义公网监听器(默认监听器是PLAINTEXT、也可以自定义),然后通过listeners...如果在别的非kafka实例pod内容使用下面地址就没有这个告警了! 因为K8S规定:在Pod内容不可使用Pod自己service地址往自己连接!

5.4K31

有状态应用如何在k8s上快速扩容甚至自动扩容

“声明式 API”核心原理就是当用户向 Kubernetes 提交了一个 API 对象描述之后,Kubernetes 会负责为你保证整个集群里各项资源状态,都与你 API 对象描述需求相一致。...Kubernetes 通过启动一种叫做“控制器模式”无限循环,WATCH 这些 API 对象变化,不断检查,然后调谐,最后确保整个集群状态与这个 API 对象描述一致。...Operator 是同样道理,以我们 Redis Operator 为例,为了实现 Operator,我们首先需要将自定义对象说明注册到 Kubernetes ,这个对象说明就叫 CustomResourceDefinition...集群可在第二个集群镜像Kafka集群 Kafka Exporter提取其他Kafka指标数据以进行监控 Kafka Bridge向Kafka集群发出基于HTTP请求 Kafka组件架构比较复杂,...只需要启用此功能即可使用: features: - AutoScaling=true TiDB实现了一个TidbClusterAutoScaler CR 对象用于控制TiDB集群自动缩放行为。

1.7K40

Kubernetes 上部署 Kafka 集群

如果你在 Kubernetes 集群运行你微服务,那么在 Kubernetes 运行 Kafka 集群也是很有意义,这样可以利用其内置弹性和高可用特性,我们可以使用内置 Kubernetes...下面我们将来介绍下如何在 Kubernetes 上构建分布式 Kafka 集群,这里我们将使用 Helm Chart 和 StatefulSet 来进行部署,当然如果想要动态生成持久化数据卷,还需要提前配置一个...StorageClass 资源,比如基于 Ceph RBD ,如果你集群没有配置动态卷,则需要提前创建3个未绑定 PV 用于数据持久化。...然后查看下对应 Service 对象: > kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP...比如需要注意 zk 集群我们并没有做持久化,如果是生产环境一定记得做下数据持久化,在 values.yaml 文件根据需求进行定制即可,当然对于生产环境还是推荐使用 Operator 来搭建 Kafka

2.1K30

【重识云原生】第六章容器基础6.4.10.5节——Statefulset原理剖析

定义Stateful对象中有一个serviceName字段来告诉Stateful控制器使用具体service来解析它所管理PodIP地址。       ...Pod名称由StatfulSet对象名称+Pod创建所在索引组成 StatefulSet使用这个DNS记录解析规则来维持Pod拓扑状态。       ...尽管web-0.nginx这条DNS记录本身不会变但它解析到PodIP地址并不是固定。...在StatefulSet对象除了定义PodTemplate还会定义一个volumeClaimTemplates凡是被这个StatefulSet管理Pod都会声明一个对应PVC,这个PVC定义就来自于...Kubernetes为它查找名叫www-web-0PVC,就会直接找到旧Pod遗留下来同名 PVC进而找到跟这个PVC绑定在一起PV.这样新Pod就可以挂载到旧Pod对应那个Volume并且获取到保存在

55410

深入理解StatefulSet,用Kubernetes编排有状态应用

什么是StatefulSet 和Deployment一样StatefulSet也是一种可以帮助你部署和扩展Kubernetes Pod控制器,使用Deployment多数时候你不会在意Pod调度方式...但当你需要关心Pod部署顺序、对应持久化存储或者要求Pod拥有固定网络标识(即使重启或者重新调度后也不会变)StatefulSet控制器会帮助你,完成调度目标。...每个由StatefulSet创建出来Pod都拥有一个序号(从0开始)和一个固定网络标识。你还可以在YAML定义添加VolumeClaimTemplate来声明Pod存储使用PVC。...HeadlessService 在文章学练结合,快速掌握Kubernetes Service 写过 Service是在逻辑抽象层上定义了一组Pod,为他们提供一个统一固定IP和访问这组Pod负载均衡策略...所以,在这个新web-0被创建出来之后,Kubernetes会为它查找绑定名叫www-web-0PVC。由于PVC生命周期是独立于使用Pod,这样新Pod就接管了以前旧Pod留下数据。

1K40

kubernetes部署kafka集群

selector: app: kafka 在上述配置,我们使用Kubernetes Service资源端口定义,指定Kafka服务端口号为9092,这是Kafka集群默认使用端口...Kubernetes会将所有传入数据流量路由到Kafka服务Pod上。 步骤2:创建Kafka集群 接下来,我们需要使用KubernetesDeployment资源来定义Kafka集群。...我们定义了一个使用Zookeeper官方Docker镜像Zookeeper容器,并将其部署到Kubernetes。...步骤4:创建Zookeeper集群 接下来,我们需要创建一个Zookeeper集群来支持Kafka集群。我们可以使用KubernetesStatefulSet资源来定义Zookeeper集群。...--broker-list kafka:9092 --topic test" 在上述命令,我们使用Kafka官方Docker镜像"wurstmeister/kafka"启动了一个Kafka生产者容器

2.1K50

kubernetes(十一) 存储& statefulset控制器

数据持久化 Volume kubernetesvolume提供了在容器挂载外部存储能力 pod需要设置卷来源(spec.volume)和挂载点(spec.containers.volumeMounts...:数据库主从,消息中间件kafka集群,redis集群等 稳定网络ID 说起StatefulSet稳定网络标识符,不得不从Headless说起了 标准Service: apiVersion: v1...并不是固定。...这就意味着,对于“有状态应用”实例访问,你必须使用 DNS 记录或者 hostname 方式,而绝不应该直接访问这些 Pod IP 地址。...每个PVC绑定对应 PV,从而保证每一个 Pod 都拥有一个独立 Volume。 在这种情况下,删除Pods或StatefulSet,它所对应PVC和PV不会被删除。

69521

同程旅行大数据集群在 Kubernetes服务化实践

在这个过程遇到很多问题和难点,本文会向大家介绍上云过程总结经验和教训。...由于网络环境限制,一个机房没有办法只搭建一个 Kuberntes 集群,需要支持一个应用跨多 Kubernetes 集群部署,负载服务要支持跨多个 Kubernetes 集群应用负载。...Pod 配置有状态 存储组件有个明显特性就是配置文件中会有一个唯一标识,比如 Zookeeper myid , Kafka broker id。...如果组件本身配置文件格式比较固定,会做成模板化,将特定配置项抽出来提供给组件研发配置,通过环境变量方式注入到容器。...对 Kubernetes 集群操作会分解成多个 Task,Task 之间有依赖关系,组装成 Job 发送给 Kafka,云舱 Scheduler 进行消费和处理。

72830

Kafka集群内外网分流实战指南

Kubernetes Service配置 在Kubernetes,每个Kafka Broker节点可以作为一个Pod运行,而Service则负责定义这些Pod访问方式。...除了绑定地址之外,还可以配置该监听地址认证协议,也就是使用该地址连接Broker需要指定使用何种协议方式进行连接。...在需要代理才能连接kafka broker,在这种场景,需要将advertised.listeners设置为代理地址。...但是在集群外部kafka客户端进行连接,它是需要有能力访问kafka每一个broker节点,所以需要在advertised.listeners配置公网IP,并存储在zookeeper,这样kafka...假设机器没有外网网卡(即上服务器是没有eth1网卡),外网通信地址基于转发或映射出来IP,那么,我们Kafka配置就应该改成这样配置。

21221

原 荐 浅析Kubernetes State

要想保持Pod IP不变,我们可以借助稳定Pod hostname定制IPAM获取固定Pod IP。...借助StatefulSet稳定唯一网络标识特性,我们能比较轻松实现Pod固定IP需求,然后如果使用Deployment,那么将会复杂多,你需要考虑滚动更新过程参数控制(maxSurge...因此,我想再加一个StatefulSet使用场景: 实现固定Pod IP方案, 可以优先考虑基于StatefulSet; 最佳实践 StatefulSet对应Pod存储最好通过StorageClass...为了数据安全,当删除StatefulSetPods或者对StatefulSet进行缩容Kubernetes并不会自动删除StatefulSet对应PV,而且这些PV默认也不能被其他PVC Bound...如果你使用Kubernetes 1.5+版本,当Node Condition是NetworkUnavailable,node controller不会强制从apiserver删除这个Node上这些

1.5K110

知乎千万级高性能长连接网关揭秘

常见四层负载均衡策略是根据连接来源 IP 进行一致性 Hash,在节点数不变情况下这样能保证每次都 Hash 到同一个 Broker ,甚至在节点数稍微改变也能大概率找到之前连接节点。...之前我们也使用过来源 IP Hash 策略,主要有两个缺点: 分布不够均匀,部分来源 IP 是大型局域网 NAT 出口,上面的连接数多,导致 Broker 上连接数不均衡 不能准确标识客户端,当移动客户端掉线切换网络就可能无法连接回刚才...Hash 就拿到了固定 Broker。...同时因为发布订阅基于 Kafka,可以保证在处理大规模数据消息可靠性。 订阅 当长连接 BrokerKafka Topic 消费出消息后会查找本地订阅关系,然后将消息分发到客户端会话。...当客户端订阅一个 Topic 我们就将客户端会话对象放入以 Topic 为 Key 订阅 Map ,当反查消息订阅关系直接用 Topic 从 Map 上取值就行。

68430

知乎技术分享:知乎千万级并发高性能长连接网关技术实践

其中 Kafka 和 Redis 都是业界广泛使用基础组件,它们在知乎都已平台化和容器化 (详见:《Redis at Zhihu》、《知乎基于 Kubernetes Kafka 平台设计和实现》...常见四层负载均衡策略是根据连接来源 IP 进行一致性 Hash,在节点数不变情况下这样能保证每次都 Hash 到同一个 Broker ,甚至在节点数稍微改变也能大概率找到之前连接节点。...之前我们也使用过来源 IP Hash 策略,主要有两个缺点: 1)分布不够均匀,部分来源 IP 是大型局域网 NAT 出口,上面的连接数多,导致 Broker 上连接数不均衡; 2)不能准确标识客户端...Hash 就拿到了固定 Broker。...5.4 订阅 当长连接 BrokerKafka Topic 消费出消息后会查找本地订阅关系,然后将消息分发到客户端会话。 我们最开始直接使用 HashMap 存储客户端订阅关系。

1.2K20

kubernetes kafka 和 zookeeper 有状态集群服务部署实践 (二)

通过这种方式,可以使用CBS盘来存储服务实例状态信息。 Headless服务支持通过服务域名解析得到服务所有实例IP,如果服务实例数为1,则可以得到服务对应实例IP。...这样在zookeeper和kafka服务创建,将每一个服务实例拆分成一个独立服务。这样每个服务实例可以单独设置环境变量,配置zookeeper和kafka服务实例需要实例Id。...其中kafka程序日志数据量较少,使用一个30G左右小容量CBS盘。...注意:由于在kafka镜像,会对KAFKA*这样环境变量进行解析,为了避免错误解析,所有特意将服务名称设置成ckafka。...KAFKA_BROKER_ID=1 KAFKA_ADVERTISED_HOST_NAME=ckafka1 其中KAFKA_BROKER_ID和KAFKA_ADVERTISED_HOST_NAME根据服务实例不同

5.1K20
领券