带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

释放双眼,带上耳机,听听看~!

       由于今天在公司搭建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
  1. 将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

带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

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

带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

5.docker tag  修改镜像名称

带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

6.使用Dockerfile创建镜像

带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

7.验证memcahe是否执行

带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

  1. 将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.查看部署是否成功

带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

带你玩转kubernetes-k8s(第44篇:利用DockerFile+deployment部署memcache集群)

小结:

     到这里我们就部署成功了,谢谢大家的浏览。

      由于我使用的是公司环境来部署的,所以yaml文件有一些参数可能大家不需要,大家可以自行优化哦。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

故障复盘的简洁框架-黄金三问

2021-9-30 19:18:23

安全运维

OpenSSH-8.7p1离线升级修复安全漏洞

2021-10-23 10:13:25

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索