基于Deployment部署Zookeeper集群

zookeeper集群逻辑图

一、准备相关镜像

1.1、准备java镜像

docker pull elevy/slim_java:8
docker tag elevy/slim_java:8 harbor.magedu.net/app1/slim_java:8
docker push harbor.magedu.net/app1/slim_java:8

1.2、准备zookeeper镜像相关文件

[root@easzlab-images-02 zookeeper]# ll -h 
total 37M
drwxr-xr-x  4 root root 4.0K Oct 23 15:50 ./
drwxr-xr-x 11 root root 4.0K Oct 23 15:50 ../
drwxr-xr-x  2 root root 4.0K Oct 23 15:50 bin/
-rwxr-xr-x  1 root root  264 Oct 23 15:50 build-command.sh*
drwxr-xr-x  2 root root 4.0K Oct 23 15:50 conf/
-rw-r--r--  1 root root 1.8K Oct 23 15:50 Dockerfile
-rwxr-xr-x  1 root root  278 Oct 23 15:50 entrypoint.sh*
-rw-r--r--  1 root root  63K Oct 23 15:50 KEYS
-rw-r--r--  1 root root   91 Oct 23 15:50 repositories
-rw-r--r--  1 root root 2.3K Oct 23 15:50 zookeeper-3.12-Dockerfile.tar.gz
-rw-r--r--  1 root root  36M Oct 23 15:50 zookeeper-3.4.14.tar.gz
-rw-r--r--  1 root root  836 Oct 23 15:50 zookeeper-3.4.14.tar.gz.asc
[root@easzlab-images-02 zookeeper]# vi build-command.sh 
[root@easzlab-images-02 zookeeper]# cat build-command.sh 
#!/bin/bash
TAG=$1

nerdctl  build -t harbor.magedu.net/app1/zookeeper:${TAG} .
nerdctl push harbor.magedu.net/app1/zookeeper:${TAG}
[root@easzlab-images-02 zookeeper]# vi Dockerfile 
[root@easzlab-images-02 zookeeper]# cat  Dockerfile 
#FROM harbor-linux38.local.com/linux38/slim_java:8 
FROM harbor.magedu.net/app1/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

ENTRYPOINT [ "/entrypoint.sh" ]

CMD [ "zkServer.sh", "start-foreground" ]

EXPOSE 2181 2888 3888 9010
[root@easzlab-images-02 zookeeper]# 
[root@easzlab-images-02 zookeeper]# cat entrypoint.sh 
#!/bin/bash

echo ${MYID:-1} > /zookeeper/data/myid

if [ -n "$SERVERS" ]; then
    IFS=\, read -a servers <<<"$SERVERS"
    for i in "${!servers[@]}"; do 
        printf "\nserver.%i=%s:2888:3888" "$((1 + $i))" "${servers[$i]}" >> /zookeeper/conf/zoo.cfg
    done
fi

cd /zookeeper
exec "$@"
[root@easzlab-images-02 zookeeper]# 
[root@easzlab-images-02 zookeeper]# cat repositories 
http://mirrors.aliyun.com/alpine/v3.6/main
http://mirrors.aliyun.com/alpine/v3.6/community
[root@easzlab-images-02 zookeeper]# 
[root@easzlab-images-02 zookeeper]# 
[root@easzlab-images-02 zookeeper]# cat  bin/zkReady.sh
#!/bin/bash

/zookeeper/bin/zkServer.sh status | egrep 'Mode: (standalone|leading|following|observing)'
[root@easzlab-images-02 zookeeper]# cat  conf/
log4j.properties  zoo.cfg           
[root@easzlab-images-02 zookeeper]# cat  conf/log4j.properties 
# Define some default values that can be overridden by system properties
zookeeper.root.logger=INFO, CONSOLE, ROLLINGFILE
zookeeper.console.threshold=INFO
zookeeper.log.dir=/zookeeper/log
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=INFO
zookeeper.tracelog.dir=/zookeeper/log
zookeeper.tracelog.file=zookeeper_trace.log

#
# ZooKeeper Logging Configuration
#

# Format is "<default threshold> (, <appender>)+

# DEFAULT: console appender only
log4j.rootLogger=${zookeeper.root.logger}

# Example with rolling log file
#log4j.rootLogger=DEBUG, CONSOLE, ROLLINGFILE

# Example with rolling log file and tracing
#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE

#
# Log INFO level and above messages to the console
#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${zookeeper.console.threshold}
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n

#
# Add ROLLINGFILE to rootLogger to get log file output
#    Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}

# Max log file size of 10MB
log4j.appender.ROLLINGFILE.MaxFileSize=10MB
# uncomment the next line to limit number of backup files
log4j.appender.ROLLINGFILE.MaxBackupIndex=5

log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L] - %m%n


#
# Add TRACEFILE to rootLogger to get log file output
#    Log DEBUG level and above messages to a log file
log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
log4j.appender.TRACEFILE.Threshold=TRACE
log4j.appender.TRACEFILE.File=${zookeeper.tracelog.dir}/${zookeeper.tracelog.file}

