基于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----- mQINBFspV7sBEADE8uw+howAopRrHVsNo7pYlKbP203uJvekgXrW1Y2LGItRLmpz F2jqh2RakmtkX5DvX9eUEepZsZYFhM5RmmniJJr5sVtP19SYIXnwuPoV9CAb6Txb f7vLa4wZo+AXNr3AipaQuIT+tH75sjtCxjQoCrQ1c+Y4VjYjckhAr7FNUADjUCkM T7/rTWHc1kIbfazU581VheE6uss0+hgSHsrcr0irANnswZgnW4LRvkvg0VbFE9lz oM1FfnycNbo9mw55lNQzz4FCTeewS3imGia9dHA9Z67VlpUrjPn+I5aet4m82sfR OWyOr4/fAsfpIzhNy9O55Dnao4d9k7sYNy0eTIkTaDGF5p6kJ+YL6udxXy7Clhkj Y5xtz4b3dclFFzh9PyxuqbkbvU1DPenVPfY7/Qfo9rGobyPBzYDrDxkXbUOIDHB1 cZ7Cx/t3HdlfHWqqmuLiV3msg/VGteLQfFep2MpbROSPGDmCXvFwVx4U4xmcHWy4 18BKnePGDKgEQsVy3SjarK316MmjwFVcYFG7pdV+ErDUtS37DwvZ3gsGKpvGf41o qMSrOw/XbBSz0mFpLXaj4NfU6T6Am6w3B/rQ1084UycSo2ZneFjgQM4z7hEkwfoV YTUspf/UrZxfb8PELk1OoPnFfvMjp2In5sCpeQ9qc5vXrP3jztT8A3gQIwARAQAB tB9BbmRvciBNb2xuYXIgPGFuZG9yQGFwYWNoZS5vcmc+iQJOBBMBCAA4FiEEP3od FvpCF7HcdeHJ/+NbfxXfoboFAlxa29QCGwMFCwkIBwIGFQoJCAsCBBYCAwECHgEC F4AACgkQ/+NbfxXfobosxA/9HWQ8hvQkHSNHGLuz9wXmchxGUf5bqM14v7j9l1KK BNmGSifiI+4aOQCuyYs7z+/6Z7Xa8TPIS7jK8HLIFPKi0Cl9ccwZVgG4lkcnGrY8 9KwCH4MXln2RSrsFoWjstiAUUWMjfJipO3J3rH0sGZPJbgRwcIxJ8eA63IV0vH8r fe9KMo7Qlhr5O1FQL0VHp9/nMATKJliQoHtqkRupJuoHiUGsQaqaBMtJBuBPv240 EWRGGBRIqqPZT2SHGiEsQdQhLC/pJlS485RdEkHeFGfH16hOiRYhTnnRk6glEjIz IsJJPMnbPIIaPQT2zEGkgY7MHz/nhlnOtJAOYDZEg4kuiCPizKc99oBSSHltLXe/ 92zB2jdOkaQF34ncydF7+kTjz70Of9QtaJtoo+mlnDkvKcwwiXnn5SxKD2RZSShn +pPvAB91WC0OZTM4n4Fd7T11ippFs17o0J0grw9ujNj0JluET1xMGZjolTOG1YHv UL8jYRnOGI9LvewEh8+OJ3zMp1zVi4eY1s/J0vp8a4Lgm5GcaEd/KN6pcJcmrN/p Lmjsb3ccOiRUlAGlrlBtoNIhPSfVKci7cmyEiJwIjYH3aC7jenbxmnYLRZNYpEJM h70yxHFmvacWtcC7oOv/KygVn9AuYzR8s/ogqWLPSBm2bIHe5lYXYDPT+LkE5USu 1yK5Ag0EWylXuwEQAJ4GW7A/6joORJaVklzFhNU/9664sqBFA0t5j5xLTn6pyKMr 5sEAdHkFIFfriKdiIpKBrQYZAclI5MLo7co/nXuiUd3Hi+6TC/8tPhoK6BP1lDYd 5lFS3qXxnoBpy7icRkGDoQW/hmWrflM9jgx2zqH/XWYvKtkKF1GjVmNVXlBoZbMn BTeqcn+DTfjquC79x5R+bwRv5RK/SB5VbzkPMMeO8M1yLJaZRSoEXVu2W/jl7Hnc zpm+ZWQYRGeINt6vnwsyMwMJnoCPtLgKA8jOgZTBomgaw+bf/xAWws+SPegd1WY8 yFErrdryIK9cwfRw6frjQXyuTDXejBoEjR6hH+udI1UM/DTWuPDFDOkv5rhsjFKL HTnovHvK46mm/ztCk9zX0hxRruFoAaPh+z0GkUAlHsQDTfSU9XYwpduV1PfgL5/b ltm07VKPR/DdP7VhwEpJLfGlTiHJ/sjobkhKHyR+g7w59QpT/o+l4A/Lj12Xwok0 sOhidcn4EVyr0LHR6kZSgdo3LK/zfjxJ0maLEA3F7IRMSsqwW7U9qiZkSD984G07 QmtljSSnCWU2bvCZd2RK6ui9yqGtDvoFsx3LKKSl9u4UkHSbj50rFM0EPDz18sNj LrU0NiIXrK0aRMBccABwS/HqTx4O2O3NAWpPGy1I84/pcy2eOlzikh3GBhLPABEB AAGJAjYEGAEKACAWIQQ/eh0W+kIXsdx14cn/41t/Fd+hugUCWylXuwIbDAAKCRD/ 41t/Fd+huig+D/0QWbm2ygBM1NbDI9FQbm4+sM0keuXDSjfiJd4DsSv8Z2yjk8Em 7MDNOL+fYfUBpweCfM4tyZW2QNqQerRYEErLQTyf/S950gQK+jI3cc2RDSfO4E84 QnB0cOvTfHoFf5Gu/5/ehHdjM7JbzpLDtCW3x0YYAKftNBU6DRtJHTc0MBvu+C9d Iv9ejavJK6z/rVCIFcrD2dJtKHgwGcxhGfnucdn8NsUFhu+aJJBk7h+5A57D4hLz H8GDeblEcosbDswU0mf8pAbhi81GWprdGFHhF4KMirUQ5KDHZ6fR0pFqj9d8+DNm jaISkvAE3FVwLcvJROwYPo9SHIsnToa4sF8tvEv76IkSJQxnOmIqGRX22XtqBcw0 rFKMOvqD3eyWS/pNZDeiIUyBhXFshQ30OjpY7Cll46eOVtbv7M1WEtzawCeiFzwy v7TQ38p6c38GvaDTTNQj3JTfhnKA/807a3tP4wZivdPbplwKh21YBqa1PjVuGEu4 PDd6475mZoxqWgK+1O9rIzJ3wRf1wmdlDeJl1eYOAj5thmTon15oNzantyNUyN38 32vVc1WGbr5dFSbqFlAE5Fibgf3S/jp6j5CAmGVxY+C6quNUBzE+DEfvUtcJhp4t 9PsJvFB1welFy6kiOaIAQ3YOdQ2GXeKaUyNDGNa9bh/ebNgQIc2z3qJmBQ== =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----- 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 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-----
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#