1、Zookeeper简介
zookeeper是一个开源的分布式协调服务,由知名互联网公司Yahoo创建,它是Chubby的开源实现;换句话讲,zookeeper是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于它实现数据的发布/订阅、负载均衡、名称服务、分布式协调/通知、集群管理、Master选举、分布式锁和分布式队列;
2、PV/PVC及zookeeper

3、构建zookeeper镜像
3.1、下载java环境基础镜像,将对应镜像修改本地harbor地址上传至harbor

3.2 基于java环境基础镜像,构建zookeeper镜像
- root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# ll
- total 36900
- drwxr-xr-x 4 root root 4096 Jun 4 11:03 ./
- drwxr-xr-x 11 root root 4096 Aug 9 2022 ../
- -rw-r--r-- 1 root root 1954 Jun 4 10:57 Dockerfile
- -rw-r--r-- 1 root root 63587 Jun 22 2021 KEYS
- drwxr-xr-x 2 root root 4096 Jun 4 10:11 bin/
- -rwxr-xr-x 1 root root 251 Jun 4 10:58 build-command.sh*
- drwxr-xr-x 2 root root 4096 Jun 4 10:11 conf/
- -rwxr-xr-x 1 root root 1156 Jun 4 11:03 entrypoint.sh*
- -rw-r--r-- 1 root root 91 Jun 22 2021 repositories
- -rw-r--r-- 1 root root 2270 Jun 22 2021 zookeeper-3.12-Dockerfile.tar.gz
- -rw-r--r-- 1 root root 37676320 Jun 22 2021 zookeeper-3.4.14.tar.gz
- -rw-r--r-- 1 root root 836 Jun 22 2021 zookeeper-3.4.14.tar.gz.asc
- root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# cat Dockerfile
- FROM harbor.ik8s.cc/baseimages/slim_java:8
- ENV ZK_VERSION 3.4.14
- ADD repositories /etc/apk/repositories
- # Download Zookeeper
- COPY zookeeper-3.4.14.tar.gz /tmp/zk.tgz
- COPY zookeeper-3.4.14.tar.gz.asc /tmp/zk.tgz.asc
- COPY KEYS /tmp/KEYS
- RUN apk add --no-cache --virtual .build-deps \
- ca-certificates \
- gnupg \
- tar \
- wget && \
- #
- # Install dependencies
- apk add --no-cache \
- bash && \
- #
- #
- # Verify the signature
- export GNUPGHOME="$(mktemp -d)" && \
- gpg -q --batch --import /tmp/KEYS && \
- gpg -q --batch --no-auto-key-retrieve --verify /tmp/zk.tgz.asc /tmp/zk.tgz && \
- #
- # Set up directories
- #
- mkdir -p /zookeeper/data /zookeeper/wal /zookeeper/log && \
- #
- # Install
- tar -x -C /zookeeper --strip-components=1 --no-same-owner -f /tmp/zk.tgz && \
- #
- # Slim down
- cd /zookeeper && \
- cp dist-maven/zookeeper-${ZK_VERSION}.jar . && \
- rm -rf \
- *.txt \
- *.xml \
- bin/README.txt \
- bin/*.cmd \
- conf/* \
- contrib \
- dist-maven \
- docs \
- lib/*.txt \
- lib/cobertura \
- lib/jdiff \
- recipes \
- src \
- zookeeper-*.asc \
- zookeeper-*.md5 \
- zookeeper-*.sha1 && \
- #
- # Clean up
- apk del .build-deps && \
- rm -rf /tmp/* "$GNUPGHOME"
- # 拷贝配置文件和脚本
- COPY conf /zookeeper/conf/
- COPY bin/zkReady.sh /zookeeper/bin/
- COPY entrypoint.sh /
- ENV PATH=/zookeeper/bin:${PATH} \
- ZOO_LOG_DIR=/zookeeper/log \
- ZOO_LOG4J_PROP="INFO, CONSOLE, ROLLINGFILE" \
- JMXPORT=9010
- # 启动zookeeper,entrypoint 脚本和cmd联合使用,entrypoint会把cmd当作参数传递给entrypoint脚本执行,即entrypoint脚本通常用来做一些环境初始化;比如这里就是用来在线生成zk集群配置
- ENTRYPOINT [ "/entrypoint.sh" ]
- CMD [ "zkServer.sh", "start-foreground" ]
- EXPOSE 2181 2888 3888 9010
- root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# cat conf/zoo.cfg
- tickTime=2000
- initLimit=10
- syncLimit=5
- dataDir=/zookeeper/data
- dataLogDir=/zookeeper/wal
- #snapCount=100000
- autopurge.purgeInterval=1
- clientPort=2181
- quorumListenOnAllIPs=trueroot@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# cat entrypoint.sh
- #!/bin/bash
- # 生成zk集群配置
- echo ${MYID:-1} > /zookeeper/data/myid #将$MYID的值写入MYID文件,如果变量为空就默认为1,$MYID为pod中的系统级别环境变量,该变量由部署zk清单中的环境变量指定
- if [ -n "$SERVERS" ]; then #如果$SERVERS不为空则向下执行,SERVERS为pod中的系统级别环境变量,该变量同样也是在zk部署清单中指定的环境变量的
- IFS=\, read -a servers <<<"$SERVERS" #IFS为bash内置变量用于分割字符并将结果形成一个数组
- for i in "${!servers[@]}"; do #${!servers[@]}表示获取servers中每个元素的索引值,此索引值会用做当前ZK的ID
- printf "\nserver.%i=%s:2888:3888" "$((1 + $i))" "${servers[$i]}" >> /zookeeper/conf/zoo.cfg #打印结果并输出重定向到文件/zookeeper/conf/zoo.cfg,其中%i和%s的值来分别自于后面变量"$((1 + $i))" "${servers[$i]}"
- done
- fi
- cd /zookeeper
- exec "$@" #$@变量用于引用给脚本传递的所有参数,传递的所有参数会被作为一个数组列表,exec为终止当前进程、保留当前进程id、新建一个进程执行新的任务,即CMD [ "zkServer.sh", "start-foreground" ]
- root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper# cat build-command.sh
- #!/bin/bash
- TAG=$1
- #docker build -t harbor.ik8s.cc/magedu/zookeeper:${TAG} .
- #sleep 1
- #docker push harbor.ik8s.cc/magedu/zookeeper:${TAG}
- nerdctl build -t harbor.ik8s.cc/magedu/zookeeper:${TAG} .
- nerdctl push harbor.ik8s.cc/magedu/zookeeper:${TAG}
- root@k8s-master01:~/k8s-data/dockerfile/web/magedu/zookeeper#
复制代码
可以看到zk3加入集群以后,对应身份并不能直接变为leader,这是因为集群已经有一个leader存在;
出处:https://www.cnblogs.com/qiuhom-1874/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |