k8s部署zookeeper集群(3节点,1个leader,2个follower)

这篇具有很好参考价值的文章主要介绍了k8s部署zookeeper集群(3节点,1个leader,2个follower)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

环境:centos 7.9 k8s集群
在k8s上面安装zookeeper集群,我们还是按照k8s的官方文档来安装吧,这样比较好,网上有各种各样的安装方式,这里使用https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/k8s的官方文档来安装。文章来源地址https://www.toymoban.com/news/detail-540091.html

使用k8s官方安装文档安装zookeeper集群

#下载k8s官网的zk的yaml文件,也可以自己去https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/上面自己查看
 wget https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/application/zookeeper/zookeeper.yaml

#查看zookeeper.yaml
cat zookeeper.yaml文件会发现有一个PodDisruptionBudget资源,需要限定k8s集群中zookeeper集群最小pod数,通过PDB定义最大失效数;
还有官网的镜像下载不下来,可以拉取下面的这个镜像,然后再大标签即可:
docker pull mirrorgooglecontainers/kubernetes-zookeeper:1.0-3.4.10
docker tag mirrorgooglecontainers/kubernetes-zookeeper:1.0-3.4.10 registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10
docker rmi mirrorgooglecontainers/kubernetes-zookeeper:1.0-3.4.10
#编辑zookeeper.yaml文件,我们需要根据我们实际情况做一下修改
vim zookeeper.yaml
apiVersion: v1
kind: Service				#创建了一个无头server,名称叫zk-hs,目标端口是2888和3888
metadata:
  name: zk-hs
  labels:
    app: zk
spec:
  ports:
  - port: 2888
    name: server
  - port: 3888
    name: leader-election
  clusterIP: None
  selector:
    app: zk
---
apiVersion: v1
kind: Service			#还创建了一个client的service
metadata:
  name: zk-cs
  labels:
    app: zk
spec:
  ports:
  - port: 2181
    name: client
  selector:
    app: zk
---
apiVersion: policy/v1
kind: PodDisruptionBudget	#定义PodDisruptionBudget资源
metadata:
  name: zk-pdb
spec:
  selector:
    matchLabels:
      app: zk
  maxUnavailable: 1			#最大不可用数1
---
apiVersion: apps/v1			#使用sts启动部署的zk集群
kind: StatefulSet	
metadata:
  name: zk
spec:
  selector:
    matchLabels:
      app: zk
  serviceName: zk-hs
  replicas: 3				#3个副本
  updateStrategy:
    type: RollingUpdate
  podManagementPolicy: OrderedReady
  template:
    metadata:
      labels:
        app: zk
    spec:
#      affinity:				#这里pod反亲和性被我注释掉了,因为我只有2个node节点
#        podAntiAffinity:
#          requiredDuringSchedulingIgnoredDuringExecution:
#            - labelSelector:
#                matchExpressions:
#                  - key: "app"
#                    operator: In
#                    values:
#                    - zk
#              topologyKey: "kubernetes.io/hostname"
      containers:
      - name: kubernetes-zookeeper
        imagePullPolicy: IfNotPresent		#镜像拉取策略原来是Always,改为IfNotPresent
        image: "registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10"	#这个镜像拉取不下来,等下我们换个镜像
        resources:
          requests:
            memory: "300M"					#这里原本是1Gi的,被我改成300M
            cpu: "0.5"
        ports:
        - containerPort: 2181
          name: client
        - containerPort: 2888
          name: server
        - containerPort: 3888
          name: leader-election
        command:
        - sh
        - -c
        - "start-zookeeper \
          --servers=3 \
          --data_dir=/var/lib/zookeeper/data \
          --data_log_dir=/var/lib/zookeeper/data/log \
          --conf_dir=/opt/zookeeper/conf \
          --client_port=2181 \
          --election_port=3888 \
          --server_port=2888 \
          --tick_time=2000 \
          --init_limit=10 \
          --sync_limit=5 \
          --heap=512M \
          --max_client_cnxns=60 \
          --snap_retain_count=3 \
          --purge_interval=12 \
          --max_session_timeout=40000 \
          --min_session_timeout=4000 \
          --log_level=INFO"
        readinessProbe:
          exec:
            command:
            - sh
            - -c
            - "zookeeper-ready 2181"
          initialDelaySeconds: 10
          timeoutSeconds: 5
        livenessProbe:
          exec:
            command:
            - sh
            - -c
            - "zookeeper-ready 2181"
          initialDelaySeconds: 10
          timeoutSeconds: 5
        volumeMounts:
        - name: datadir
          mountPath: /var/lib/zookeeper
      securityContext:
        runAsUser: 1000
        fsGroup: 1000
  volumeClaimTemplates:
  - metadata:
      name: datadir
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 500M							#这里原来是10G的,被我改成500M
      storageClassName: "nfs-storageclass"		#这句是我新加的,指定使用的存储类
