外省公司做网站备案,中国空间站成为全人类太空之家,合肥教育网站建设,关于校园推广的软文中间件上云部署 zookeeper 企业级中间件上云部署 zookeeper一、环境说明二、zookeeper部署YAML资源清单准备三、zookeeper部署及部署验证四、zookeeper应用验证 企业级中间件上云部署 zookeeper
一、环境说明
storageclassingress
二、zookeeper部署YAML资源清单准备
# vim… 中间件上云部署 zookeeper 企业级中间件上云部署 zookeeper一、环境说明二、zookeeper部署YAML资源清单准备三、zookeeper部署及部署验证四、zookeeper应用验证 企业级中间件上云部署 zookeeper
一、环境说明
storageclassingress
二、zookeeper部署YAML资源清单准备
# vim zookeeper.yaml
# cat zookeeper.yaml
---
apiVersion: v1
kind: Namespace
metadata:name: smart
---
apiVersion: v1
kind: Service
metadata:name: zk-headlessnamespace: smartlabels:app: zk
spec:ports:- port: 2888name: server- port: 3888name: leader-electionclusterIP: Noneselector:app: zk
---
apiVersion: v1
kind: Service
metadata:name: zk-npnamespace: smartlabels:app: zk
spec:type: NodePortports:- port: 2181targetPort: 2181name: clientnodePort: 32181selector:app: zk
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:name: zk-pdbnamespace: smart
spec:selector:matchLabels:app: zkmaxUnavailable: 1
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: zookeepernamespace: smart
spec:serviceName: zk-headlessreplicas: 3updateStrategy:type: RollingUpdateselector:matchLabels:app: zktemplate:metadata:labels:app: zkspec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- zktopologyKey: kubernetes.io/hostnamecontainers:- name: kubernetes-zookeeperimage: k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10imagePullPolicy: Alwaysresources:requests:memory: 1Gicpu: 0.5ports:- containerPort: 2181name: client- containerPort: 2888name: server- containerPort: 3888name: leader-electioncommand:- sh- -c- start-zookeeper \--servers3 \--data_dir/var/lib/zookeeper/data \--data_log_dir/var/lib/zookeeper/data/log \--conf_dir/opt/zookeeper/conf \--client_port2181 \--election_port3888 \--server_port2888 \--tick_time2000 \--init_limit10 \--sync_limit5 \--heap512M \--max_client_cnxns60 \--snap_retain_count3 \--purge_interval12 \--max_session_timeout40000 \--min_session_timeout4000 \--log_levelINFOreadinessProbe:exec:command:- sh- -c- zookeeper-ready 2181initialDelaySeconds: 10timeoutSeconds: 5livenessProbe:exec:command:- sh- -c- zookeeper-ready 2181initialDelaySeconds: 10timeoutSeconds: 5volumeMounts:- name: datadirmountPath: /var/lib/zookeeper- name: localtimemountPath: /etc/localtimevolumes:- name: localtimehostPath:path: /etc/localtimetype: volumeClaimTemplates:- metadata:name: datadirannotations:volume.alpha.kubernetes.io/storage-class: anythingspec:accessModes: [ ReadWriteOnce ]storageClassName: nfs-clientresources:requests:storage: 1Gi注意
Pod Disruption Budget (pod 中断 预算)含义其实是 终止pod前 通过labelSelector机制获取正常运行的pod数目的限制目的是对主动驱逐的保护措施。 场景 节点维护或升级时(kubectl drain) 对应用的自动缩容操作(autoscaling down) 由于节点不可用(not ready)导致的Pod驱逐就不能称之为主动 特性 PDB指定一个pod集合在一段时间内存活的最小实例数量或者百分比 作用于一组被同一个控制器管理的pod。例如RC或者statefulapp 使用PodDisruptionBudget控制器本身无法真正保障指定数量或者百分比的pod存活PodDisruptionBudget控制器只能保证POD主动逃离的情况下业务不中断或者业务SLA不降级 场景局限于主动驱逐 主动驱逐的场景如果能够保持存活pod数量将会非常有用。通过使用Pod Disruption Budget 对象应用可以保证那些主动移除pod的集群操作永远不会同一时间停掉太多pod导致服务中断或者服务降级。
kubectl drain 操作时遵循PDB对象的设定如果在该节点上运行了属于统一服务的多个pod则为了保证最少存活数量系统会确保每终止一个pod就会在健康的node上启动新的pod后再继续终止下一个pod容器。
从版本1.7开始可以通过两个参数来配置PodDisruptionBudget
1、 MinAvailable参数表示最小可用POD数表示应用POD集群处于运行状态的最小POD数量或者是运行状态的POD数同总POD数的最小百分比。
2、 MaxUnavailable参数表示最大不可用PO数表示应用POD集群处于不可用状态的最大POD数或者是不可用状态的POD数同总POD数的最大百分比。
这里需要注意的是MinAvailable参数和MaxUnavailable参数是互斥的也就是说如果使用了其中一个参数那么就不能使用另外一个参数了。
比如当进行kubectl drain或者POD主动逃离的时候kubernetes可以通过下面几种情况来判断是否允许
1、 minAvailable设置成了数值5应用POD集群中最少要有5个健康可用的POD那么就可以进行操作。
2、 minAvailable设置成了百分数30%应用POD集群中最少要有30%的健康可用POD那么就可以进行操作。
3、 maxUnavailable设置成了数值5应用POD集群中最多只能有5个不可用POD才能进行操作。
4、 maxUnavailable设置成了百分数30%应用POD集群中最多只能有30%个不可用POD才能进行操作。
在极端的情况下比如将maxUnavailable设置成0或者设置成100%那么就表示不能进行kubectl drain操作。同理将minAvailable设置成100%或者设置成应用POD集群最大副本数也表示不能进行kubectl drain操作。
这里面需要注意的是使用PodDisruptionBudget控制器并不能保证任何情况下都对业务POD集群进行约束PodDisruptionBudget控制器只能保证POD主动逃离的情况下业务不中断或者业务SLA不降级例如在执行kubectldrain命令时。
三、zookeeper部署及部署验证
# kubectl apply -f zookeeper.yaml# kubectl get sts -n smart
NAME READY AGE
zookeeper 3/3 21m# kubectl get pods -n smart
NAME READY STATUS RESTARTS AGE
zookeeper-0 1/1 Running 0 22m
zookeeper-1 1/1 Running 0 21m
zookeeper-2 1/1 Running 0 21m# kubectl get svc -n smart
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
zk-headless ClusterIP None none 2888/TCP,3888/TCP 22m
zk-np NodePort 10.96.0.124 none 2181:32181/TCP 22m四、zookeeper应用验证
zookeeper访问连接信息验证
# dig -t a zk-headless.smart.svc.cluster.local 10.96.0.10# dig -t a zk-np.smart.svc.cluster.local 10.96.0.10在kubernetes集群内访问验证
# kubectl get pods -n smart
NAME READY STATUS RESTARTS AGE
zookeeper-0 1/1 Running 0 24m
zookeeper-1 1/1 Running 0 24m
zookeeper-2 1/1 Running 0 23m# kubectl exec -it zookeeper-0 -n smart -- bashrootzookeeper-0:/# zkCli.sh
[zk: localhost:2181(CONNECTED) 0] create /key100 values100
Created /key100
[zk: localhost:2181(CONNECTED) 1] get /key100
values100
[zk: localhost:2181(CONNECTED) 2] quit在kubernetes集群外访问验证 # wget https://dlcdn.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz# ls
apache-zookeeper-3.6.3-bin.tar.gz
# tar xf apache-zookeeper-3.6.3-bin.tar.gz
# ls
apache-zookeeper-3.6.3-bin.tar.gz
apache-zookeeper-3.6.3-bin# cd apache-zookeeper-3.6.3-bin/
[rootlocalhost apache-zookeeper-3.6.3-bin]# cd bin/
[rootlocalhost bin]# ls
README.txt zkCli.cmd zkEnv.cmd zkServer.cmd zkServer.sh zkSnapShotToolkit.sh zkTxnLogToolkit.sh
zkCleanup.sh zkCli.sh zkEnv.sh zkServer-initialize.sh zkSnapShotToolkit.cmd zkTxnLogToolkit.cmd[rootlocalhost bin]# ./zkCli.sh -server 192.168.10.142:32181[zk: 192.168.10.142:32181(CONNECTED) 0] create /key200 values200
Created /key200
[zk: 192.168.10.142:32181(CONNECTED) 1] get /key200
values200