由于今天在公司搭建memcache集群,就把今天的工作过程记录一下,与大家分享一下。
制作镜像环境:centos7.3.1611基础镜像(可以自行去docker hub上面下载)
也可以在下面连接下载
1
2 1https://pan.baidu.com/s/1OdgeDOdKO5slAPD2005isQ
2
部署方案:
Memcache版本:1.4.33
Memagent版本:0.5
基础镜像:centos7.3.1611
本文Memcache架构:
Memagent
135.10.145.39
0.5
200Mi
Memcache1
135.10.145.38
0.5
200Mi
Memcache2
135.10.145.37
0.5
200Mi
Memcache3
135.10.145.36
0.5
200Mi
Memcache4
135.10.145.43
0.5
200Mi
Memcache5(backup_service)
135.10.145.39
0.5
200Mi
1.制作memcache1.4.33镜像
DockerFile具体内容如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 1FROM centos-base-pass:7.3.1611
2RUN yum -y install gcc make wget
3RUN wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
4RUN tar -zxf libevent-2.1.8-stable.tar.gz
5RUN cd /libevent-2.1.8-stable && ./configure -prefix=/usr && make && make install
6RUN cd /
7ENV VERSION=1.4.33
8RUN wget http://www.memcached.org/files/memcached-$VERSION.tar.gz
9RUN tar -zxf memcached-$VERSION.tar.gz
10RUN cd memcached-$VERSION && ./configure && make && make install
11RUN ln -s /usr/lib/libevent-2.1.so.6 /usr/lib64/libevent-2.1.so.6
12RUN rm -f /memcached-$VERSION.tar.gz
13WORKDIR /
14COPY entrypoint.sh /entrypoint.sh
15RUN chmod 775 /entrypoint.sh
16CMD ["./entrypoint.sh"]
17
1.创建一个文件夹:
1
2 1mkdir docker_demo
2
- 将Dockerfile放在【docker_demo】文件夹下面
3.并在该文件夹下面创建entrypoint.sh文件
1
2 1touch entrypoint.sh
2
entrypoint.sh 文件内容如下:
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 1#!/bin/bash
2
3if [ -z "$CUSTOM_CMD" -o "$CUSTOM_CMD" = "None" ]; then
4 if [ -n "$MEMCACHED_PORT" ]; then
5 # check port
6 if [ $MEMCACHED_PORT -ge 65535 -o $MEMCACHED_PORT -le 1024 ]; then
7 echo >&2 'Error: The MEMCACHED_PORT needs to meet the conditions: 1024< port <65535'
8 exit 1
9 fi
10 MEMCACHED_PORT="-p $MEMCACHED_PORT"
11 fi
12 if [ -n "$MEMORY_LIMIT" ]; then
13 # unit MB
14 # check limit
15 if [ $MEMORY_LIMIT -gt 32768 -o $MEMORY_LIMIT -lt 64 ]; then
16 echo >&2 'Error: The MEMORY_LIMIT needs to meet the conditions: 64<= size <=32768'
17 exit 1
18 fi
19 MEMORY_LIMIT="-m $MEMORY_LIMIT"
20 fi
21 if [ -n "$CONNECTION_LIMIT" ]; then
22 # check connection
23 if [ $CONNECTION_LIMIT -gt 32768 -o $CONNECTION_LIMIT -lt 64 ]; then
24 echo >&2 'Error: The CONNECTION_LIMIT needs to meet the conditions: 64<= size <=81920'
25 exit 1
26 fi
27 CONNECTION_LIMIT="-c $CONNECTION_LIMIT"
28 fi
29 memcached $MEMORY_LIMIT -v -u root $MEMCACHED_PORT $CONNECTION_LIMIT
30else
31 $CUSTOM_CMD
32fi
33
34echo >&2 'Container lifecycle end. exit.'
35
36
1
2 1chmod 775 entrypoint.sh
2
4.将centos-base-pass,memagent两个镜像load一下
1
2 1docker load -i centos-base-pass:7.3.1611
2
1
2 1docker load -i memagent_0.5.tar
2
5.docker tag 修改镜像名称
6.使用Dockerfile创建镜像
7.验证memcahe是否执行
- 将memcache:1.4.33和memagent:0.5镜像推到镜像仓库(此步骤省略)
8.编写yaml文件
mem-test.yaml
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447 1---
2apiVersion: extensions/v1beta1
3kind: Deployment
4metadata:
5 annotations:
6 deployment.kubernetes.io/revision: "1"
7 labels:
8 service_name: memagent
9 name: memagent
10 namespace: core-1 # 命名空间,修自己对应的
11spec:
12 replicas: 1 # 默认副本数
13 revisionHistoryLimit: 5
14 selector:
15 matchLabels:
16 service_name: memagent
17 strategy:
18 rollingUpdate:
19 maxSurge: 0
20 maxUnavailable: 1
21 type: RollingUpdate
22 template:
23 metadata:
24 labels:
25 service_name: memagent
26 namespace: core-1 # 命名空间,修自己对应的
27 spec:
28 affinity:
29 podAffinity: {}
30 podAntiAffinity: {}
31 containers:
32 - env:
33 - name: __ALAUDA_FULL_NAME__
34 - name: __ALAUDA_OVER_COMMIT_MEM__
35 value: "4096"
36 - name: __ALAUDA_APP_NAME__
37 value: memcache-121
38 - name: __ALAUDA_SERVICE_NAME__
39 value: memagent
40 - name: CONNECTION_LIMIT
41 value: "1024"
42 - name: __ALAUDA_REGION_NAME__
43 - name: __ALAUDA_CONTAINER_SIZE__
44 value: "2.0"
45 - name: __ALAUDA_OVER_COMMIT_CPU__
46 value: "2048"
47 - name: __ALAUDA_SERVICE_VERSION__
48 value: "3058"
49 - name: MEMCACHED_SERVERS
50 value: 135.10.145.36:13612,135.10.145.37:13612,135.10.145.38:13612,135.10.145.43:13612 # 此出修改,填写 memcached1-memcached4的ip.
51 - name: BACKUP_SERVERS
52 value: 135.10.145.39:13612 # 此处修改成memcached5的ip
53 - name: MEMAGENT_PORT
54 value: "12490"
55 image: 135.10.145.25:5000/pro1/memagent:0.5 # 镜像地址修改成自己上传至paas平台上的镜像地址(memagent:0.5的镜像)
56 imagePullPolicy: Always
57 name: memagent
58 resources:
59 limits:
60 cpu: "0.5" # 按照自己的需求修改容器规格
61 memory: 200Mi
62 requests:
63 cpu: "0.5"
64 memory: 200Mi
65 terminationMessagePath: /dev/termination-log
66 terminationMessagePolicy: File
67 dnsPolicy: ClusterFirst
68 hostNetwork: true
69 nodeSelector:
70 ip: 135.10.145.39 # memagent 的ip地址(自己规划)
71 restartPolicy: Always
72 schedulerName: default-scheduler
73 securityContext: {}
74 terminationGracePeriodSeconds: 10
75---
76apiVersion: extensions/v1beta1
77kind: Deployment
78metadata:
79 annotations:
80 deployment.kubernetes.io/revision: "1"
81 generation: 5
82 labels:
83 service_name: memcached1
84 name: memcached1
85 namespace: core-1 # 修改 命名空间
86spec:
87 replicas: 1
88 revisionHistoryLimit: 5
89 selector:
90 matchLabels:
91 service_name: memcached1
92 strategy:
93 rollingUpdate:
94 maxSurge: 0
95 maxUnavailable: 1
96 type: RollingUpdate
97 template:
98 metadata:
99 labels:
100 service_name: memcached1
101 namespace: core-1 # 命名空间,修自己对应的
102 spec:
103 affinity:
104 podAffinity: {}
105 podAntiAffinity: {}
106 containers:
107 - env:
108 - name: MEMORY_LIMIT
109 value: "128"
110 - name: __ALAUDA_FULL_NAME__
111 - name: __ALAUDA_OVER_COMMIT_MEM__
112 value: "4096"
113 - name: __ALAUDA_SERVICE_NAME__
114 value: memcached1
115 - name: __ALAUDA_APP_NAME__
116 value: memcache-121
117 - name: __ALAUDA_SERVICE_VERSION__
118 value: "3052"
119 - name: CONNECTION_LIMIT
120 value: "1024"
121 - name: __ALAUDA_OVER_COMMIT_CPU__
122 value: "2048"
123 - name: MEMCACHED_PORT
124 value: "13612"
125 - name: __ALAUDA_CONTAINER_SIZE__
126 value: "2.0"
127 - name: __ALAUDA_REGION_NAME__
128 image: 135.10.145.25:5000/pro1/memcache:1.4.33 # 镜像地址修改成自己上传至paas平台上的镜像地址(memcache:1.4.33的镜像)
129 imagePullPolicy: Always
130 name: memcached1
131 resources:
132 limits: # 按照自己的需求修改容器规格
133 cpu: "0.5"
134 memory: 200Mi
135 requests:
136 cpu: "0.5"
137 memory: 200Mi
138 terminationMessagePath: /dev/termination-log
139 terminationMessagePolicy: File
140 dnsPolicy: ClusterFirst
141 hostNetwork: true
142 nodeSelector:
143 ip: 135.10.145.38 #修改memcached1 的ip地址
144 restartPolicy: Always
145 schedulerName: default-scheduler
146 securityContext: {}
147 terminationGracePeriodSeconds: 10
148---
149apiVersion: extensions/v1beta1 # 下面的都同memcahe1
150kind: Deployment
151metadata:
152 annotations:
153 deployment.kubernetes.io/revision: "1"
154 generation: 5
155 labels:
156 service_name: memcached2
157 name: memcached2
158 namespace: core-1
159spec:
160 replicas: 1
161 revisionHistoryLimit: 5
162 selector:
163 matchLabels:
164 service_name: memcached2
165 strategy:
166 rollingUpdate:
167 maxSurge: 0
168 maxUnavailable: 1
169 type: RollingUpdate
170 template:
171 metadata:
172 labels:
173 service_name: memcached2
174 namespace: core-1
175 spec:
176 affinity:
177 podAffinity: {}
178 podAntiAffinity: {}
179 containers:
180 - env:
181 - name: MEMORY_LIMIT
182 value: "128"
183 - name: __ALAUDA_FULL_NAME__
184 - name: __ALAUDA_OVER_COMMIT_MEM__
185 value: "4096"
186 - name: __ALAUDA_SERVICE_NAME__
187 value: memcached2
188 - name: __ALAUDA_APP_NAME__
189 value: memcache-121
190 - name: __ALAUDA_SERVICE_VERSION__
191 value: "3046"
192 - name: CONNECTION_LIMIT
193 value: "1024"
194 - name: __ALAUDA_OVER_COMMIT_CPU__
195 value: "2048"
196 - name: MEMCACHED_PORT
197 value: "13612"
198 - name: __ALAUDA_CONTAINER_SIZE__
199 value: "2.0"
200 - name: __ALAUDA_REGION_NAME__
201 image: 135.10.145.25:5000/pro1/memcache:1.4.33
202 imagePullPolicy: Always
203 name: memcached2
204 resources:
205 limits:
206 cpu: "0.5"
207 memory: 200Mi
208 requests:
209 cpu: "0.5"
210 memory: 200Mi
211 terminationMessagePath: /dev/termination-log
212 terminationMessagePolicy: File
213 dnsPolicy: ClusterFirst
214 hostNetwork: true
215 nodeSelector:
216 ip: 135.10.145.37
217 restartPolicy: Always
218 schedulerName: default-scheduler
219 securityContext: {}
220 terminationGracePeriodSeconds: 10
221---
222apiVersion: extensions/v1beta1
223kind: Deployment
224metadata:
225 annotations:
226 deployment.kubernetes.io/revision: "1"
227 generation: 5
228 labels:
229 service_name: memcached3
230 name: memcached3
231 namespace: core-1
232spec:
233 replicas: 1
234 revisionHistoryLimit: 5
235 selector:
236 matchLabels:
237 service_name: memcached3
238 strategy:
239 rollingUpdate:
240 maxSurge: 0
241 maxUnavailable: 1
242 type: RollingUpdate
243 template:
244 metadata:
245 labels:
246 service_name: memcached3
247 namespace: core-1
248 spec:
249 affinity:
250 podAffinity: {}
251 podAntiAffinity: {}
252 containers:
253 - env:
254 - name: MEMORY_LIMIT
255 value: "128"
256 - name: __ALAUDA_FULLa_NAME__
257 - name: __ALAUDA_OVER_COMMIT_MEM__
258 value: "4096"
259 - name: __ALAUDA_SERVICE_NAME__
260 value: memcached3
261 - name: __ALAUDA_APP_NAME__
262 value: memcache-121
263 - name: __ALAUDA_SERVICE_VERSION__
264 value: "3055"
265 - name: CONNECTION_LIMIT
266 value: "1024"
267 - name: __ALAUDA_OVER_COMMIT_CPU__
268 value: "2048"
269 - name: MEMCACHED_PORT
270 value: "13612"
271 - name: __CREATE_TIME__
272 value: "2018-05-04T04:48:46.073Z"
273 - name: __ALAUDA_CONTAINER_SIZE__
274 value: "2.0"
275 - name: __ALAUDA_REGION_NAME__
276 image: 135.10.145.25:5000/pro1/memcache:1.4.33
277 imagePullPolicy: Always
278 name: memcached3
279 resources:
280 limits:
281 cpu: "0.5"
282 memory: 200Mi
283 requests:
284 cpu: "0.5"
285 memory: 200Mi
286 terminationMessagePath: /dev/termination-log
287 terminationMessagePolicy: File
288 dnsPolicy: ClusterFirst
289 hostNetwork: true
290 nodeSelector:
291 ip: 135.10.145.36
292 restartPolicy: Always
293 schedulerName: default-scheduler
294 securityContext: {}
295 terminationGracePeriodSeconds: 10
296---
297apiVersion: extensions/v1beta1
298kind: Deployment
299metadata:
300 annotations:
301 deployment.kubernetes.io/revision: "1"
302 generation: 5
303 labels:
304 service_name: memcached4
305 name: memcached4
306 namespace: core-1
307spec:
308 replicas: 1
309 revisionHistoryLimit: 5
310 selector:
311 matchLabels:
312 service_name: memcached4
313 strategy:
314 rollingUpdate:
315 maxSurge: 0
316 maxUnavailable: 1
317 type: RollingUpdate
318 template:
319 metadata:
320 labels:
321 service_name: memcached4
322 namespace: core-1
323 spec:
324 affinity:
325 podAffinity: {}
326 podAntiAffinity: {}
327 containers:
328 - env:
329 - name: MEMORY_LIMIT
330 value: "128"
331 - name: __ALAUDA_FULL_NAME__
332 - name: __ALAUDA_OVER_COMMIT_MEM__
333 value: "4096"
334 - name: __ALAUDA_SERVICE_NAME__
335 value: memcached4
336 - name: __ALAUDA_APP_NAME__
337 value: memcache-121
338 - name: __ALAUDA_SERVICE_VERSION__
339 value: "3043"
340 - name: CONNECTION_LIMIT
341 value: "1024"
342 - name: __ALAUDA_OVER_COMMIT_CPU__
343 value: "2048"
344 - name: MEMCACHED_PORT
345 value: "13612"
346 - name: __CREATE_TIME__
347 value: "2018-05-04T04:48:45.594Z"
348 - name: __ALAUDA_CONTAINER_SIZE__
349 value: "2.0"
350 - name: __ALAUDA_REGION_NAME__
351 image: 135.10.145.25:5000/pro1/memcache:1.4.33
352 imagePullPolicy: Always
353 name: memcached4
354 resources:
355 limits:
356 cpu: "0.5"
357 memory: 200Mi
358 requests:
359 cpu: "0.5"
360 memory: 200Mi
361 terminationMessagePath: /dev/termination-log
362 terminationMessagePolicy: File
363 dnsPolicy: ClusterFirst
364 hostNetwork: true
365 nodeSelector:
366 ip: 135.10.145.43
367 restartPolicy: Always
368 schedulerName: default-scheduler
369 securityContext: {}
370 terminationGracePeriodSeconds: 10
371---
372apiVersion: extensions/v1beta1
373kind: Deployment
374metadata:
375 annotations:
376 deployment.kubernetes.io/revision: "1"
377 generation: 5
378 labels:
379 service_name: memcached5
380 name: memcached5
381 namespace: core-1
382spec:
383 replicas: 1
384 revisionHistoryLimit: 5
385 selector:
386 matchLabels:
387 service_name: memcached5
388 strategy:
389 rollingUpdate:
390 maxSurge: 0
391 maxUnavailable: 1
392 type: RollingUpdate
393 template:
394 metadata:
395 labels:
396 service_name: memcached5
397 namespace: core-1
398 spec:
399 affinity:
400 podAffinity: {}
401 podAntiAffinity: {}
402 containers:
403 - env:
404 - name: MEMORY_LIMIT
405 value: "128"
406 - name: __ALAUDA_FULL_NAME__
407 - name: __ALAUDA_OVER_COMMIT_MEM__
408 value: "4096"
409 - name: __ALAUDA_SERVICE_NAME__
410 value: memcached5
411 - name: __ALAUDA_APP_NAME__
412 value: memcache-121
413 - name: __ALAUDA_SERVICE_VERSION__
414 value: "3049"
415 - name: CONNECTION_LIMIT
416 value: "1024"
417 - name: __ALAUDA_OVER_COMMIT_CPU__
418 value: "2048"
419 - name: MEMCACHED_PORT
420 value: "13612"
421 - name: __CREATE_TIME__
422 value: "2018-05-04T04:48:45.687Z"
423 - name: __ALAUDA_CONTAINER_SIZE__
424 value: "2.0"
425 - name: __ALAUDA_REGION_NAME__
426 image: 135.10.145.25:5000/pro1/memcache:1.4.33
427 imagePullPolicy: Always
428 name: memcached5
429 resources:
430 limits:
431 cpu: "0.5"
432 memory: 200Mi
433 requests:
434 cpu: "0.5"
435 memory: 200Mi
436 terminationMessagePath: /dev/termination-log
437 terminationMessagePolicy: File
438 dnsPolicy: ClusterFirst
439 hostNetwork: true
440 nodeSelector:
441 ip: 135.10.145.39
442 restartPolicy: Always
443 schedulerName: default-scheduler
444 securityContext: {}
445 terminationGracePeriodSeconds: 10
446
447
yaml里面的配置文件,有部分需要自己修改一下哦。
9.使用kubectl apply -f mem-test.yaml 部署
1
2 1kubectl apply -f mem-test.yaml
2
10.查看部署是否成功
小结:
到这里我们就部署成功了,谢谢大家的浏览。
由于我使用的是公司环境来部署的,所以yaml文件有一些参数可能大家不需要,大家可以自行优化哦。