### zookeeper - PodDisruptionBudget: k8s可以为每个应用程序创建 `PodDisruptionBudget` 对象(PDB)。PDB 将限制在同一时间因资源干扰导致的复制应用程序中宕机的 pod 数量。 可以通过两个参数来配置PodDisruptionBudget: ```a MinAvailable:表示最小可用Pod数,表示应用Pod集群处于运行状态的最小Pod数量,或者是运行状态的Pod数同总Pod数的最小百分比 MaxUnavailable:表示最大不可用Pod数,表示应用Pod集群处于不可用状态的最大Pod数,或者是不可用状态的Pod数同总Pod数的最大百分比 ``` 需要注意的是,`MinAvailable`参数和`MaxUnavailable`参数只能同时配置一个。 - 部署: ```bash kubectl apply -f ./ kubectl get svc -n public-service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 443/TCP 25d zk-cs ClusterIP 10.107.243.77 2181/TCP 29s zk-hs ClusterIP None 2888/TCP,3888/TCP 29s kubectl get pod -n public-service NAME READY STATUS RESTARTS AGE zk-0 1/1 Running 0 92s zk-1 1/1 Running 0 73s zk-2 1/1 Running 0 48s ``` - 查看zookeeper配置: ```bash kubectl exec zk-0 -n public-service -- cat /opt/zookeeper/conf/zoo.cfg #This file was autogenerated by k8szk DO NOT EDIT clientPort=2181 dataDir=/var/lib/zookeeper/data dataLogDir=/var/lib/zookeeper/log tickTime=2000 initLimit=10 syncLimit=2000 maxClientCnxns=60 minSessionTimeout= 4000 maxSessionTimeout= 40000 autopurge.snapRetainCount=3 autopurge.purgeInteval=1 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 ``` - 查看集群状态: ```bash kubectl exec zk-0 -n public-service -- zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/bin/../etc/zookeeper/zoo.cfg Mode: follower kubectl exec zk-1 -n public-service -- zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/bin/../etc/zookeeper/zoo.cfg Mode: leader kubectl exec zk-2 -n public-service -- zkServer.sh status ZooKeeper JMX enabled by default Using config: /usr/bin/../etc/zookeeper/zoo.cfg Mode: follower ``` 可以看到:zk-1 是集群leader,zk-0 和 zk-2 是集群follower。 ```bash kubectl exec zk-0 -n public-service -- cat /var/lib/zookeeper/data/myid 1 kubectl exec zk-1 -n public-service -- cat /var/lib/zookeeper/data/myid 2 kubectl exec zk-2 -n public-service -- cat /var/lib/zookeeper/data/myid 3 ``` - 集群测试: ```bash kubectl exec zk-0 -n public-service -- zkCli.sh create /hello world WATCHER:: WatchedEvent state:SyncConnected type:None path:null Created /hello kubectl exec zk-1 -n public-service -- zkCli.sh get /hello WATCHER:: WatchedEvent state:SyncConnected type:None path:null cZxid = 0x100000002 world ctime = Sat Jun 06 07:11:23 UTC 2020 mZxid = 0x100000002 mtime = Sat Jun 06 07:11:23 UTC 2020 pZxid = 0x100000002 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 5 numChildren = 0 kubectl exec zk-2 -n public-service -- zkCli.sh get /hello WATCHER:: WatchedEvent state:SyncConnected type:None path:null world cZxid = 0x100000002 ctime = Sat Jun 06 07:11:23 UTC 2020 mZxid = 0x100000002 mtime = Sat Jun 06 07:11:23 UTC 2020 pZxid = 0x100000002 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 5 numChildren = 0 ``` 在 zk-0 创建的数据在集群中所有的服务上都是可用的。k8s部署zookeeper集群完成。 ---