zookeeper和k8s_学习 ZooKeeper(二): ZooKeeper on Kubernetes
更新至 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相关推荐
- ZooKeeper学习笔记(八):ZooKeeper集群写数据原理
写数据原理 写流程直接请求发送给Leader节点 这里假设集群中有三个zookeeper服务端 ACK (Acknowledge character)即是确认字符,在数据通信中,接收站发给发送站的一种 ...
- ZooKeeper学习第二期--ZooKeeper安装配置
一.Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式. ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境: ■ 伪集群模式:就是在一台 ...
- Zookeeper源码分析(二) ----- zookeeper日志
zookeeper源码分析系列文章: Zookeeper源码分析(一) ----- 源码运行环境搭建 原创博客,纯手敲,转载请注明出处,谢谢! 既然我们是要学习源码,那么如何高效地学习源代码呢?答案就 ...
- 【转】ZooKeeper学习第二期--Zookeeper命令操作
一.Zookeeper的四字命令 Zookeeper支持某些特定的四字命令字母与其的交互.他们大多数是查询命令,用来获取Zookeeper服务的当前状态及相关信息.用户在客户端可以通过telnet或n ...
- java集群_JAVA架构师学习:实践ZooKeeper 应用场景与集群管理,辛勤总结
ZooKeeper 典型的应用场景 Zookeeper 从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生 ...
- 学习笔记:Zookeeper 应用案例(上下线动态感知)
1.Zookeeper 应用案例(上下线动态感知) 8.1 案例1--服务器上下线动态感知 8.1.1 需求描述 某分布式系统中,主节点可以有多台,可以动态上下线 任意一台客户端都能实时感知到主节点服 ...
- 【学习】026 Zookeeper
什么Zookeeper Zookeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务--分布式同步(Distributed Synchronization).命 ...
- 大数据学习之路-Zookeeper
Zookeeper 1. Zookeeper入门 1.1 概述 1.2 特点 1.3 数据结构 1.4 应用场景 统一命名服务 统一配置管理 统一集群管理 服务器动态上下线 软负载均衡 2. Zook ...
- zookeeper -- Mac 上 Intellij IDEA 配置 zookeeper(3.5.8) 源码阅读、运行、调试环境
近期需要整理MIT6.824 中 分布式系统协调服务 zookeeper 的一些知识,想要在Mac 本地搭建一个可以方便运行调试的zookeeper环境,这玩意竟然耗费了一上午的时间,实在是不可忍:当 ...
最新文章
- Centos5.6入门学习003之Cenots环境初始化
- 编写时钟aplet程序java,编写时钟 Applet 程序
- ios tableview分组间距
- 通过编程为ASP.NET页面设置缓存
- nacos客户端获取配置
- Linux logo和屏幕光标
- python爬虫基础扫盲之HTTP以及HTTPS
- 虚方法的使用 c# 1613719803
- 中缀变后缀(nyoj)
- python上下文管理关键字_理解 Python 的上下文管理器
- 【腾讯云的1001种玩法】 Laravel 整合微视频上传管理能力,轻松打造视频App后台...
- jQuery CSS 操作函数
- javascript把特定XML响应解析成一个对象
- mongodb php存储日志,laravel 框架使用mongodb 保存日志
- 打印机扫描显示服务器没有响应,打印机扫描一体机能够打印却不能扫描,提示缺少WIA的驱动程序...
- 港股上市!小米开源项目盘点
- python和java就业对比_Python,Java和JavaScript哪个更容易就业?
- 提交订单微信付款逻辑
- NVM(NonVolatile Memory)(非易失性内存)
- 生成特定于查询的类API摘要 (Generating Query-Specific Class API Summaries)