基于 Kubernetes 部署 Zookeeper,太有意思了!
点击蓝色“架构文摘”关注我哟
加个“星标”,每天上午 09:25,干货推送!
作者:fredalxin
地址:https://fredal.xin/deploy-zk-with-k8s
随着云原生化流行的大趋势,我们的基础组件也需要逐渐上Kubernetes了。Apache Zookeeper作为目前最流行的分布式协调组件,在我们的微服务架构中负责扮演注册中心的角色。
在Kubernetes中运行Zookeeper集群是很有意义的,可以利用其原生的弹性扩缩容、高可用特性。
使用StatefulSet部署Zookeeper
官方提供了使用statefulSet的方式来部署 Zookeeper 运行 Zookeeper,它会创建一个headless service,一个cluster service,一个podDisruptionBudget,一个statefulSet。
apiVersion: v1
kind: Service
metadata:name: zk-hslabels:app: zk
spec:ports:- port: 2888name: server- port: 3888name: leader-electionclusterIP: Noneselector:app: zk
---
apiVersion: v1
kind: Service
metadata:name: zk-cslabels:app: zk
spec:ports:- port: 2181name: clientselector:app: zk
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:name: zk-pdb
spec:selector:matchLabels:app: zkmaxUnavailable: 1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: zk
spec:selector:matchLabels:app: zkserviceName: zk-hsreplicas: 3updateStrategy:type: RollingUpdatepodManagementPolicy: OrderedReadytemplate:metadata:labels:app: zkspec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: "app"operator: Invalues:- zktopologyKey: "kubernetes.io/hostname"containers:- name: kubernetes-zookeeperimagePullPolicy: Alwaysimage: "k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10"resources:requests:memory: "1Gi"cpu: "0.5"ports:- containerPort: 2181name: client- containerPort: 2888name: server- containerPort: 3888name: leader-electioncommand:- sh- -c- "start-zookeeper \--servers=3 \--data_dir=/var/lib/zookeeper/data \--data_log_dir=/var/lib/zookeeper/data/log \--conf_dir=/opt/zookeeper/conf \--client_port=2181 \--election_port=3888 \--server_port=2888 \--tick_time=2000 \--init_limit=10 \--sync_limit=5 \--heap=512M \--max_client_cnxns=60 \--snap_retain_count=3 \--purge_interval=12 \--max_session_timeout=40000 \--min_session_timeout=4000 \--log_level=INFO"readinessProbe:exec:command:- sh- -c- "zookeeper-ready 2181"initialDelaySeconds: 10timeoutSeconds: 5livenessProbe:exec:command:- sh- -c- "zookeeper-ready 2181"initialDelaySeconds: 10timeoutSeconds: 5volumeMounts:- name: datadirmountPath: /var/lib/zookeepersecurityContext:runAsUser: 1000fsGroup: 1000volumeClaimTemplates:- metadata:name: datadirspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 10Gi
使用 kubectl apply
应用这个配置文件,等待一会之后,发现pod和service都已创建成功。
我们检查一下zookeeper节点的状态:
将zookeeper部署在kubernetes上一大优点就是可以方便扩缩容,这边我们以扩容成4个节点为例,kubectl edit sts zk
,修改 replica:4
以及 --server=4
。可以看到经过一段时间的滚动更新,最终扩容成了4个节点。
使用Kubernetes Operator部署Zookeeper
除了StatefulSet的方式外,我们还可以使用Kubernetes Operator的方式部署。目前我们可以参考使用pravega提供的operator。另外,
首先创建自定义的crd ZookeeperCluster
kubectl create -f deploy/crds
接着创建权限相关的,包括serviceAccount、Role和RoleBinding (注意需要修改一下权限相关的rbac.yaml的配置,如果你当前的namespace不是default,需要把namespcae: default去掉,不然权限验证有问题)。
kubectl create -f deploy/default_ns/rbac.yaml
然后给operator创建deployment
kubectl create -f deploy/default_ns/operator.yaml
我们看到operator已经创建好了:
接下来我们自己编写一个CR即可:
apiVersion: zookeeper.pravega.io/v1beta1
kind: ZookeeperCluster
metadata:name: zookeeper
spec:replicas: 3image:repository: pravega/zookeepertag: 0.2.9storageType: persistencepersistence:reclaimPolicy: Deletespec:storageClassName: "rbd"resources:requests:storage: 8Gi
这里的storageClassName配合自建集群选择了rbd。apply之后等一会儿可以看到zk已经创建完毕。
扩缩容的话也非常方便,还是以扩容4节点为例,直接patch我们创建的cr即可:
kubectl patch zk zookeeper --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value":4}]'
使用Kubernetes Kudo部署Zookeeper
kudo 是一个适用于kubernetes operator的组装器,也是官方推荐的。
首先我们安装一下kudo,在mac上安装:
brew install kudo
安装完之后进行初始化
kubectl kudo init
这个时候我们会发现kudo operator已经装好了:
然后直接安装一下zookeeper即可(kudo内置了zookeeper operator),注意这里同样声明一下storage class为rbd。
kubectl kudo install zookeeper --instance=zookeeper-instance -p STORAGE_CLASS=rbd
扩缩容的话也非常方便:kubectl kudo update --instance=zookeeper-instance -p NODE_COUNT=4
。
end
往期推荐
推荐一个Nginx 可视化配置神器
微信小程序商城项目(Java版),拿去毕设又省2千块
高级程序员必知的 7 种软件架构模式!
【震惊】小伙在公司用了个insert into select 居然被开除了。。。
推荐一个高仿微信的开源项目,有点屌!
关注公众号《Java派》
回复 1027 获取三本 DDD领域驱动设计 电子书
如有收获,点个在看,诚挚感谢
基于 Kubernetes 部署 Zookeeper,太有意思了!相关推荐
- 【K8S】 基于Kubernetes部署Kafka集群
主要参考了https://stackoverflow.com/questions/44651219/kafka-deployment-on-minikube和https://github.com/ra ...
- Kubernetes 生产部署实录 - 基于 sealos 部署 laf.js
说明 lafyun.com 是基于开源云开发平台 laf.js 部署的公开运营版云开发平台. lafyun.com 内测阶段是基于 docker-compose 部署的单机版,现在平台正式开放公测,需 ...
- 基于 Kubernetes 的 Jenkins 主从通信异常解决
基于 Kubernetes 的 Jenkins 主从通信异常解决 问题描述 基于 Kubernetes 部署 Jenkins 动态 slave 后,运行 Jenkins Job 会抛java.nio. ...
- 使用 Istio 实现基于 Kubernetes 的微服务应用
近两年,随着容器.Kubernetes 等技术的兴起,微服务被广泛提及并被大量使用.本文旨在让读者了解 Istio,通过它与 Kubernetes 相结合,大幅降低微服务的复杂度,以便让开发人员更关注 ...
- 基于Kubernetes的Spark部署完全指南
基于Kubernetes的Spark部署完全指南 [编者的话]本文是在Kubernets上搭建Spark集群的操作指南,同时提供了Spark测试任务及相关的测试数据,通过阅读本文,你可以实践从制作Sp ...
- 在 Kubernetes 中基于 StatefulSet 部署 MySQL(下)
大家好,我是老 Z! 上篇文章实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化界面这种形式.本文将会介绍如何使用 GitOps 来部署 M ...
- s19.基于 Kubernetes v1.25 (kubeadm) 和 Docker 部署高可用集群(一)
基于 Kubernetes v1.25 和 Docker 部署高可用集群 主要内容 Kubernetes 集群架构组成 容器运行时 CRI Kubernetes v1.25 新特性 Kubernete ...
- 基于 Kubernetes 的微服务部署即代码
在基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以及它的 ...
- 基于Kubernetes的持续部署方案
戳蓝字"CSDN云计算"关注我们哦! 文章转载自Docker 方案概述 本技术方案为基于Kubernetes为核心的持续部署(下文简称CD)方案,可以满足开发方的程序级日志查看分析 ...
最新文章
- python 统计单词个数---不去重
- 统计特定文件中的词频
- python加载包出错_python导入Pmw包运行提示一下错误
- Java黑皮书课后题第4章:*4.23(金融应用:酬金)编写一个程序,读取下面信息,然后输出一个酬金声明
- 代理模式和动态代理模式_代理模式介绍
- cocos2d-x 2.2.3 win32程序发布注意
- ASP.NET MVC显示UserControl控件(扩展篇)
- paip.svn使用小结
- 加载elementor时出现问题_Elementor新手教程:怎么使用elementor设计网站页面!
- creo绘图属性模板_Creo定制模型及绘图模板.doc
- 三连杆机械臂正运动学python模拟——运动学学习(一)
- X5开发团队看板 维护工作 根据计划生成工作 部分代码
- udacity 学java_刷完udacity的JavaScript,我想说……
- Android 10 后台启动app页面
- 【架构师考试】架构师考试内容与历年真题
- 教你怎么在 Mac 电脑上进行语音实时输入
- NEO4J-相似度算法03-皮尔逊相似度(Pearson)应用场景简介
- dgi数据治理_数据治理治什么?在哪治?怎么治?
- x38和x48是服务器芯片吗,guoshuo X58是什么主板
- MT7621A 硬件调试总结---(2)