点击蓝色“架构文摘”关注我哟

加个“星标”,每天上午 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,太有意思了!相关推荐

  1. 【K8S】 基于Kubernetes部署Kafka集群

    主要参考了https://stackoverflow.com/questions/44651219/kafka-deployment-on-minikube和https://github.com/ra ...

  2. Kubernetes 生产部署实录 - 基于 sealos 部署 laf.js

    说明 lafyun.com 是基于开源云开发平台 laf.js 部署的公开运营版云开发平台. lafyun.com 内测阶段是基于 docker-compose 部署的单机版,现在平台正式开放公测,需 ...

  3. 基于 Kubernetes 的 Jenkins 主从通信异常解决

    基于 Kubernetes 的 Jenkins 主从通信异常解决 问题描述 基于 Kubernetes 部署 Jenkins 动态 slave 后,运行 Jenkins Job 会抛java.nio. ...

  4. 使用 Istio 实现基于 Kubernetes 的微服务应用

    近两年,随着容器.Kubernetes 等技术的兴起,微服务被广泛提及并被大量使用.本文旨在让读者了解 Istio,通过它与 Kubernetes 相结合,大幅降低微服务的复杂度,以便让开发人员更关注 ...

  5. 基于Kubernetes的Spark部署完全指南

    基于Kubernetes的Spark部署完全指南 [编者的话]本文是在Kubernets上搭建Spark集群的操作指南,同时提供了Spark测试任务及相关的测试数据,通过阅读本文,你可以实践从制作Sp ...

  6. 在 Kubernetes 中基于 StatefulSet 部署 MySQL(下)

    大家好,我是老 Z! 上篇文章实现了 MySQL 数据库在基于 KubeSphere 部署的 K8s 集群上的安装部署,部署方式采用了图形化界面这种形式.本文将会介绍如何使用 GitOps 来部署 M ...

  7. s19.基于 Kubernetes v1.25 (kubeadm) 和 Docker 部署高可用集群(一)

    基于 Kubernetes v1.25 和 Docker 部署高可用集群 主要内容 Kubernetes 集群架构组成 容器运行时 CRI Kubernetes v1.25 新特性 Kubernete ...

  8. 基于 Kubernetes 的微服务部署即代码

    在基于 Kubernetes 的基础设施即代码一文中,我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的,以及它的 ...

  9. 基于Kubernetes的持续部署方案

    戳蓝字"CSDN云计算"关注我们哦! 文章转载自Docker 方案概述 本技术方案为基于Kubernetes为核心的持续部署(下文简称CD)方案,可以满足开发方的程序级日志查看分析 ...

最新文章

  1. python 统计单词个数---不去重
  2. 统计特定文件中的词频
  3. python加载包出错_python导入Pmw包运行提示一下错误
  4. Java黑皮书课后题第4章:*4.23(金融应用:酬金)编写一个程序,读取下面信息,然后输出一个酬金声明
  5. 代理模式和动态代理模式_代理模式介绍
  6. cocos2d-x 2.2.3 win32程序发布注意
  7. ASP.NET MVC显示UserControl控件(扩展篇)
  8. paip.svn使用小结
  9. 加载elementor时出现问题_Elementor新手教程:怎么使用elementor设计网站页面!
  10. creo绘图属性模板_Creo定制模型及绘图模板.doc
  11. 三连杆机械臂正运动学python模拟——运动学学习(一)
  12. X5开发团队看板 维护工作 根据计划生成工作 部分代码
  13. udacity 学java_刷完udacity的JavaScript,我想说……
  14. Android 10 后台启动app页面
  15. 【架构师考试】架构师考试内容与历年真题
  16. 教你怎么在 Mac 电脑上进行语音实时输入
  17. NEO4J-相似度算法03-皮尔逊相似度(Pearson)应用场景简介
  18. dgi数据治理_数据治理治什么?在哪治?怎么治?
  19. x38和x48是服务器芯片吗,guoshuo X58是什么主板
  20. MT7621A 硬件调试总结---(2)

热门文章

  1. 防火墙虚拟化技术详解(上)
  2. STM8 fHSI和 fCPU分频
  3. C语言七巧板游戏制作,七巧板具体玩法与制作方法详解
  4. latex缩进与对齐_latex 换行后缩进
  5. pe没法给服务器装系统吗,U盘重装系统无法进入PE解决方法
  6. 利用C#编写一个高斯正反算程序
  7. JVM3:实战:内存分配与回收策略
  8. 【Git】Git pull 拉代码卡在Unpacking objects
  9. C++函数指针与成员函数指针
  10. securecrt能输入命令吗?