• 前提

    • 已经安装了docker-desktop,并且其中的kubernetes启动运行的。或者安装了k8s环境就行
    • 可以正常下载dockerhub的镜像,这里采用了dockerhub官方制作的镜像
  • 启动集群
    • 执行命令 kubectl apply -f zk1.yaml,执行前先把/data的3个宿主机路径修改一下,把datadir的volumeMounts注释放开。不修改也可以启动集群

zk1.yaml文件如下

apiVersion: v1
kind: Service
metadata:
name: zk1
labels:
zk: zk1
spec:
selector:
zk: zk1
ports:
- protocol: TCP
port: 2181
targetPort: 2181
name: port-1
- protocol: TCP
port: 2888
targetPort: 2888
name: port-2
- protocol: TCP
port: 3888
targetPort: 3888
name: port-3
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
name: zk2
labels:
zk: zk2
spec:
selector:
zk: zk2
ports:
- protocol: TCP
port: 2181
targetPort: 2181
name: port-1
- protocol: TCP
port: 2888
targetPort: 2888
name: port-2
- protocol: TCP
port: 3888
targetPort: 3888
name: port-3
type: NodePort
---
apiVersion: v1
kind: Service
metadata:
name: zk3
labels:
zk: zk3
spec:
selector:
zk: zk3
ports:
- protocol: TCP
port: 2181
targetPort: 2181
name: port-1
- protocol: TCP
port: 2888
targetPort: 2888
name: port-2
- protocol: TCP
port: 3888
targetPort: 3888
name: port-3
type: NodePort
---
apiVersion: v1
kind: Pod
metadata:
name: zk1
namespace: default
labels:
zk: zk1
spec:
containers:
- image: zookeeper:3.6.3
imagePullPolicy: IfNotPresent
name: zk
env:
- name: ZOO_MY_ID
value: "1"
# 默认这个值,可以参考容器里面的entry.sh的内容
# 也可以去dockerhub的链接去查看这个镜像的dockerfile
# - name: ZOO_DATA_DIR
# value: "/data"
- name: ZOO_INIT_LIMIT
value: "5000"
- name: ZOO_SYNC_LIMIT
value: "2000"
- name: JVMFLAGS
value: "-Dzookeeper.electionPortBindRetry=50" # 连接集群重试50次,默认三次
- name: ZOO_SERVERS
value: "server.1=0.0.0.0:2888:3888;2181 server.2=zk2.default.svc.cluster.local:2888:3888;2181 server.3=zk3.default.svc.cluster.local:2888:3888;2181"
ports:
- containerPort: 2181
protocol: TCP
name: client
- containerPort: 2888
protocol: TCP
name: server
- containerPort: 3888
protocol: TCP
name: leader-election
volumeMounts:
# 这里用环境变量,zoo.cfg这个文件是不存在
# - mountPath: /apache-zookeeper-3.6.3-bin/conf
# name: conf
# 为什么一定是data 不是/tmp/zookeeper ZOO_DATA_DIR指定的
# 不配置数据持久的话,把这个配置注释掉 最好配置,不然pod删了数据就没了
#- mountPath: /data
# name: datadir
volumes:
#- name: conf
# hostPath:
# path: /XXXX/conf1XXXX
- name: datadir
hostPath:
# 第一次启动最好是个空文件夹 配置自己的数据的路径,3个pod三个路径
path: /XXXX/tmp1/zookeeper
# type: Directory
---
apiVersion: v1
kind: Pod
metadata:
name: zk2
namespace: default
labels:
zk: zk2
spec:
containers:
- image: zookeeper:3.6.3
imagePullPolicy: IfNotPresent
name: zk
env:
- name: ZOO_MY_ID
value: "2"
- name: ZOO_INIT_LIMIT
value: "5000"
- name: ZOO_SYNC_LIMIT
value: "2000"
- name: JVMFLAGS
value: "-Dzookeeper.electionPortBindRetry=50"
- name: ZOO_SERVERS
value: "server.1=zk1.default.svc.cluster.local:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3.default.svc.cluster.local:2888:3888;2181"
# 如果不把本机的ip改成0.0.0.0,会报错"server.1=zk1.default.svc.cluster.local:2888:3888;2181 server.2=zk2.default.svc.cluster.local:2888:3888;2181 server.3=zk3.default.svc.cluster.local:2888:3888;2181"
ports:
- containerPort: 2181
protocol: TCP
name: client
- containerPort: 2888
protocol: TCP
name: server
- containerPort: 3888
protocol: TCP
name: leader-election
volumeMounts:
# - mountPath: /apache-zookeeper-3.6.3-bin/conf
# name: conf
#- mountPath: /data
# name: datadir
volumes:
# - name: conf
# hostPath:
# path: /XXXX/conf2
- name: datadir
hostPath:
path: /XXXX/tmp2/zookeeper
---
apiVersion: v1
kind: Pod
metadata:
name: zk3
namespace: default
labels:
zk: zk3
spec:
containers:
- image: zookeeper:3.6.3
imagePullPolicy: IfNotPresent
name: zk
env:
- name: ZOO_MY_ID
value: "3"
- name: ZOO_INIT_LIMIT
value: "5000"
- name: ZOO_SYNC_LIMIT
value: "2000"
- name: JVMFLAGS
value: "-Dzookeeper.electionPortBindRetry=50"
- name: ZOO_SERVERS
value: "server.1=zk1.default.svc.cluster.local:2888:3888;2181 server.2=zk2.default.svc.cluster.local:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181"
ports:
- containerPort: 2181
protocol: TCP
name: client
- containerPort: 2888
protocol: TCP
name: server
- containerPort: 3888
protocol: TCP
name: leader-election
volumeMounts:
# - mountPath: /apache-zookeeper-3.6.3-bin/conf
# name: conf
#- mountPath: /data
# name: datadir
volumes:
#- name: conf
# hostPath:
# path: /XXXX/conf3
- name: datadir
hostPath:
path: /XXXX/tmp3/zookeeper
  • 连接pod分别查看状态kubectl exec -it zk1 -- sh kubectl exec -it zk2 -- sh kubectl exec -it zk3 -- sh
# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

k8s(docker-desktop)简单搭建zookeeper三节点集群的更多相关文章

  1. zookeeper三节点集群安装记录

    以下是3个节点的zk安装记录. 下载 下载地址: http://mirrors.shu.edu.cn/apache/zookeeper/ cd /data/opt/zk wget http://mir ...

  2. 超快速使用docker在本地搭建hadoop分布式集群

    超快速使用docker在本地搭建hadoop分布式集群 超快速使用docker在本地搭建hadoop分布式集群 学习hadoop集群环境搭建是hadoop入门的必经之路.搭建分布式集群通常有两个办法: ...

  3. 搭建zookeeper+kafka集群

      搭建zookeeper+kafka集群 一.环境及准备 集群环境:   软件版本: 部署前操作: 关闭防火墙,关闭selinux(生产环境按需关闭或打开) 同步服务器时间,选择公网ntpd服务器或 ...

  4. PostgreSQL 三节点集群故障模拟及恢复

    PostgreSQL 三节点集群故障模拟及恢复 (postgreSQL9.5.1) 正常状态: 10.2.208.10:node1:master 10.2.208.11:node2:standby1同 ...

  5. 虚拟机搭建Zookeeper服务器集群完整笔记

    虚拟机搭建Zookeeper服务器集群完整笔记 本笔记主要记录自己搭建Zookeeper服务器的全过程,默认已经安装部署好Centos7. 一.虚拟机下Centos无法联网解决方案 1.首先调整虚拟机 ...

  6. CentOS6.3搭建ZooKeeper伪集群

    1. 将zookeeper安装包移动至/home, 解压后改名为zookeeper 相关命令 # 解压 .tar.gz # 重命名 zookeeper 2. 进入zookeeper/conf/目录下, ...

  7. Docker搭建Zookeeper&Kafka集群

    最近在学习Kafka,准备测试集群状态的时候感觉无论是开三台虚拟机或者在一台虚拟机开辟三个不同的端口号都太麻烦了(嗯..主要是懒). 环境准备 一台可以上网且有CentOS7虚拟机的电脑 为什么使用虚 ...

  8. win10环境下搭建zookeeper伪集群

    一.下载zookeeper https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/ 这里笔者下载的是zookeeper-3.3.6 二.配置zoo ...

  9. 单机简单搭建一个kafka集群(没有进行内核参数和JVM的调优)

    1.JDK安装 在我的部署单节点kafka的博客里有相关的方法.(https://www.cnblogs.com/ToBeExpert/p/9789486.html )zookeeper和kafka的 ...

  10. 简单搭建zookeeper集群分布式/伪分布式

    分布式搭建 一.下载zookeeper安装包 自行下载:我用的是 zookeeper-3.5.4-beta.tar.gz 二.环境准备 1. 我的虚拟机自带的java是1.7的,这个版本要求java1 ...

随机推荐

  1. USB口3A限流保护芯片。带短路保护

    一般说明 PW1503是超低RDS(ON)开关,具有可编程的电流限制,以保护电源源于过电流和短路情况.它具有超温保护以及反向闭锁功能. PW1503采用薄型(1毫米)5针薄型SOT封装,提供可调版本. ...

  2. go-carbon 1.5.0 版本发布,修复已知 bug 和新增德语翻译文件

    carbon 是一个轻量级.语义化.对开发者友好的golang时间处理库,支持链式调用. 目前已被 awesome-go 收录,如果您觉得不错,请给个star吧 github:github.com/g ...

  3. Day34:BigDecimal的使用

    BigDecimal 在基本数据类型中对于浮点数的计算时会出现精度丢失的情况,这个时候我们采用BigDecimal类来解决精度丢失的问题. public class Test{ public stat ...

  4. 你的项目使用Optional了吗?

    1.基本概念 java.util.Optional<T>类本质上就是一个容器,该容器的数值可以是空代表一个值不存在,也可以是非空代表一个值存在. 2.获取对象 2.1 相关方法 2.2 案 ...

  5. Django AttributeError: 'BugDeserializer' object has no attribute '_meta'

    BugDeserializer 对象中没有 '_meta' 属性,定位到调用BugDeserializer位置, 用于序列化时,将模型类对象传入instance参数 在update时,数据传入有误,更 ...

  6. week_9(异常检测)

    Andrew Ng 机器学习笔记 ---By Orangestar Week_9 This week, we will be covering anomaly detection which is w ...

  7. 浅谈promise对象

    背景: 最近项目在做小程序的开发,涉及设计一个统一的登录公共方法,当实现时涉及到多个异步请求,那么问题来了,如何让多个异步请求先后同步进行呢?很多人会想到使用多层嵌套套来实现,就像这样: functi ...

  8. 迁移学习(DANN)《Domain-Adversarial Training of Neural Networks》

    论文信息 论文标题:Domain-Adversarial Training of Neural Networks论文作者:Yaroslav Ganin, Evgeniya Ustinova, Hana ...

  9. AspNetCore管道

    title: Asp.Net Core底层源码剖析(一)中间件/管道 categories: 后端 tags: - .NET 当我们像下面这样添加一个管道时发生了什么? app.Use(async ( ...

  10. CF构造题1600-1800(1)

    D. Same Count One(Polynomial Round 2022 (Div. 1 + Div. 2, Rated, Prizes!)) 题意 给定 \(n\) 个长度为 \(m\) 的 ...