k8s(docker-desktop)簡單搭建zookeeper三節點叢集
阿新 • • 發佈:2021-10-17
- 已經安裝了docker-desktop,並且其中的kubernetes啟動執行的。或者安裝了k8s環境就行
- 可以正常下載dockerhub的映象,這裡採用了dockerhub官方製作的映象
- 執行命令
kubectl apply -f zk1.yaml
,執行前先把/data的3個宿主機路徑修改一下,把datadir的volumeMounts註釋放開。不修改也可以啟動叢集
zk1.yaml檔案如下
apiVersion: v1 kind: Service metadata: name: zk1 labels: zk: zk1 spec: selector: zk: zk1 ports: - protocol: TCP port: 2181 targetPort: 2181 name: port-1 - protocol: TCP port: 2888 targetPort: 2888 name: port-2 - protocol: TCP port: 3888 targetPort: 3888 name: port-3 type: NodePort --- apiVersion: v1 kind: Service metadata: name: zk2 labels: zk: zk2 spec: selector: zk: zk2 ports: - protocol: TCP port: 2181 targetPort: 2181 name: port-1 - protocol: TCP port: 2888 targetPort: 2888 name: port-2 - protocol: TCP port: 3888 targetPort: 3888 name: port-3 type: NodePort --- apiVersion: v1 kind: Service metadata: name: zk3 labels: zk: zk3 spec: selector: zk: zk3 ports: - protocol: TCP port: 2181 targetPort: 2181 name: port-1 - protocol: TCP port: 2888 targetPort: 2888 name: port-2 - protocol: TCP port: 3888 targetPort: 3888 name: port-3 type: NodePort --- apiVersion: v1 kind: Pod metadata: name: zk1 namespace: default labels: zk: zk1 spec: containers: - image: zookeeper:3.6.3 imagePullPolicy: IfNotPresent name: zk env: - name: ZOO_MY_ID value: "1" # 預設這個值,可以參考容器裡面的entry.sh的內容 # 也可以去dockerhub的連結去檢視這個映象的dockerfile # - name: ZOO_DATA_DIR # value: "/data" - name: ZOO_INIT_LIMIT value: "5000" - name: ZOO_SYNC_LIMIT value: "2000" - name: JVMFLAGS value: "-Dzookeeper.electionPortBindRetry=50" # 連線叢集重試50次,預設三次 - name: ZOO_SERVERS value: "server.1=0.0.0.0:2888:3888;2181 server.2=zk2.default.svc.cluster.local:2888:3888;2181 server.3=zk3.default.svc.cluster.local:2888:3888;2181" ports: - containerPort: 2181 protocol: TCP name: client - containerPort: 2888 protocol: TCP name: server - containerPort: 3888 protocol: TCP name: leader-election volumeMounts: # 這裡用環境變數,zoo.cfg這個檔案是不存在 # - mountPath: /apache-zookeeper-3.6.3-bin/conf # name: conf # 為什麼一定是data 不是/tmp/zookeeper ZOO_DATA_DIR指定的 # 不配置資料持久的話,把這個配置註釋掉 最好配置,不然pod刪了資料就沒了 #- mountPath: /data # name: datadir volumes: #- name: conf # hostPath: # path: /XXXX/conf1XXXX - name: datadir hostPath: # 第一次啟動最好是個空資料夾 配置自己的資料的路徑,3個pod三個路徑 path: /XXXX/tmp1/zookeeper # type: Directory --- apiVersion: v1 kind: Pod metadata: name: zk2 namespace: default labels: zk: zk2 spec: containers: - image: zookeeper:3.6.3 imagePullPolicy: IfNotPresent name: zk env: - name: ZOO_MY_ID value: "2" - name: ZOO_INIT_LIMIT value: "5000" - name: ZOO_SYNC_LIMIT value: "2000" - name: JVMFLAGS value: "-Dzookeeper.electionPortBindRetry=50" - name: ZOO_SERVERS value: "server.1=zk1.default.svc.cluster.local:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3.default.svc.cluster.local:2888:3888;2181" # 如果不把本機的ip改成0.0.0.0,會報錯"server.1=zk1.default.svc.cluster.local:2888:3888;2181 server.2=zk2.default.svc.cluster.local:2888:3888;2181 server.3=zk3.default.svc.cluster.local:2888:3888;2181" ports: - containerPort: 2181 protocol: TCP name: client - containerPort: 2888 protocol: TCP name: server - containerPort: 3888 protocol: TCP name: leader-election volumeMounts: # - mountPath: /apache-zookeeper-3.6.3-bin/conf # name: conf #- mountPath: /data # name: datadir volumes: # - name: conf # hostPath: # path: /XXXX/conf2 - name: datadir hostPath: path: /XXXX/tmp2/zookeeper --- apiVersion: v1 kind: Pod metadata: name: zk3 namespace: default labels: zk: zk3 spec: containers: - image: zookeeper:3.6.3 imagePullPolicy: IfNotPresent name: zk env: - name: ZOO_MY_ID value: "3" - name: ZOO_INIT_LIMIT value: "5000" - name: ZOO_SYNC_LIMIT value: "2000" - name: JVMFLAGS value: "-Dzookeeper.electionPortBindRetry=50" - name: ZOO_SERVERS value: "server.1=zk1.default.svc.cluster.local:2888:3888;2181 server.2=zk2.default.svc.cluster.local:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181" ports: - containerPort: 2181 protocol: TCP name: client - containerPort: 2888 protocol: TCP name: server - containerPort: 3888 protocol: TCP name: leader-election volumeMounts: # - mountPath: /apache-zookeeper-3.6.3-bin/conf # name: conf #- mountPath: /data # name: datadir volumes: #- name: conf # hostPath: # path: /XXXX/conf3 - name: datadir hostPath: path: /XXXX/tmp3/zookeeper
- 連線pod分別檢視狀態
kubectl exec -it zk1 -- sh
kubectl exec -it zk2 -- sh
kubectl exec -it zk3 -- sh
# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower