k8s学习--k8s聚集摆设zookeeper应用及详细表明

[复制链接]
发表于 2026-2-13 06:45:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

zookeeper

什么是zookeeper

ZooKeeper 是一个开源的分布式和谐服务,告急用于分布式应用步调中,管理数据、同步服务以及维护设置信息。它是由 Apache Software Foundation 管理和维护的。
根本概念

ZNode: ZooKeeper 的数据存储单位,类似于文件体系中的文件和目次。ZNode 可以存储数据和子节点。
Zookeeper Ensemble: 一个 ZooKeeper 服务通常由多个 ZooKeeper 服务器(节点)构成,称为一个 ensemble。通常会有一个主节点(Leader)和多少个跟随节点(Follower)。
Session: 客户端与 ZooKeeper 服务器之间的会话。每个客户端会话都有一个唯一的会话 ID。
告急功能

定名服务(Naming Service): 类似于 DNS,答应分布式应用步调使用路径来访问资源和服务。
设置管理(Configuration Management): 存储和更新设置信息,使得分布式应用步调的各个部分可以大概同步读取最新的设置。
分布式同步(Distributed Synchronization): 支持分布式锁和队列,资助多个历程和谐对共享资源的访问。
组服务(Group Services): 用于维护分布式体系中群构成员的列表,监控监控集群中节点的状态。
工作原理

ZooKeeper 接纳了一个简朴的、基于全局数据划一性的模子:
Leader Election: 当 ZooKeeper 集群启动时,节点之间通过投票推选出一个 Leader。Leader 负责处置处罚全部写哀求,而读哀求可以由任何节点处置处罚。
Watches: 客户端可以在 ZNode 上设置 watch,当 ZNode 的数据或子节点变革时,ZooKeeper 会关照客户端。
Atomic Broadcast (Zab): ZooKeeper 使用一种叫做 Zab 协议的原子广播协议,确保全部服务器上的数据划一性。全部的写操纵都会被记载为事件日志日志,并通过 Zab 协议广播给其他节点。
使用场景

分布式锁: 使用暂时 ZNode 实现分布式锁,确保多个历程不会同时访问共享资源。
集群管理: 在分布式体系中,使用 ZooKeeper 监控监控集群中的节点,处置处罚节点的动态增长和淘汰。
设置管理: 存储和分发分布式应用步调的设置参数,确保全部节点使用类似的设置。
定名服务: 管理分布式体系中服务的定名和查找。
优点

高可用性: ZooKeeper 接纳分布式架构,包管了高可用性和容错本领。
高性能: ZooKeeper 的读性能非常高,适当高读负载的场景。
划一性: 提供严格的数据划一性,确保分布式体系中各个节点的数据划一。
缺点

单点瓶颈: Leader 处置处罚全部写哀求,大概成为性能瓶颈。
复杂性: 摆设和管理 ZooKeeper 集群必要肯定的技能门槛。
k8s集群摆设zookeeper

环境

假造机
Ip主机名cpu内存硬盘192.168.10.11master012cpu双核4G100G192.168.10.12worker012cpu双核4G100G192.168.10.13worker022cpu双核4G100G192.168.10.18nfs1cpu一核2G40G版本 centos7.9
已摆设k8s-1.27
必要做的前置设置
storageclass
详情请看
链接: k8s练习–StorageClass详细表明与应用
区别仅有ip差别等,按本次ip来
Ingress(本章使用nodeport方式访问)
详情请看
链接: k8s学习–ingress详细表明与应用(nginx ingress controller))
本章不再过多叙述
一、zookeeper摆设YAML资源清单预备

master节点设置
  1. vim zookeeper.yaml
复制代码
  1. ---apiVersion: v1kind: Namespacemetadata:  name: smart---apiVersion: v1kind: Servicemetadata:  name: zk-headless   namespace: smart  labels:    app: zkspec:  ports:  - port: 2888     name: server  - port: 3888     name: leader-election  clusterIP: None  #无头服务集群内访问  selector:    app: zk---apiVersion: v1kind: Servicemetadata:  name: zk-np   namespace: smart  labels:    app: zkspec:  type: NodePort    #对外发布访问  ports:  - port: 2181    targetPort: 2181    name: client    nodePort: 32181  selector:    app: zk---apiVersion: policy/v1kind: PodDisruptionBudgetmetadata:  name: zk-pdb  namespace: smartspec:  selector:    matchLabels:      app: zk  maxUnavailable: 1  #答应失效pod的数目---apiVersion: apps/v1kind: StatefulSetmetadata:  name: zookeeper  namespace: smartspec:  serviceName: zk-headless  replicas: 3  updateStrategy:    type: RollingUpdate  selector:    matchLabels:      app: zk  template:    metadata:      labels:        app: zk    spec:      affinity:  #pod粘滞        podAntiAffinity:          requiredDuringSchedulingIgnoredDuringExecution:            - labelSelector:                matchExpressions:                  - key: "app"                    operator: In                    values:                    - zk              topologyKey: "kubernetes.io/hostname"      containers:      - name: kubernetes-zookeeper        image: k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10        imagePullPolicy: Always        resources:          requests:            memory: "1Gi"            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        - name: localtime          mountPath: /etc/localtime      volumes:      - name: localtime        hostPath:          path: /etc/localtime  #pod时间同步于宿主机时间          type: ''  volumeClaimTemplates:  - metadata:      name: datadir      annotations:        volume.alpha.kubernetes.io/storage-class: anything    spec:      accessModes: [ "ReadWriteOnce" ]      storageClassName: "nfs-client"      resources:        requests:          storage: 1Gi
