更新至 ZooKeeper 3.5.6 版本

资源定义

配置

日志文件 log4j.properties、ZooKeeper 配置文件模板 zoo.cfg.jinja2 和 ZooKeeper ID 文件 myid.jinja2,模板语法使用Jinja

:point_down:是 zoo.cfg.jinja2 的:chestnut::

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper

clientPort=2181

electionPortBindRetry=0

{% for index in range(0, ENSEMBLE_SIZE|int) %}

server.{{ index + 1 }}={{ APP_NAME }}-{{ index }}.{{ SERVICE_NAME }}:2888:3888

{% endfor %}

配置项 electionPortBindRetry 设为 0,无限重试绑定选举端口,默认为 3。

:point_down:是 myid.jinja2 的:chestnut::

{% set id = (POD_NAME.split("-")[-1])|int + 1 %}{{ id }}

创建 ConfigMap:

kubectl create configmap zk-cm \

--from-file=conf/log4j.properties

--from-file=conf/zoo.cfg.jinja2

--from-file=data/myid.jinja2

ZooKeeper StatefulSet

zk-sts.yaml

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: zk-sts

spec:

serviceName: zk

replicas: 3

selector:

matchLabels:

app: zk

template:

spec:

initContainers:

- name: jinja2

image: dyingbleed/jinja2

command:

- /bin/sh

- -c

args:

- >

cp /opt/config/* /opt/output

&& cat /opt/jinja2/zoo.cfg.jinja2 | python /opt/render.py > /opt/output/zoo.cfg

&& cat /opt/jinja2/myid.jinja2 | python /opt/render.py > /opt/data/myid

env:

- name: POD_NAME

valueFrom:

fieldRef:

fieldPath: metadata.name

- name: APP_NAME

value: zk-sts

- name: SERVICE_NAME

value: zk

- name: ENSEMBLE_SIZE

value: "3"

volumeMounts:

- name: share

mountPath: /opt/output

- name: zk-pvc

mountPath: /opt/data

- name: config

mountPath: /opt/config

- name: jinja2

mountPath: /opt/jinja2

containers:

- name: zk

image: zookeeper:3.5.6

env:

- name: JVMFLAGS

value: "-Xmx1G -Xms1G"

resources:

limits:

cpu: 200m

memory: 1Gi

ports:

- name: client

containerPort: 2181

- name: server

containerPort: 2888

- name: election

containerPort: 3888

- name: web

containerPort: 8080

volumeMounts:

- name: share

mountPath: /conf

- name: zk-pvc

mountPath: /data/zookeeper

volumes:

- name: config

configMap:

name: zk-cm

items:

- key: log4j.properties

path: log4j.properties

- name: jinja2

configMap:

name: zk-cm

items:

- key: myid.jinja2

path: myid.jinja2

- key: zoo.cfg.jinja2

path: zoo.cfg.jinja2

- name: share

emptyDir: {}

volumeClaimTemplates:

- metadata:

name: zk-pvc

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 2Gi

storageClassName: zk-sc

① 在 Init Container 拷贝 log4j.properties 文件到配置目录,模板生成 zoo.cfg 文件到配置目录,配置目录为 /conf;

② 在 Init Container 模板生成 myid 文件到数据目录,数据目录为 /data/zookeeper;

③ 使用 PersistentVolumeClaim 为 ZooKeeper 数据目录 /data/zookeeper 申请存储资源。

ZooKeeper Service

zk-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: zk

spec:

selector:

app: zk

ports:

- name: client

port: 2181

targetPort: client

- name: server

port: 2888

targetPort: server

- name: election

port: 3888

targetPort: election

- name: web

port: 8080

targetPort: web

clusterIP: None

为 ZooKeeper StatefulSet 创建 Headless Service。

参考

zookeeper和k8s_学习 ZooKeeper(二): ZooKeeper on Kubernetes相关推荐

  1. ZooKeeper学习笔记(八):ZooKeeper集群写数据原理

    写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...

  2. ZooKeeper学习第二期--ZooKeeper安装配置

    一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式. ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境: ■ 伪集群模式:就是在一台 ...

  3. Zookeeper源码分析(二) ----- zookeeper日志

    zookeeper源码分析系列文章: Zookeeper源码分析(一) ----- 源码运行环境搭建 原创博客,纯手敲,转载请注明出处,谢谢! 既然我们是要学习源码,那么如何高效地学习源代码呢?答案就 ...

  4. 【转】ZooKeeper学习第二期--Zookeeper命令操作

    一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ...

  5. java集群_JAVA架构师学习:实践ZooKeeper 应用场景与集群管理,辛勤总结

    ZooKeeper 典型的应用场景 Zookeeper 从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生 ...

  6. 学习笔记:Zookeeper 应用案例(上下线动态感知)

    1.Zookeeper 应用案例(上下线动态感知) 8.1 案例1--服务器上下线动态感知 8.1.1 需求描述 某分布式系统中,主节点可以有多台,可以动态上下线 任意一台客户端都能实时感知到主节点服 ...

  7. 【学习】026 Zookeeper

    什么Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务--分布式同步(Distributed Synchronization).命 ...

  8. 大数据学习之路-Zookeeper

    Zookeeper 1. Zookeeper入门 1.1 概述 1.2 特点 1.3 数据结构 1.4 应用场景 统一命名服务 统一配置管理 统一集群管理 服务器动态上下线 软负载均衡 2. Zook ...

  9. zookeeper -- Mac 上 Intellij IDEA 配置 zookeeper(3.5.8) 源码阅读、运行、调试环境

    近期需要整理MIT6.824 中 分布式系统协调服务 zookeeper 的一些知识,想要在Mac 本地搭建一个可以方便运行调试的zookeeper环境,这玩意竟然耗费了一上午的时间,实在是不可忍:当 ...

最新文章

  1. Centos5.6入门学习003之Cenots环境初始化
  2. 编写时钟aplet程序java,编写时钟 Applet 程序
  3. ios tableview分组间距
  4. 通过编程为ASP.NET页面设置缓存
  5. nacos客户端获取配置
  6. Linux logo和屏幕光标
  7. python爬虫基础扫盲之HTTP以及HTTPS
  8. 虚方法的使用 c# 1613719803
  9. 中缀变后缀(nyoj)
  10. python上下文管理关键字_理解 Python 的上下文管理器
  11. 【腾讯云的1001种玩法】 Laravel 整合微视频上传管理能力,轻松打造视频App后台...
  12. jQuery CSS 操作函数
  13. javascript把特定XML响应解析成一个对象
  14. mongodb php存储日志,laravel 框架使用mongodb 保存日志
  15. 打印机扫描显示服务器没有响应,打印机扫描一体机能够打印却不能扫描,提示缺少WIA的驱动程序...
  16. 港股上市!小米开源项目盘点
  17. python和java就业对比_Python,Java和JavaScript哪个更容易就业?
  18. 提交订单微信付款逻辑
  19. NVM(NonVolatile Memory)(非易失性内存)
  20. 生成特定于查询的类API摘要 (Generating Query-Specific Class API Summaries)

热门文章

  1. 贺利坚老师汇编课程42笔记:DIV除法指令
  2. 命令模式(3)-宏命令
  3. luogu P3810 【模板】三维偏序(陌上花开)
  4. oracle服务端导出/导入方式expdp/impdp
  5. Bootstrap(5)栅格系统
  6. Uva 140 Bandwidth
  7. JavaScript 笔记2
  8. 数据结构 5排序算法
  9. [转载] python staticmethod有什么意义_Python 中的 classmethod 和 staticmethod 有什么具体用途
  10. day31(GIL锁)