log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout
### Notice we are including log4j's NDC here (%x)
log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} [myid:%X{myid}] - %-5p [%t:%C{1}@%L][%x] - %m%n
[root@easzlab-images-02 zookeeper]# 
[root@easzlab-images-02 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=true[root@easzlab-images-02 zookeeper]# 

[root@easzlab-images-02 zookeeper]# cat KEYS 

This file contains the PGP keys of various ZooKeeper developers.

Users:
    pgp < KEYS
or
    gpg --import KEYS

Developers:
    pgp -kxa <your name> and append it to this file.
or
    (pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
or
    (gpg --list-sigs <your name> && gpg --armor --export <your name>) >> this file.

pub   1024D/68E327C1 2008-10-22
      Key fingerprint = D0BC 8D8A 4E90 A40A FDFC  43B3 E22A 746A 68E3 27C1
uid                  Patrick Hunt (ZooKeeper release signing key) <phunt@apache.org>
sub   2048g/279C600D 2008-10-22

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.6 (GNU/Linux)

mQGiBEj+sa8RBACfP1oQOrzoIH+vaGFOR0hUNQ1tVFn8u8p0MJLtAzx3C3fXuLAQ
lTAviPR5LpsVfnZtil/ysp8o5wlHPUrMDHwcrtDonxe404FaTclHfKcRhGE8T4wL
9BvplKe04kT5E6vzyfuU9+Vza6SdVU8ZPd79CK/UNr2JpQ7x/NdXKupptwCg3B/Y
Sxzze9vjlV1Xq9wNx2+Dc6MD/2Sm7u41EfTfq6v7NdXg9DY6+NBN95D+VBCjXr+T
8ZnUTvXJN2KeLYFf5ozdtjfj0u+rlj57/bEpcEqBAoIy37cFakmI3aiNjP3RXqLx
LrAgZVwUAHAN5kIPrVd4ZQ8OZyshH5WtSViWs/NQj4CerXQe3XmGEqU//iaAeFgv
8ZgMA/0YlDS95tzEfhS/3LYhKUgsi+pxLhFv/h1oTF4HRIL4syzhJGe2Hwwy4/rT
p1BdlOhatc4AjTDjjSx8R1sQaCu3jeWfz75CqbIJPcnu1dh1UDa+2EK/ykfQoNzN
bmc+fttw/0McWhl0eBsI/0vg9yMkVIlUQwgn0qeruKcQBbqeqbQ/UGF0cmljayBI
dW50IChab29LZWVwZXIgcmVsZWFzZSBzaWduaW5nIGtleSkgPHBodW50QGFwYWNo
ZS5vcmc+iGAEExECACAFAkj+sa8CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAK
CRDiKnRqaOMnwWYCAJ46DnpkBAYwgJW56dgnQc7VAOwmJgCgxb+Zo0kznrRKh+xw
8fr+ZdqI/OW5Ag0ESP6xuhAIAKcqHEC9Orkl7qNBbSlECLZ8cuaSv7zZvIeE0DaD
XwfspY0vNrE7RDBOcWPVttWZzYLssMquxodAXhFJQ7k4ETIM1D0cp9J7lFr+rAxq
1ybhPNukJPOIKcmXGS9wr/oWbsonF8CsY2DX3hCSQqeL1qsLgNP/FA+1Bawhpz7P
HpZqgu3qBNUNbShFTadXw/L7ru19/BlPaI4p0UFhbbf01XKd4kR5sdAxHWCkOvY1
U4JAwty84xLQ1fU4Xc65u6Y/EpNq4dosJjfPEzxAFVZLhBNdarX0b8u/tJI138tn
pGCSBvWNsdJX8zClmK1KDLf1ksWYbMagStuBbOzG4wBmjPcABAsH/1u4u32PgQ39
3aqh5WT6lxjO3Dggc0BrtaSmxsoKPrisgiVIRS/C7XEK98T7832y8LUX0xAoRT6q
Jyg+rvDc6PFt8Jde2j+q2UCCq68xO+Qad576BpKK448YHPo5PjjisgpXbp1AB4G7
UrA4aW1fA+kqVOL1EebnWBmG37zgCntYnOwJJT/MT+shC4mM1u9lXfyV8JPqnYWY
R7Hjq90bavKBUO0vA5s/791SceT1rBqgtNOSPA41A3Q38iBnGeo2Dh2kQdAZ8a5g
fsEYQ/ZPhlxRkxhjfTCvWUbkh0b1fO5ZOZbeag+fR/GBI4SQmClRpD/66VhAzERL
y9NfusDU8p+ISQQYEQIACQUCSP6xugIbDAAKCRDiKnRqaOMnwRPAAJkBcxNG0qZt
ahF/8VAEXFBkiASz8QCeImay/25M8xvX/VmqMj1Vq88cUUU=
=HKV3
-----END PGP PUBLIC KEY BLOCK-----
pub   4096R/6E1CC7A4 2011-02-18
      Key fingerprint = 4E27 888E 5533 32EE AE6B  56FB 7C94 7626 6E1C C7A4
uid                  Benjamin Reed (CODE SIGNING KEY) <breed@apache.org>
sig 3        6E1CC7A4 2011-02-18  Benjamin Reed (CODE SIGNING KEY) <breed@apache.org>
sub   4096R/B9E5AE9D 2011-02-18
sig          6E1CC7A4 2011-02-18  Benjamin Reed (CODE SIGNING KEY) <breed@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.14 (GNU/Linux)

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
GNW5Gn4c4eIbDJKr2cuUwBlC
=HUbN
-----END PGP PUBLIC KEY BLOCK-----

pub   4096R/8EE2F25C 2011-10-24
      Key fingerprint = B6B3 F7ED A5BA 7D1E 827D  E518 0DFF 492D 8EE2 F25C
uid                  Mahadev Konar (CODE SIGNING KEY) <mahadev@apache.org>
sub   4096R/1F35DF4C 2011-10-24

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2.0.16 (Darwin)

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
7kmI6Gh95bLf1om+Bc8ajpm9Zsw=
=fnga
-----END PGP PUBLIC KEY BLOCK-----

pub   4096R/D2C80E32 2014-02-19
      Key fingerprint = 1D3D 275F 61D8 E2B5 89C1  9FD0 93FB 0254 D2C8 0E32
uid                  Flavio Junqueira (CODE SIGNING KEY) <fpj@apache.org>
sig 3        D2C80E32 2014-02-19  Flavio Junqueira (CODE SIGNING KEY) <fpj@apache.org>
sub   4096R/67413EBA 2014-02-19
sig          D2C80E32 2014-02-19  Flavio Junqueira (CODE SIGNING KEY) <fpj@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)

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
4/waU7vahotkc5P5ih1Z0E+U4Q==
=Gtjp
-----END PGP PUBLIC KEY BLOCK-----

pub   4096R/820F225C 2015-03-29
uid                  Michi Mutsuzaki (CODE SIGNING KEY) <michim@apache.org>
sig 3        820F225C 2015-03-29  Michi Mutsuzaki (CODE SIGNING KEY) <michim@apache.org>
sub   4096R/E48B956B 2015-03-29
sig          820F225C 2015-03-29  Michi Mutsuzaki (CODE SIGNING KEY) <michim@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

mQINBFUXYCwBEADXjTS7gvZMl8n9IxiYeABBio7pWB4Ka3Jye+aWUYShfmmiXyHM
CShgCiPBYfIA1hIYSqr8VsIQnNC2IczIM/9+Jdeyu9LwxtmO+fwanHirGgkz515x
I3BcNKXIVWm94ec5zMt8Si8G6jOWVIqb8Uq9b6YwkGjYZ/EbodMuWRV/w5cR7xSJ
ngpjXC/85THxMzqzw5vWAceZLPGL03O7YVsqqvpP1fugZPIHw3ulijHcHP6fLUJ7
+VA6qvYq1TCnA+zs/2u/6y5HvuLaxO1172/GrUoMZ9FAy9jjZu9O9g3G9i+1LyNY
VAGXsitQlqkUf9RxrnxY55jW3a8yVmsR1jkpOqe/KXUluVFLWGEHUDmIly6ZOkt0
rwaHLZg8U5ONNbzeKUjNnagpyXXDNRVjrJ4K5E6eKK9MsapB7PXQaC6KJOiJ8WdA
xq7lhQ9rIg04xvStHUo9ojb27xQJKslci08H44en5Fn5Gzcex8ITC7tJ3WNmxKlW
+6LOCnbQbBUWF5KLhCyFW3XBcJPc8kqzuRI/nBOxAELh+/Eog1ABd+LuzaPIsGIy
vKJbe6wno8+HWHgknuck1fbPwU/Bx7V5Ee/bvbN3QfRHKMQdsBfwI6EZdHSbjV7O
vAUehgoRsVDVgSpmVBCnWo7HlmfPw08uBEBgDuVF2+rElFvp2lwRCkKe7QARAQAB
tDZNaWNoaSBNdXRzdXpha2kgKENPREUgU0lHTklORyBLRVkpIDxtaWNoaW1AYXBh
Y2hlLm9yZz6JAjkEEwECACMFAlUXYCwCGwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIe
AQIXgAAKCRDCwP3ggg8iXJe+D/4xSXZ6j9GyJvRy3Oc8szymnsPLRAeMOy+r2V4A
E1IjLyEUWBFYU4vAIwGx5IN2WVvedjGJTr6Cp+wSMwppNB7wvAbZ9OtXwSi4Nerf
xCDnY8wMgoYnZxo/di2OX2Ubk92I7VnyD2wPSC8aNMP8qxPEp8IlHFnFK0Lu3Bs6
lSpg5VyU/ttKoGjpwpZel23vUkHquePzCXyTBCzblXbhMv4nN1YP7Ehyiufeg84g
HNyXhq37D8EW0i9EqTOg8GFIgXOB0gJuXcMrbI9hQRu+TULuyoXGSch8qsrdzM/m
Xr2XhkPIo9ZjiVeKC0/zDsSVGX92LJ1dHZrwbbf0X6v4eim+fIOEuJT29hPUlO4Y
dtFSue05EJP4w7P/rm4a2Ot/3SiF3BFUeYpS3qQN+eFb0W7IAW9OmSPWakn/TNYy
BPQGkedbVVDeDW95q8nInU8rKlECMaopw45hcvKBqYtQ6gRYZIypZitr11ZDBgm1
sivDZmqqLBFPcH+NTAwElVRC9b5YlFscOyN10/hJaWCkBE6DditY+y9hiQdMr8EB
IjjvIa4vV7wH8PgWRURgLTmfAIgS3oEcSxuP8owhwvLUlXBqxbZF7fTsshsnZFfS
jPbgLl+NRM3dy8R8bTDrfc8ScTQJLorY5xxJSHmG1528SxxqADqMCZlxZ1+l8VTN
Iqafu7kCDQRVF2AsARAAxDZm6C2wIJOjJRs5F1gUAF4AgQ55J3giEOcuObPDPIqb
HxPDW9heg0HsSxW2QVXat+g21gBbWow90fly1GdEtHklTZf8YxMmI6T/Ahfr+uVF
EDuW0XSUb1KNeb0+rPs57n+qdST+3ufKl+5q4KVd/T5ywtjWBIEZLUkT3kyrJd+P
KfWVyX2b7gYodZMWhl94nnTWLlguDmAWUBZPz0XkMB9BhmcWzaIuzPEkRKxFeyh7
LPNL/Byr/5XyZQja3oSfS1GD/sQm5Eae02mVUKptncZa6ruZqGYLlTRxlkkVoIzk
iELEMQ6PALZTnUcV+goGKcgfRIy3ZqYrlKFWRYbo33EyIL+3jjGjsWgjeU0GjR09
S7WiOA8E7ipoa8bwDSTeRzTNNKPN4ULddAAuGpKn4EJ1W2C3euD/l7aw52pB8HHw
Jfa0Pvqi5BJeSJDPICmURgZLgY4ku2G+npSbC2++3igfUVWXaxc+XtfpVoW+tup2
OUkcS1fhQGbKlByELinv5DdgisP63liG37RcMCc6NonEqzNM+BhD+mc8WKAKzajX
rxEMtImggMyqhj0lRV5j93u0fxQgEgQK5Wp9UE4nSqBMhwwPkaf98ioqxJRhIRkw
LmZFgRzqyd4aN7LqbOedRccfpxnhRF9DqPX1iz+B/qiN0NQ5vksG8cvAWzatbT0A
EQEAAYkCHwQYAQIACQUCVRdgLAIbDAAKCRDCwP3ggg8iXP5READKRCKghEpyfTt/
254Kphx3cKu4q2OFWsboQJQaFV4BopiO71dIASW8mzqK7MGc/0Jvr795JWDsehb1
td7P+HMTpqGEDsQ9uHrvBjPwIfaLDc/OieqJ7Refps07FgWghzMhBl4Xj/+s2R7D
VfNDeFpUGxmVO43FOfMsC3swe4nADolrngAJnMjXId/Qcdi1QODZOOgnWT9fCwTp
rpp4CEyHOroIZwU8N4Q4Y2BV2qf+2KaWuYyXwP3oBJSQ8YjVTdxDvowf1mXArflz
w0i6tvkaehe6qR6PjDYD1vBP7gM9NMTUmuTgdXKoozUZBM6ACp3CA2sPK46cYVa2
/LBmPGeH4l27kJf48JCsP9Fxp0Vk4+Bb5D6W9+t+EqLXjQHbR+yNJRtvrl0bZ8E7
zV6TXHVJzqFlqCkS6Y9dXmBjv3nS+MvHnQOipOezO3xPwkZOU+B5KMRjeYAj7lMf
qwaI9E29BNep+dUI3ogzyIPxwcqHcEoxkGSLcBKBdebv8TM6toCZOJieATBcOua+
r3VL9gDiYVM5jRZFfwupEqT5R7dFamXj6DXXKHMQGs1AsljxNzkHy3xPU4OlRjYS
xo7tvGBlNK8OuHy3HYUPqZUl6QYZcKP23p5SDHBXy4YedimusrCyodshVb0ScCzt
g/e9PnnVnqzyOQzwJb+zU1ocX0kXaQ==
=O7M5
-----END PGP PUBLIC KEY BLOCK-----
pub   4096R/92BC2F2B 2015-11-08
uid                  Raul Gutierrez Segales <rgs@apache.org>
sig 3        92BC2F2B 2015-11-08  Raul Gutierrez Segales <rgs@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1

mQINBFY+qckBEAC4Z9lHvKZRLXxAlirLoyOtGTCoIWNanul79svu0hCU+NBd9Pay
jEZo6/DyVsHnXbnLZoViktc6SljoITvYSSNtFClEHbUtcuqbKV2ULJNb2ypxu74s
l/N1x1Xawlnxk3NimT4r2HLO3hgp7Ja2A7OmVVwCNNxUzZQo1U9g5J6kF5sE5Lj7
LSkPGxZ3mgq5J2KiQ/rbgoUpd5e2LiZ9v3ssnyppRzdh2h2rlQgcv9wUIgGxb9nH
uvGMI1z/jV8btoK6il8EHZ9jHYLAVf8rizXi4dGgzV2BOSx898nV4UqO+/ObGBIr
Nrch84trDhGb5fW16qwm5Re1xcvQ7ogWC+zgzY1T3zEhQrp/1kYWCUfz8nq/QHyD
WBDs+96eh9GmQTKgvagkUds00Pkd+z7cIlnfkwHUbcjycl9sa5xqcsf152E7/cs2
XGhwPGavem2/tqjCjSF/KLhlxSw153mPchyQ2jgFRueewVXx/mm1niH1mqCmqLCZ
O+vMTnTkJ+JyXS75Uig2ndJyV13OoSxSfBIcmlfeKFY94j0m969AbvCbgnFwQOzp
IJ2RP378h79exItWgtdShyi/ygvouWUZS8i5IU53sbVNCZtNGJLpAhUuA77WOxaF
Q499jwQJmTG6E3SJ4/FcuanbNs9GQg7HwNK7jleRmy/NzZRM5HopV0w6DwARAQAB
tCdSYXVsIEd1dGllcnJleiBTZWdhbGVzIDxyZ3NAYXBhY2hlLm9yZz6JAjcEEwEI
ACEFAlY+qckCGwMFCwkIBwIGFQgJCgsCBBYCAwECHgECF4AACgkQvjtrk5K8Lys6
hQ//XfmOILzNf65zCHkIbTjYD+Wm5cAhfgiGfNa+XAwsr7LDNH1qzsJ1TkFCur+W
c2xUpqugwk4Ebeo91MnMvekzCoZvu1rfCRlznZGre8CqW7bPRm/6fBBQXcBbyUDp
ohDid4f/Jk3POWiMASL0D512Ma1QWeC3MJ664bIyub1oYJglALxzPdetH5R+9tRP
uQeE+x7YAB6HhlSpV+aByTTRXLSoOcuGRcUFzk091ACeta9Ifk5Z7xxTGmzO5A02
D4XRg2Hyog3bof7FDWrcOHx3saOCEcV9iws8/DIesaWbBd+639/s0MkT1o+PmUOh
SsIUAAhaAV04M+btDozakP9E1JI0lmT8fCbCSLcheQThs+WBu6hoImDWWM7bZ6SP
EUP+JmvvpAIXCCnTIeyvEwIRa1R9MrgLTYdXgK1A3UWtMyG1g1x+1GJ21FstDEdV
6ihPZRrxpxJDdoTWZUge+UPr7JJlGcfETOg1FTs2h7VpDe6WF5oaXTGDK/AJnWsq
pPhVMfayck4818S7QqNrivtenJmuktHjECIcTYyU9O4yQI1l5NHrz2o4ScFIUY/Y
DD7iT0sGrCr8ES481D1RznGmPTwaY5zjwc59y/Ze3u9vA/JGlEcp7IT7fA6t3WI2
EjutcaM7Qq8SRpGSHCBnAdQR1qQj7On4//i+Ue6mh0T4Jsw=
=nmmb
-----END PGP PUBLIC KEY BLOCK-----
pub   4096R/ADAFD097 2016-06-23
uid                  Chris Nauroth (CODE SIGNING KEY) <cnauroth@apache.org>
sig 3        ADAFD097 2016-06-23  Chris Nauroth (CODE SIGNING KEY) <cnauroth@apache.org>
sub   4096R/7414090D 2016-06-23
sig          ADAFD097 2016-06-23  Chris Nauroth (CODE SIGNING KEY) <cnauroth@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.13 (Darwin)

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
04LpkJejX3qx33i2al7yXFjxI+3K
=vC5F
-----END PGP PUBLIC KEY BLOCK-----
pub   4096R/B5E9BD2D 2016-08-15
uid       [ultimate] Rakesh Radhakrishnan (CODE SIGNING KEY) <rakeshr@apache.org>
sig 3        B5E9BD2D 2016-08-15  Rakesh Radhakrishnan (CODE SIGNING KEY) <rakeshr@apache.org>
sub   4096R/51673139 2016-08-15
sig          B5E9BD2D 2016-08-15  Rakesh Radhakrishnan (CODE SIGNING KEY) <rakeshr@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2

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
mhqK+kCnQV8bmEPzTTu1BtXvCwPniUimK3c=
=mE84
-----END PGP PUBLIC KEY BLOCK-----pub   4096R/767E7473 2017-03-27
uid       [ultimate] Michael Han (CODE SIGNING KEY) <hanm@apache.org>
sig 3        767E7473 2017-03-27  Michael Han (CODE SIGNING KEY) <hanm@apache.org>
sub   4096R/EA264198 2017-03-27
sig          767E7473 2017-03-27  Michael Han (CODE SIGNING KEY) <hanm@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v2

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
fVATiSkfrGF+NfEeB3MVOw==
=tV3z
-----END PGP PUBLIC KEY BLOCK-----
pub   rsa4096 2014-09-23 [SCA] [expires: 2024-09-20]
      586EFEF859AF2DB190D84080BDB2011E173C31A2
uid           [ultimate] Abraham Fine <abe@abrahamfine.com>
sig 3        BDB2011E173C31A2 2016-07-08  Abraham Fine <abe@abrahamfine.com>
sig 3        BDB2011E173C31A2 2014-09-23  Abraham Fine <abe@abrahamfine.com>
sig          6D873605687684F6 2016-07-05  [User ID not found]
uid           [ultimate] keybase.io/abefine <abefine@keybase.io>
sig 3        BDB2011E173C31A2 2014-09-23  Abraham Fine <abe@abrahamfine.com>
sig          6D873605687684F6 2016-07-05  [User ID not found]
uid           [ultimate] Abraham Fine <afine@apache.org>
sig 3        BDB2011E173C31A2 2016-07-05  Abraham Fine <abe@abrahamfine.com>
sig 3        BDB2011E173C31A2 2016-07-08  Abraham Fine <abe@abrahamfine.com>
sig          6D873605687684F6 2016-07-05  [User ID not found]
uid           [ultimate] Abraham Fine <a@abrahamfine.com>
sig 3        BDB2011E173C31A2 2014-09-23  Abraham Fine <abe@abrahamfine.com>
sig          6D873605687684F6 2016-07-05  [User ID not found]
sub   rsa4096 2016-07-05 [S]
sig          BDB2011E173C31A2 2016-07-05  Abraham Fine <abe@abrahamfine.com>
sub   rsa4096 2014-09-23 [E] [expires: 2024-09-20]
sig          BDB2011E173C31A2 2014-09-23  Abraham Fine <abe@abrahamfine.com>

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=HURJ
-----END PGP PUBLIC KEY BLOCK-----
pub   rsa4096 2018-06-19 [SC]
      3F7A1D16FA4217B1DC75E1C9FFE35B7F15DFA1BA
uid           [ultimate] Andor Molnar <andor@apache.org>
sig 3        FFE35B7F15DFA1BA 2019-02-06  Andor Molnar <andor@apache.org>
sub   rsa4096 2018-06-19 [E]
sig          FFE35B7F15DFA1BA 2018-06-19  Andor Molnar <andor@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=Vkmg
-----END PGP PUBLIC KEY BLOCK-----
pub   rsa2048 2017-04-12 [SC]
      BBE7232D7991050B54C8EA0ADC08637CA615D22C
uid           [ultimate] Enrico Olivelli <eolivelli@apache.org>
sig 3        DC08637CA615D22C 2017-04-12  Enrico Olivelli <eolivelli@apache.org>
sub   rsa2048 2017-04-12 [E]
sig          DC08637CA615D22C 2017-04-12  Enrico Olivelli <eolivelli@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQENBFjuhrUBCAC1Gd/2cx6oWIrelUteT7MP4e0reJUsv9H8aROVh2H0P0000bvd
g3S5tb7thE+MNw8koYQKBegW7PPpiBDubGGhX5EHo9gDKcK+3HVDM5JdfF98yYsZ
ZL6XiV3DuEsfN74TJFqnb1+mqZpUNAHx5vFc89ba0PeBPUgPmm8xl92zy73OEDl3
IfBe7jEJjPWhcyaoVSxYtucnyxd5jDtWqWBcqLuAfcmO4QywhNp48fXDOQM5W43V
GWZCNuF7EXVGA47rSdRf+zvc++2NaHT/AZEuVvji2EZZoxehkXRqgoyQGyySjkjn
F8Xy04/47u6E14ed1qwQI+BgoZbRSAeCmJ6RABEBAAG0JkVucmljbyBPbGl2ZWxs
aSA8ZW9saXZlbGxpQGFwYWNoZS5vcmc+iQE4BBMBAgAiBQJY7oa1AhsDBgsJCAcD
AgYVCAIJCgsEFgIDAQIeAQIXgAAKCRDcCGN8phXSLAlAB/9jWGYjdNpzT/dU/yGY
LxoMh3zrbP0cj+h9juLV5RKEjVX8tr4aQoRLXx4HnC6tVStBvL66Z+KEMp3Rja61
b35tHOmb1ZnLYIgMUQ//foa9lRFQ1xv5snZfNRGt1yw/RP8qJJJF903w1Gn5RF7J
fnubCZkCc3FYLplUITGe4z+ypCev4cyAQAPSUenPt6yoyEGnaLgIhpilLZfhMcJg
tQQWK7m8DGqEvm9aACBBXxueqFRhgkHvvYwt/l06Uu7/n2DugTfcm3f5SwVbEI2E
Pt+IRbpWGwrG9TFg+GSyDekB6IZxVbi4jLqGU86UJAo5kubH4kIRzS4CWtJfydTV
jSImuQENBFjuhrUBCADYkyMyG9dY+vDXTX5DI7gORaZf/9vaJjclgBU5szbKTT5T
NJUMLdRGiJ5TflJMA4+iuvE7uf8Sr33uhUXCri2xnrkdAFqOHZEYueDMNC6Rya2g
Gr9w/AroBUUcDi5bwrYELZKXkq4qAMse65PkOOF2w6HrDvMObAtAZyaP3ZqkBeAc
ZewYK+QMmsYGeOk1Fgm8CLZOnDbrzh78EV+2auyosyIqmKvNAkgoyprFjFr7AeAg
JLxVCrjKXvoEfINbt8X41uXQ/aOgQqFAqquATcTKtb9fgk+pRxFqawTwTGc/ZuZ1
dSl2rxeKiMMOszfcKXFTCJuEUsZjPZviTnKvYfCxABEBAAGJAR8EGAECAAkFAlju
hrUCGwwACgkQ3AhjfKYV0izz+ggAqNdRR3AKXBtMoQoCpegGl7574M3f67hGdayt
mRA8LrSVgYJO6iOJV4+i7vxgzFiTP+dJj8RJLNVD0MCanYXqakes/GzKp3O9NrX+
iNHOuqfKr0qRYT/fNrOFZ5OyC4yK5IDdXcg5uwU87iMOFfqcml8Vmkox/QHurkqs
Ri7JrVSg/6vK3wvKyTu3TdzuTfs5QvOLA09QGvX9qnAjl00cLSruoDcp5i0RxRqc
NT3h4L51AkiRU0PiGA//Qc8g+jJBREuDpG9N0NbDcjLaGY3IvpMm5NKBWtrDIsN9
5vfBZyNC2sA+rnEINTioed/cwspHmMgX0n3Jq1x4GSUMZS7q1g==
=Q0lt
-----END PGP PUBLIC KEY BLOCK-----
pub   rsa3072 2020-01-30 [SC] [expires: 2022-01-29]
      3D296268A36FACA1B7EAF110792D43153B5B5147
uid           [ultimate] Norbert Kalmar <nkalmar@apache.org>
sig 3        792D43153B5B5147 2020-01-30  Norbert Kalmar <nkalmar@apache.org>
sub   rsa3072 2020-01-30 [E] [expires: 2022-01-29]
sig          792D43153B5B5147 2020-01-30  Norbert Kalmar <nkalmar@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQGNBF4yhwMBDADiI0DpXFNH5L8yBn4g5oj8dchfyYHYF2+EPnWEC4UeEOhuc7Y+
LLTF4ZI4ymn/UzJHbJs+fV1HIV/V6MZezjEAK+ZAJxsWhC6s6N2dahIOVIgQEu66
SryEcZL41CTHgV+ifmNrfJ1MKORq+4ng6VYI3VRSCANRWtNVaS1GyAWUqJX0od/w
XqeVi3L5z0QgddvzMJi9qecTHfLCC2C0jXvp3NiCfDjLrEuibLSPgYkRmPD2Q0Rn
khHef8lp6AqH+X4MnONi3Kxbv0N4ZoPZAPWDTsCnUDbffk+d9bWUI92XFWJf262e
jB/10vcTv1jpikVWl4KuEQNqwHh2BVsoFz2X9TR/Kum7U+tQz0teO0bVLHJDq+mh
296Hhb/eHoseYigKDGEtEWuGpUiZqY758FT+6vFP7QSFWrNJH2oEDk+UJlKJD3iu
oWaNbSa556ulGWriRlNdGiBMNdF7YPnAHko9UOhnCDJ2Ueq57Sh3sATbVKwKTfF4
oUR7UkbklV9tA4kAEQEAAbQjTm9yYmVydCBLYWxtYXIgPG5rYWxtYXJAYXBhY2hl
Lm9yZz6JAdQEEwEKAD4WIQQ9KWJoo2+sobfq8RB5LUMVO1tRRwUCXjKHAwIbAwUJ
A8JnAAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRB5LUMVO1tRR1ZWDADGtUik
eGPBebX2sjSzDI0J9dSkFdzPtqzfnSiliPHrb2dRz6XGoi/mz5IMvcTe9bti0Eym
TA+2x1p8o9o3lEFi89CJSBaPCvbkzjCfWIn24HWlYBzPBDqq2+vyh/aiENF89Xgy
T9V9WZiet40QIGYDPx4m+vINypah5dPWvSqUNcBxEsYQoHmJGOGnKGWT0mJOWX7o
oYPjFtr3E88XMRyk5+sTg/onur/9TAhYx0pasdQSslWt2NrkH4/dRoNVWJMHHbSU
ctxTQ8MiadUgop6ppud1hoaqovO6X7Np5iCHZv/Dgxhr9a3ZHJ/99V3+AbsYpok4
Xgwe2LmVqL8AzKBJQyCYOLP4EKrc8tOV25LUhxEOloUesVOcNhl2dGB0wwSmEmZc
8PE5eiMDRPqx4UJqJyL4qE/lOykwzJRv1Xzqf30lTn+pmsmR7zegX7zl499pQlQU
Lx2S26kE3wkTZE97SMsWv+0BmkS+pmITAB/58lT7Mf5T80z5WT9HMAbjVLG5AY0E
XjKHAwEMAOoNECVKpYqwBRPFyzTzAjqKLQHVVQdC1H1EM1FLJC6gE9dypREEJChh
Mo9GshjuwgCXIhHsTWaEqeLkg0YsQPXd1p2luFMNDzGClX8KKQsh4CRY4l2T1TMO
+YODZLzNsXj3psKZbgzy41MPoJHKz9woyc8C2Syy26qCPdEl/Spb1aIdwzvnseI/
K8+q6DhGOAAnSsHUEXXltsjFbHtBUX3ejqo9OsfIrADht9fTUNOvrMOXO7+469Y+
kjWqAn21pJc7ZzotQAo717ewIa52+Cj88CHNwuMGH6jPWGE/V7kkee0GgFNxv5/c
ABx/84MXkmj0tz4i3Bh0AtwxbFE2H3OYtDjKwQamQ1p4o+3svxjgX7vaGK209yGI
UVj09hpOtz/E2xFeMwgX1JyX7bS9Kzkhgfhn9HHzihAvzSZCqQxsF3VcEKr0KeSO
bjQ3pPb5B50v91c/qMHJILVa8lZW3RMCpkTTcOCN2vtfpJjUmqkGubz3smmgX6YL
DVlNwHQSHwARAQABiQG8BBgBCgAmFiEEPSliaKNvrKG36vEQeS1DFTtbUUcFAl4y
hwMCGwwFCQPCZwAACgkQeS1DFTtbUUfmSwwA33+P7PdGQm8ZZxjnuN4dG/3ZScUA
9NiKLrlUs+YIfhkd/m40YKNR+0ON+G6pwSWsVMqK/1zs0yCfCZdC3OAcMXMH06FG
HTSv7oI6l2BE6yMJafAmXLkOks5KK8ge0Ahe62fs/7KKLtOXltuMgIsQ2o2v8Cyd
9WAI6hksnF7a2A1C54mvbSpOZ0gRSto3mI5V8tl+aHdGr2uh/Q7i2dpmNhoF+D35
VDAJYNLu2TjdvUzEIrpIJjS9fzbnSP1er5q/0Y1nhS9UboPhCY39e0DL89LxFGDS
zT1jyi7CMdvYCY4/jEnrlR/hh1XwIwiDMC68V0YNJtf/JG/ERviu6omUI/YS7N4U
3LGbhgoVYW96jPa05ar0R1RRhmjwGoA1rX8rjP94ziHsQ7aVVrAb/kPQQS5XQyKY
kYa9ccaUr0LF1H2zRpbhDvwY2Rp2TYlbN/dgjBHJ383m/PJSfBaONp939bIB0MLE
aGFk8H4NrBb7HhJq4QX34QcOf2dCpupLmMsf
=bZFB
-----END PGP PUBLIC KEY BLOCK-----
pub   rsa4096 2020-04-03 [SC]
      52A7EA3EECAE05B0A8306471790761798F6E35FC
uid           [ultimate] Mate Szalay-Beko (CODE SIGNING KEY) <symat@apache.org>
sig 3        790761798F6E35FC 2020-04-03  Mate Szalay-Beko (CODE SIGNING KEY) <symat@apache.org>
sub   rsa4096 2020-04-03 [E]
sig          790761798F6E35FC 2020-04-03  Mate Szalay-Beko (CODE SIGNING KEY) <symat@apache.org>

-----BEGIN PGP PUBLIC KEY BLOCK-----

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
DCYGqPl9WXsCfZJu53q7eGV9
=Hq8V
-----END PGP PUBLIC KEY BLOCK-----
View Code

1.3、构建zookeeper镜像

二、准备zookeeper集群部署文件

2.1、准备zookeeper 部署yaml文件

root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# vim zookeeper.yaml 
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# cat zookeeper.yaml 
apiVersion: v1
kind: Service
metadata:
  name: zookeeper
  namespace: magedu
spec:
  ports:
    - name: client
      port: 2181
  selector:
    app: zookeeper
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper1
  namespace: magedu
spec:
  type: NodePort        
  ports:
    - name: client
      port: 2181
      nodePort: 32181
    - name: followers
      port: 2888
    - name: election
      port: 3888
  selector:
    app: zookeeper
    server-id: "1"
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper2
  namespace: magedu
spec:
  type: NodePort        
  ports:
    - name: client
      port: 2181
      nodePort: 32182
    - name: followers
      port: 2888
    - name: election
      port: 3888
  selector:
    app: zookeeper
    server-id: "2"
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper3
  namespace: magedu
spec:
  type: NodePort        
  ports:
    - name: client
      port: 2181
      nodePort: 32183
    - name: followers
      port: 2888
    - name: election
      port: 3888
  selector:
    app: zookeeper
    server-id: "3"
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  name: zookeeper1
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
        server-id: "1"
    spec:
      volumes:
        - name: data
          emptyDir: {}
        - name: wal
          emptyDir:
            medium: Memory
      containers:
        - name: server
          image: harbor.magedu.net/app1/zookeeper:v3.4.14 
          imagePullPolicy: Always
          env:
            - name: MYID
              value: "1"
            - name: SERVERS
              value: "zookeeper1,zookeeper2,zookeeper3"
            - name: JVMFLAGS
              value: "-Xmx2G"
          ports:
            - containerPort: 2181
            - containerPort: 2888
            - containerPort: 3888
          volumeMounts:
          - mountPath: "/zookeeper/data"
            name: zookeeper-datadir-pvc-1 
      volumes:
        - name: zookeeper-datadir-pvc-1 
          persistentVolumeClaim:
            claimName: zookeeper-datadir-pvc-1
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  name: zookeeper2
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
        server-id: "2"
    spec:
      volumes:
        - name: data
          emptyDir: {}
        - name: wal
          emptyDir:
            medium: Memory
      containers:
        - name: server
          image: harbor.magedu.net/app1/zookeeper:v3.4.14 
          imagePullPolicy: Always
          env:
            - name: MYID
              value: "2"
            - name: SERVERS
              value: "zookeeper1,zookeeper2,zookeeper3"
            - name: JVMFLAGS
              value: "-Xmx2G"
          ports:
            - containerPort: 2181
            - containerPort: 2888
            - containerPort: 3888
          volumeMounts:
          - mountPath: "/zookeeper/data"
            name: zookeeper-datadir-pvc-2 
      volumes:
        - name: zookeeper-datadir-pvc-2
          persistentVolumeClaim:
            claimName: zookeeper-datadir-pvc-2
---
kind: Deployment
#apiVersion: extensions/v1beta1
apiVersion: apps/v1
metadata:
  name: zookeeper3
  namespace: magedu
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
        server-id: "3"
    spec:
      volumes:
        - name: data
          emptyDir: {}
        - name: wal
          emptyDir:
            medium: Memory
      containers:
        - name: server
          image: harbor.magedu.net/app1/zookeeper:v3.4.14 
          imagePullPolicy: Always
          env:
            - name: MYID
              value: "3"
            - name: SERVERS
              value: "zookeeper1,zookeeper2,zookeeper3"
            - name: JVMFLAGS
              value: "-Xmx2G"
          ports:
            - containerPort: 2181
            - containerPort: 2888
            - containerPort: 3888
          volumeMounts:
          - mountPath: "/zookeeper/data"
            name: zookeeper-datadir-pvc-3
      volumes:
        - name: zookeeper-datadir-pvc-3
          persistentVolumeClaim:
           claimName: zookeeper-datadir-pvc-3
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# 

2.2、准备zookeeper 存储pv、pvc yaml文件

root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# cat pv/zookeeper-persistentvolumeclaim.yaml 
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zookeeper-datadir-pvc-1
  namespace: magedu
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: zookeeper-datadir-pv-1
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zookeeper-datadir-pvc-2
  namespace: magedu
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: zookeeper-datadir-pv-2
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: zookeeper-datadir-pvc-3
  namespace: magedu
spec:
  accessModes:
    - ReadWriteOnce
  volumeName: zookeeper-datadir-pv-3
  resources:
    requests:
      storage: 10Gi
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# vim pv/zookeeper-persistentvolume.yaml 
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# cat pv/zookeeper-persistentvolume.yaml 
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zookeeper-datadir-pv-1
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce 
  nfs:
    server: 172.16.88.169
    path: /data/k8sdata/magedu/zookeeper-datadir-1 

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zookeeper-datadir-pv-2
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 172.16.88.169
    path: /data/k8sdata/magedu/zookeeper-datadir-2 

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: zookeeper-datadir-pv-3
spec:
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    server: 172.16.88.169 
    path: /data/k8sdata/magedu/zookeeper-datadir-3 
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# 

2.3、nfs创建zookeeper共享目录

[root@easzlab-k8s-nfs-01 ~]# mkdir -p /data/k8sdata/magedu/zookeeper-datadir-{1,2,3}
[root@easzlab-k8s-nfs-01 ~]# ll -h /data/k8sdata/magedu/
total 0
drwxr-xr-x 9 root root 160 Oct 23 22:11 ./
drwxr-xr-x 5 root root  46 Oct 23 11:17 ../
drwxr-xr-x 2 root root  21 Oct 23 19:08 images/
drwxr-xr-x 2 root root   6 Oct 23 11:17 jenkins-data/
drwxr-xr-x 2 root root   6 Oct 23 11:17 jenkins-root-data/
drwxr-xr-x 2 root root  39 Oct 23 19:12 static/
drwxr-xr-x 2 root root   6 Oct 23 22:11 zookeeper-datadir-1/
drwxr-xr-x 2 root root   6 Oct 23 22:11 zookeeper-datadir-2/
drwxr-xr-x 2 root root   6 Oct 23 22:11 zookeeper-datadir-3/
[root@easzlab-k8s-nfs-01 ~]# 

三、k8s部署zookeeper集群

3.1、创建pv

root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl apply -f pv/zookeeper-persistentvolume.yaml 
persistentvolume/zookeeper-datadir-pv-1 created
persistentvolume/zookeeper-datadir-pv-2 created
persistentvolume/zookeeper-datadir-pv-3 created
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl get pv -A
NAME                      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                          STORAGECLASS   REASON   AGE
jenkins-datadir-pv        100Gi      RWO            Retain           Bound       magedu/jenkins-datadir-pvc                             7h47m
jenkins-root-datadir-pv   100Gi      RWO            Retain           Bound       magedu/jenkins-root-data-pvc                           7h47m
zookeeper-datadir-pv-1    20Gi       RWO            Retain           Available                                                          6s
zookeeper-datadir-pv-2    20Gi       RWO            Retain           Available                                                          6s
zookeeper-datadir-pv-3    20Gi       RWO            Retain           Available                                                          6s
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# 

3.2、创建pvc

root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl apply -f pv/zookeeper-persistentvolumeclaim.yaml 
persistentvolumeclaim/zookeeper-datadir-pvc-1 created
persistentvolumeclaim/zookeeper-datadir-pvc-2 created
persistentvolumeclaim/zookeeper-datadir-pvc-3 created
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# 
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl get pvc -A
NAMESPACE   NAME                      STATUS   VOLUME                    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
magedu      jenkins-datadir-pvc       Bound    jenkins-datadir-pv        100Gi      RWO                           7h48m
magedu      jenkins-root-data-pvc     Bound    jenkins-root-datadir-pv   100Gi      RWO                           7h48m
magedu      zookeeper-datadir-pvc-1   Bound    zookeeper-datadir-pv-1    20Gi       RWO                           10s
magedu      zookeeper-datadir-pvc-2   Bound    zookeeper-datadir-pv-2    20Gi       RWO                           10s
magedu      zookeeper-datadir-pvc-3   Bound    zookeeper-datadir-pv-3    20Gi       RWO                           10s
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# 

3.3、创建zookeeper集群

root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl apply -f zookeeper.yaml 
service/zookeeper created
service/zookeeper1 created
service/zookeeper2 created
service/zookeeper3 created
deployment.apps/zookeeper1 created
deployment.apps/zookeeper2 created
deployment.apps/zookeeper3 created
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl get pod -n magedu -owide
NAME                                         READY   STATUS    RESTARTS      AGE     IP               NODE            NOMINATED NODE   READINESS GATES
magedu-jenkins-deployment-79bbd88cb7-84999   1/1     Running   0             7h49m   10.200.104.250   172.16.88.163   <none>           <none>
zookeeper1-849c5968c7-b8fht                  1/1     Running   1 (26s ago)   40s     10.200.105.175   172.16.88.164   <none>           <none>
zookeeper2-c864cf75d-xmkhs                   1/1     Running   1 (27s ago)   40s     10.200.104.252   172.16.88.163   <none>           <none>
zookeeper3-6f4b6df787-v5rnr                  1/1     Running   1 (15s ago)   40s     10.200.40.205    172.16.88.160   <none>           <none>
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl get svc -n magedu
NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                                        AGE
magedu-jenkins-service   NodePort    10.100.0.119     <none>        80:38080/TCP                                   7h49m
zookeeper                ClusterIP   10.100.117.157   <none>        2181/TCP                                       52s
zookeeper1               NodePort    10.100.20.66     <none>        2181:32181/TCP,2888:36144/TCP,3888:56564/TCP   52s
zookeeper2               NodePort    10.100.152.198   <none>        2181:32182/TCP,2888:58299/TCP,3888:63142/TCP   52s
zookeeper3               NodePort    10.100.77.30     <none>        2181:32183/TCP,2888:56240/TCP,3888:61872/TCP   51s
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# 

验证zookeeper集群健康状态

root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl get pod -n magedu
NAME                                         READY   STATUS    RESTARTS      AGE
magedu-jenkins-deployment-79bbd88cb7-84999   1/1     Running   0             8h
zookeeper1-849c5968c7-b8fht                  1/1     Running   1 (11m ago)   11m
zookeeper2-c864cf75d-xmkhs                   1/1     Running   1 (11m ago)   11m
zookeeper3-6f4b6df787-v5rnr                  1/1     Running   1 (11m ago)   11m
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl exec -it -n magedu  zookeeper1-849c5968c7-b8fht bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.3# /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Mode: follower #代表从节点
bash-4.3# exit
exit
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl exec -it -n magedu  zookeeper2-c864cf75d-xmkhs bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.3# /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Mode: leader   #代表主节点
bash-4.3# exit
exit
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl exec -it -n magedu zookeeper3-6f4b6df787-v5rnr bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.3# /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Mode: follower #代表从节点
bash-4.3# 

3.4、编写测试脚本

cat zookeeper-client.py

#!/bin/env python
#coding:utf-8

from kazoo.client import KazooClient

#定义服务器地址
zk = KazooClient(hosts='172.16.88.157:32182')

#创建连接
zk.start()

#makepath=True是递归创建
zk.create('/magedu/kafka/nodes/id-2',b'172.16.100.22',makepath=True)

#查看所有数据
node = zk.get_children('/')
print(node)

#与zookeeper断开
zk.stop()

往zookeeper集群写入数据

客户端验证

3.5、zookeeper主从切换验证

[root@easzlab-k8s-harbor-nginx-01 ~]# /apps/nginx/sbin/nginx -s stop #停止harbor nginx反向代理负载均衡器
[root@easzlab-k8s-harbor-nginx-01 ~]# netstat -tnlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      660/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      856/sshd: /usr/sbin 
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      20805/sshd: root@pt 
tcp6       0      0 :::22                   :::*                    LISTEN      856/sshd: /usr/sbin 
tcp6       0      0 ::1:6010                :::*                    LISTEN      20805/sshd: root@pt 
[root@easzlab-k8s-harbor-nginx-01 ~]# 
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl delete pod -n magedu  zookeeper2-c864cf75d-xmkhs #删掉旧的leader
pod "zookeeper2-c864cf75d-xmkhs" deleted
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl get pod -n magedu
NAME                                         READY   STATUS         RESTARTS      AGE
magedu-jenkins-deployment-79bbd88cb7-84999   1/1     Running        0             9h
zookeeper1-849c5968c7-b8fht                  1/1     Running        1 (74m ago)   75m
zookeeper2-c864cf75d-m9v9x                   0/1     ErrImagePull   0             8s
zookeeper3-6f4b6df787-v5rnr                  1/1     Running        1 (74m ago)   75m
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl exec -it -n magedu zookeeper1-849c5968c7-b8fht bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.3# /zookeeper/bin/zk
zkCleanup.sh        zkCli.sh            zkEnv.sh            zkServer.sh         zkTxnLogToolkit.sh  
bash-4.3# /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Mode: follower
bash-4.3# exit
exit
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl exec -it -n magedu zookeeper3-6f4b6df787-v5rnr bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.3# /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Mode: leader #此时leader自动切换到第三个pod
bash-4.3# 

pod恢复后并以从节点加入zookeeper集群

root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl get pod -n magedu
NAME                                         READY   STATUS    RESTARTS      AGE
magedu-jenkins-deployment-79bbd88cb7-84999   1/1     Running   0             9h
zookeeper1-849c5968c7-b8fht                  1/1     Running   1 (80m ago)   80m
zookeeper2-c864cf75d-m9v9x                   1/1     Running   0             5m47s
zookeeper3-6f4b6df787-v5rnr                  1/1     Running   1 (80m ago)   80m
root@easzlab-deploy:~/jiege-k8s/20220807/k8s-data-n70-20220807/yaml/magedu/zookeeper# kubectl exec -it -n magedu zookeeper2-c864cf75d-m9v9x bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
bash-4.3# /zookeeper/bin/zkServer.sh status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 9010
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /zookeeper/bin/../conf/zoo.cfg
Mode: follower
bash-4.3# 

 

posted @ 2022-10-23 22:20  cyh00001  阅读(588)  评论(0编辑  收藏  举报