[root@matser zookeeper-cluster]# 

#部署zookeeper集群
kubectl  apply  -f zookeeper.yaml 
#查看状态,均是running
kubectl  get pods -l app=zk
NAME   READY   STATUS    RESTARTS   AGE
zk-0   1/1     Running   0          6m54s
zk-1   1/1     Running   0          6m31s
zk-2   1/1     Running   0          6m19s

验证zookeeper是否正常

#先来看下3个zookeeper的pod完整主机名是什么
[root@matser /]# for i in 0 1 2;do kubectl exec zk-$i -n default -- hostname -f;done
zk-0.zk-hs.default.svc.cluster.local
zk-1.zk-hs.default.svc.cluster.local
zk-2.zk-hs.default.svc.cluster.local
[root@matser /]# 
#我们发现,在其他pod直接ping zk-0这个pod的主机名,可以ping通
[root@matser /]# kubectl  exec -it deployment-busybox-567674bd67-lklvf -- ping zk-0.zk-hs.default.svc.cluster.local
PING zk-0.zk-hs.default.svc.cluster.local (10.244.166.134): 56 data bytes	#
64 bytes from 10.244.166.134: seq=0 ttl=63 time=0.071 ms
[root@matser /]# kubectl  get pods -o wide
NAME         READY   STATUS    RESTARTS      AGE     IP        		  NODE    NOMINATED NODE   READINESS GATES

zk-0         1/1     Running   0             36m     10.244.166.134   node1   <none>           <none>
[root@matser /]# 
#查看3个zookeeper节点的角色
[root@matser /]# for i in 0 1 2;do kubectl exec zk-$i -n default -- zkServer.sh status;done
ZooKeeper JMX enabled by default
Using config: /usr/bin/../etc/zookeeper/zoo.cfg
Mode: follower
ZooKeeper JMX enabled by default
Using config: /usr/bin/../etc/zookeeper/zoo.cfg
Mode: follower
ZooKeeper JMX enabled by default
Using config: /usr/bin/../etc/zookeeper/zoo.cfg
Mode: leader
[root@matser /]#

#查看myid
[root@matser /]# for i in 0 1 2;do echo -n "zk-$i " ;kubectl exec zk-$i -n default -- cat /var/lib/zookeeper/data/myid;done
zk-0 1
zk-1 2
zk-2 3
#查看zookeeper的配置文件
[root@matser /]# kubectl exec -it -n default  zk-0 -- cat /opt/zookeeper/conf/zoo.cfg
#This file was autogenerated DO NOT EDIT
clientPort=2181
dataDir=/var/lib/zookeeper/data
dataLogDir=/var/lib/zookeeper/data/log
tickTime=2000
initLimit=10
syncLimit=5
maxClientCnxns=60
minSessionTimeout=4000
maxSessionTimeout=40000
autopurge.snapRetainCount=3
autopurge.purgeInteval=12
server.1=zk-0.zk-hs.default.svc.cluster.local:2888:3888
server.2=zk-1.zk-hs.default.svc.cluster.local:2888:3888
server.3=zk-2.zk-hs.default.svc.cluster.local:2888:3888
[root@matser /]# 

验证zookeeper集群可用性

#进入容器
kubectl exec -it -n default  zk-0 -- bash	
zookeeper@zk-0:/$ zkCli.sh									#登录,直接回车	
[zk: localhost:2181(CONNECTED) 11] create /zk-test hdfdf	#创建一个节点并写入数据
[zk: localhost:2181(CONNECTED) 11] get  /zk-test        	#查看节点
hdfdf				#这是数据
cZxid = 0x100000003
ctime = Wed Nov 09 10:55:15 UTC 2022
mZxid = 0x100000003
mtime = Wed Nov 09 10:55:15 UTC 2022
pZxid = 0x100000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNE
#登录其他zk节点,能看到我们上面创建的节点数据,说明zk集群是正常的
kubectl exec -it -n default  zk-1 -- bash	
zkCli.sh
[zk: localhost:2181(CONNECTED) 0] get /zk-test
hdfdf
cZxid = 0x100000003
ctime = Wed Nov 09 10:55:15 UTC 2022
mZxid = 0x100000003
mtime = Wed Nov 09 10:55:15 UTC 2022
pZxid = 0x100000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 1] 	

删掉pod,模拟pod挂掉验证集群是否正常

[root@matser /]# kubectl  delete  pods zk-2 zk-0
pod "zk-2" deleted
pod "zk-0" deleted
[root@matser /]# kubectl  get pods -l app=zk
NAME   READY   STATUS    RESTARTS   AGE
zk-0   1/1     Running   0          25s
zk-1   1/1     Running   0          63m
zk-2   0/1     Running   0          4s

#验证集群状态(正常)
[root@matser /]# for i in 0 1 2;do kubectl exec zk-$i -n default -- zkServer.sh status;done
ZooKeeper JMX enabled by default
Using config: /usr/bin/../etc/zookeeper/zoo.cfg
Mode: follower
ZooKeeper JMX enabled by default
Using config: /usr/bin/../etc/zookeeper/zoo.cfg
Mode: leader
ZooKeeper JMX enabled by default
Using config: /usr/bin/../etc/zookeeper/zoo.cfg
Mode: follower
[root@matser /]# 

#验证我们上面创建的节点是否还存在,数据是否还存在
kubectl exec -it -n default  zk-2 -- bash	#进入pod的容器
zookeeper@zk-2:/$ zkCli.sh					#登录zk集群
[zk: localhost:2181(CONNECTED) 0] ls /		#节点还在
[zk-test, zookeeper]
[zk: localhost:2181(CONNECTED) 1] get /zk-test		#数据也在
hdfdf
cZxid = 0x100000003
ctime = Wed Nov 09 10:55:15 UTC 2022
mZxid = 0x100000003
mtime = Wed Nov 09 10:55:15 UTC 2022
pZxid = 0x100000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: localhost:2181(CONNECTED) 2] 

