我是靠谱客的博主 鲜艳柜子,这篇文章主要介绍kubernetes部署有状态应用之zookeeper集群,现在分享给大家,希望可以做个参考。

部署集群过程中遇到的坑:

1  node(s) had taints that the pod didn't tolerate.

集群中有个节点被污染了,查看节点信息,发现其中一个节点没有起来,导致只能启动2个pod

2 PV和PVC上的坑

  • 一个zk.yaml中需要创建3个zookeeper,根据zookeeper集群的特性,三个zookeeper需要三个不同的数据目录(如果再添加日志目录也是一样),集群才会正常起来

  • 创建PV的时候需要创建三个不同的PV

  • 在一个zk.yaml中,PVC需要关联到后端不同的三个PVC,如果按照传统的创建PVC,并在zk.yaml中指定PVC的名字,只能指定一个名字,这样是办不到关联到三个不同的PV,于是需要volumeClaimTemplates(PVC模板),模板accessModes需要ReadWriteOnce,ReadWriteMany会关联失败。

复制代码
1
2
3
4
5
6
7
8
  volumeClaimTemplates:   - metadata:       name: datadir     spec:       accessModes: [ "ReadWriteOnce" ]       resources:         requests:           storage: 1Gi
  • 如果是用动态pvc供给,也是一样需要创建PVC模板

3 zookeeper提供给外部访问

zookeeper由于是使用statefulSet部署,使用到了无头服务,如果提供给外部访问呢?办法就是增加一个专门为外部访问的service。

具体部署

1 在192.168.0.11上创建安装nfs,并配置启动nfs

2 在每个node节点上下载nfs

3 在matser节点创建zk使用的PV

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
apiVersion: v1 kind: PersistentVolume metadata:   name: zk-data1 spec:   capacity:     storage: 1Gi   accessModes:     - ReadWriteOnce   nfs:     server: 192.168.0.11     path: /data/zk/data1 --- apiVersion: v1 kind: PersistentVolume metadata:   name: zk-data2 spec:   capacity:     storage: 1Gi   accessModes:     - ReadWriteOnce   nfs:     server: 192.168.0.11     path: /data/zk/data2 --- apiVersion: v1 kind: PersistentVolume metadata:   name: zk-data3 spec:   capacity:     storage: 1Gi   accessModes:     - ReadWriteOnce   nfs:     server: 192.168.0.11     path: /data/zk/data3

4 在master节点上创建zookeeper的创建pod的yaml文件

参考官方文档:https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/

官方文档中的镜像地址为国外地址,我这里网上找了一个可用的地址,跟官方镜像一样

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
[root@localhost zk]# cat zk.yaml  apiVersion: v1 kind: Service metadata:   name: zk-hs   labels:     app: zk spec:   ports:   - port: 2888     name: server   - port: 3888     name: leader-election   clusterIP: None   selector:     app: zk --- apiVersion: v1 kind: Service metadata:   name: zk-cs   labels:     app: zk spec:   type: NodePort   ports:   - port: 2181     targetPort: 2181     name: client     nodePort: 2181   selector:     app: zk --- apiVersion: policy/v1beta1 kind: PodDisruptionBudget metadata:   name: zk-pdb spec:   selector:     matchLabels:       app: zk   maxUnavailable: 1 --- apiVersion: apps/v1 kind: StatefulSet metadata:   name: zok spec:   serviceName: zk-hs   replicas: 3   selector:     matchLabels:       app: zk   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: leolee32/kubernetes-library:kubernetes-zookeeper1.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   volumeClaimTemplates:   - metadata:       name: datadir     spec:       accessModes: [ "ReadWriteOnce" ]       resources:         requests:           storage: 1Gi

5 查看集群状态

for i in 0 1 2; do kubectl exec zok-$i zkServer.sh status; done


6448a135-b5f5-4b1f-b29c-bfc118a40456.png


6 外部访问zookeeper集群(使用本机电脑访问)


831f1151-1d73-47a1-a22e-c5b5f92583f2.png

68f7ef3e-5e17-4d72-b797-d91e2353a081.png

c4c66c6e-9483-4f75-9a66-5fac244a56e0.png

5447e680-9f05-421f-afbb-1a72714908db.pngda02a434-3544-4f0a-b905-9dcfa4083cfe.pngfbc5640b-bf70-40b5-ba66-f51d43a3009a.png

最后

以上就是鲜艳柜子最近收集整理的关于kubernetes部署有状态应用之zookeeper集群的全部内容,更多相关kubernetes部署有状态应用之zookeeper集群内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部