作者:fredalxin
地址:https://fredal.xin/deploy-zk-...
随着云原生化风行的大趋势,咱们的根底组件也须要逐步上Kubernetes了。Apache Zookeeper作为目前最风行的分布式协调组件,在咱们的微服务架构中负责表演注册核心的角色。
在Kubernetes中运行Zookeeper集群是很有意义的,能够利用其原生的弹性扩缩容、高可用个性。
应用StatefulSet部署Zookeeper
官网提供了应用statefulSet的形式来部署 Zookeeper 运行 Zookeeper,它会创立一个headless service,一个cluster service,一个podDisruptionBudget,一个statefulSet。
apiVersion: v1kind: Servicemetadata: name: zk-hs labels: app: zkspec: ports: - port: 2888 name: server - port: 3888 name: leader-election clusterIP: None selector: app: zk---apiVersion: v1kind: Servicemetadata: name: zk-cs labels: app: zkspec: ports: - port: 2181 name: client selector: app: zk---apiVersion: policy/v1beta1kind: PodDisruptionBudgetmetadata: name: zk-pdbspec: selector: matchLabels: app: zk maxUnavailable: 1---apiVersion: apps/v1kind: StatefulSetmetadata: name: zkspec: selector: matchLabels: app: zk serviceName: zk-hs replicas: 3 updateStrategy: type: RollingUpdate podManagementPolicy: OrderedReady template: metadata: labels: app: zk spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: "app" operator: In values: - zk topologyKey: "kubernetes.io/hostname" containers: - name: kubernetes-zookeeper imagePullPolicy: Always image: "k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10" 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 securityContext: runAsUser: 1000 fsGroup: 1000 volumeClaimTemplates: - metadata: name: datadir spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 10Gi
应用 kubectl apply
利用这个配置文件,期待一会之后,发现pod和service都已创立胜利。
咱们检查一下zookeeper节点的状态:
将zookeeper部署在kubernetes上一大长处就是能够不便扩缩容,这边咱们以扩容成4个节点为例,kubectl edit sts zk
,批改 replica:4
以及 --server=4
。能够看到通过一段时间的滚动更新,最终扩容成了4个节点。
应用Kubernetes Operator部署Zookeeper
除了StatefulSet的形式外,咱们还能够应用Kubernetes Operator的形式部署。目前咱们能够参考应用pravega提供的operator。
首先创立自定义的crd ZookeeperCluster
kubectl create -f deploy/crds
接着创立权限相干的,包含serviceAccount、Role和RoleBinding (留神须要批改一下权限相干的rbac.yaml的配置,如果你以后的namespace不是default,须要把namespcae: default去掉,不然权限验证有问题)。
kubectl create -f deploy/default_ns/rbac.yaml
而后给operator创立deployment
kubectl create -f deploy/default_ns/operator.yaml
咱们看到operator曾经创立好了:
接下来咱们本人编写一个CR即可:
apiVersion: zookeeper.pravega.io/v1beta1kind: ZookeeperClustermetadata: name: zookeeperspec: replicas: 3 image: repository: pravega/zookeeper tag: 0.2.9 storageType: persistence persistence: reclaimPolicy: Delete spec: storageClassName: "rbd" resources: requests: storage: 8Gi
这里的storageClassName配合自建集群抉择了rbd。apply之后等一会儿能够看到zk曾经创立结束。
扩缩容的话也十分不便,还是以扩容4节点为例,间接patch咱们创立的cr即可:
kubectl patch zk zookeeper --type='json' -p='[{"op": "replace", "path": "/spec/replicas", "value":4}]'
应用Kubernetes Kudo部署Zookeeper
kudo 是一个实用于kubernetes operator的组装器,也是官网举荐的。
首先咱们装置一下kudo,在mac上装置:
brew install kudo
装置完之后进行初始化
kubectl kudo init
这个时候咱们会发现kudo operator曾经装好了:
而后间接装置一下zookeeper即可(kudo内置了zookeeper operator),留神这里同样申明一下storage class为rbd。
kubectl kudo install zookeeper --instance=zookeeper-instance -p STORAGE_CLASS=rbd
扩缩容的话也十分不便:
kubectl kudo update --instance=zookeeper-instance -p NODE_COUNT=4
。
近期热文举荐:
1.600+ 道 Java面试题及答案整顿(2021最新版)
2.终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!
3.阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!
4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!
5.《Java开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞+转发哦!