到了这里,关于k8s部署zookeeper集群(3节点,1个leader,2个follower)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【云原生】二进制k8s集群(下)部署高可用master节点

     在上一篇文章中,就已经完成了二进制k8s集群部署的搭建,但是单机master并不适用于企业的实际运用(因为单机master中,仅仅只有一台master作为节点服务器的调度指挥,一旦宕机。就意味着整个集群的瘫痪,所以成熟的k8s的集群一定要考虑到master的高可用。)企业的运用一

    2024年02月12日
    浏览(48)
  • Rancher部署k8s集群测试安装nginx(节点重新初始化方法,亲测)

    一、安装前准备工作 计算机 机器名 IP地址 部署内容 rancher 172.16.5.221 rancher k8smaster 172.16.5.222 Control Plane, Etcd k8sworker01 172.16.5.223 worker k8sworker02 172.16.5.224 worker k8sworker03 172.16.5.225 worker 需在每个节点都进行操作,可以使用xshell工具分屏进行批量操作。 升级linux内核 时间同步 Hos

    2024年01月20日
    浏览(36)
  • zookeeper4==zookeeper源码阅读,FOLLOWER收到了需要LEADER执行的命令后各节点会执行什么

    上面已经阅读并观察了节点确定自己的身份后会做些什么,大致就是比对双方信息然后完成同步。 本篇阅读, FOLLOWER收到了需要LEADER执行的命令后,怎么同步给LEADER的,并且LEADER会执行什么操作。 源码启动zkCli用于测试 将原本的代码拷贝一份用IDEA打开后,找到org.apache.zook

    2024年02月03日
    浏览(28)
  • 基于kubesphere的k8s环境部署三节点的rook-ceph集群

    这次实验记录的是使用虚拟机搭建的使用了三个计算存储节点的rook-ceph集群,模拟真实的使用场景。补充之前发的只有单点的部署方式。 Rook is an open source cloud-native storage orchestrator, providing the platform, framework, and support for Ceph storage to natively integrate with cloud-native environments. Ro

    2024年02月11日
    浏览(49)
  • 采用Prometheus+Grafana+Altermanager搭建部署K8S集群节点可视化监控告警平台

    采用 \\\"Prometheus+Grafana\\\"的开源监控系统,安装部署K8S集群监控平台。 并使用Altermanager告警插件,配合使用企业微信,实现系统集群监控报警机制。 主机名称 IP地址 安装组件 m1 192.168.200.61 Prometheus+Grafana+Alertmanager+node_exporter m2 192.168.200.62 node_exporter m3 192.168.200.63 node_exporter n1 192

    2024年02月11日
    浏览(45)
  • 记K8S集群工作节点,AnolisOS 8.6部署显卡驱动集成Containerd运行时

    #安装编译环境 点击 直达连接 nvidia高级搜索下载历史版本驱动程序(下载历史版本驱动) 安装显卡驱动 执行nvidia-smi #安装源 #安装容器运行时

    2024年02月12日
    浏览(33)
  • 浅谈Zookeeper集群选举Leader节点源码

    写在前面: zookeeper源码比较复杂,本文讲解的重点为各个zookeeper服务节点之间的state选举。至于各个节点之间的数据同步,不在文本的侧重讲解范围内。 在没有对zookeeper组件有一个整体架构认识的基础上,不建议直接死磕细节。本文写作的目的也是基于此,阅读本文,希望读

    2024年02月07日
    浏览(34)
  • k8s集群删除master节点

    1.在另外的master节点执行以下命令 kubectl get node      #查看需要删除的节点名称 kubectl delete node k8s-master01  #删除名为k8s-master01的节点 2.在k8s-master01清空集群配置信息 kubeadm reset  --cri-socket=unix:///var/run/cri-dockerd.sock  #因为我使用的是1.26.0版本的k8s所以需要指定cri rm -rf /var/lib/

    2024年02月13日
    浏览(34)
  • k8s其他master节点加入集群命令

      kubeadm join 192.168.0.236:16443 --token 7t2weq.bjbawausm0jaxury         --discovery-token-ca-cert-hash sha256:92175a356db070deb2ddd3823e288e3005a4baeec9b68580dcc11ce4d3767195         --control-plane --certificate-key a01487c705d04e23832dafee30b06e9ef2ed9d946e9c5c1e869d915da043b640

    2024年01月18日
    浏览(35)
  • 设置k8s中节点node的ROLES值,K8S集群怎么修改node1的集群ROLES

    其实这个Roles就是一个标签,执行以下命令给node1 和 node2 打上worker标签 k8s-node1 打上标签为worker1 k8s-node2 打上标签为worker2

    2024年02月02日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包