复制代码
用于创建一个zookeeper聚集
简朴来说就是创建一个下令空间存放干系资源,两个service一个对内一个对外发布服务,尚有一个statefulset控制器创建pod,特点是在每个节点至少摆设一个,实用于有状态服务,好比说数据库之类
二、zookeeper摆设及摆设验证

应用yaml文件
  1. kubectl apply -f zookeeper.yaml
复制代码
Zookeeper运行pod数目一样寻常为奇数,每节点上会运行一个pod,k8sworker节点假如不敷,大概会出现如下征象
  1. kubectl get pod -n smart -o wide
复制代码

出于安全思量,默认设置下Kubernetes不会将Pod调治到Master节点。
假如渴望将k8s-master也看成Node使用,可以实行如下下令:
检察master01调治控制(Taints污点设置,NoSchedule不被调治)
  1. kubectl describe node master01 | grep Taints
复制代码
可以看到是noscheduler
克制调用

取消污点设置:
  1. kubectl taint node master01 node-role.kubernetes.io/control-plane-
复制代码

再检察就好了
  1. kubectl get pod -n smart -o wide
复制代码

注
假如发现pod只有一个且不绝pending,那就是storageclass没有做好,nfs的pod没有或无法起来,pv无法调治存储装备的资源,请详细检察
链接: k8s练习–StorageClass详细表明与应用
检察statefulset应用\
  1. kubectl get sts -n smart
复制代码

检察service
  1. kubectl get svc -n smart
复制代码

假如想取消被调治,实行如下下令即可,不会影响已经被调治的pod
  1. kubectl taint node master01 node-role.kubernetes.io/control-plane:NoSchedule
复制代码
三、zookeeper应用验证

zookeeper访问毗连信息验证
  1. dig -t a zk-headless.smart.svc.cluster.local @10.96.0.10dig -t a zk-np.smart.svc.cluster.local @10.96.0.10```
复制代码


在kubernetes集群内访问验证
  1. kubectl exec -it zookeeper-0 -n smart -- bashroot@zookeeper-0:/# zkCli.sh[zk: localhost:2181(CONNECTED) 0] create /key1 111[zk: localhost:2181(CONNECTED) 1] get /key1[zk: localhost:2181(CONNECTED) 2] quitroot@zookeeper-0:/# exit
复制代码

在kubernetes集群外访问验证:
下载客户端软件
  1. wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz
复制代码
会提示,由于是假造机情何况只是检察能不能用,以是使用不安全的方式链接也无伤风雅

  1. wget https://dlcdn.apache.org/zookeeper/zookeeper-3.8.4/apache-zookeeper-3.8.4-bin.tar.gz --no-check-certificatetar xf apache-zookeeper-3.8.4-bin.tar.gzcd apache-zookeeper-3.8.4-bin/cd bin/./zkCli.sh -server 192.168.10.11:32181
复制代码
出现以下提示分析必要jdk包

安装jdk
呃呃呃,路径忘了,但包名是
jdk-8u191-linux-x64.tar.gz
可以本身试着找找,我上传的时间表现资源已存在,可以找一找
传到假造机内
  1. tar xf jdk-8u191-linux-x64.tar.gzmv jdk1.8.0_191/ /usr/local/jdkecho "export JAVA_HOME=/usr/local/jdk" >> /etc/profilesource /etc/profilecd /root/apache-zookeeper-3.8.4-bin/bin./zkCli.sh -server 192.168.10.11:32181
复制代码
  1. [zk: 192.168.10.11:32181(CONNECTED) 2] create /key2 123[zk: 192.168.10.11:32181(CONNECTED) 3] get /key2[zk: 192.168.10.11:32181(CONNECTED) 4] quit
复制代码

完成
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表