华为云CCE部署moodle程序
moodle程序需要通过k8s容器化部署,这里使用了企业版的k8s — 华为云CCE进行测试。因为moodle和常见的应用程序一样,会涉及两部分数据:
- 数据库数据:这里使用华为云服务RDS MySQL来承载;
- 应用数据:也就是moodledata数据,这部分通过使用外部存储来存放,存放的方式有三种,云硬盘(EVS)、对象存储(OBS)、共享存储(SFS Turbo)。
使用EVS时,无法实现数据在多个Pod之间的共享,这里只能运行单pod实例,OBS和SFS可以运行多pod实例。
一、单pod EVS方式运行
这里因为要测试三种方式,这里在RDS的实例里我已经创建好了三个库,后面测试的时候会用到这三个库。
这里直接给下创建的yaml文件:
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 annotations:
5 description: ''
6 labels:
7 appgroup: ''
8 version: v1
9 name: moodleevs
10 namespace: default
11spec:
12 selector:
13 matchLabels:
14 app: moodleevs
15 version: v1
16 template:
17 metadata:
18 annotations:
19 metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]'
20 labels:
21 app: moodleevs
22 version: v1
23 spec:
24 containers:
25 - image: 'swr.la-north-2.myhuaweicloud.com/hcie/moodle:v4'
26 name: container-0
27 resources:
28 requests:
29 cpu: 250m
30 memory: 512Mi
31 limits:
32 cpu: 1000m
33 memory: 1024Mi
34 env:
35 - name: PAAS_APP_NAME
36 value: moodleevs
37 - name: PAAS_NAMESPACE
38 value: default
39 - name: PAAS_PROJECT_ID
40 value: 0e0e5cabfa80f2892f17c00390299e63
41 - name: MOODLE_DATABASE_TYPE
42 value: mysqli
43 - name: MOODLE_DATABASE_HOST
44 value: 192.168.0.230
45 - name: MOODLE_DATABASE_USER
46 value: moodletest
47 - name: MOODLE_DATABASE_PASSWORD
48 value: Abc@123456
49 - name: MOODLE_DATABASE_NAME
50 value: moodle
51 volumeMounts:
52 - name: pvc-165706814685426547
53 mountPath: /bitnami/moodledata
54 readOnly: false
55 subPath: ''
56 imagePullSecrets:
57 - name: default-secret
58 terminationGracePeriodSeconds: 30
59 dnsPolicy: ClusterFirst
60 dnsConfig:
61 nameservers: []
62 options:
63 - name: timeout
64 value: ''
65 - name: ndots
66 value: '5'
67 - name: single-request-reopen
68 searches: []
69 volumes:
70 - persistentVolumeClaim:
71 claimName: pvc-165706814685426547
72 name: pvc-165706814685426547
73 affinity: {}
74 tolerations:
75 - key: node.kubernetes.io/not-ready
76 operator: Exists
77 effect: NoExecute
78 tolerationSeconds: 300
79 - key: node.kubernetes.io/unreachable
80 operator: Exists
81 effect: NoExecute
82 tolerationSeconds: 300
83 replicas: 1
84 minReadySeconds: 0
85 strategy:
86 type: RollingUpdate
87 rollingUpdate:
88 maxSurge: 1
89 maxUnavailable: 1
90
91---
92apiVersion: v1
93kind: Service
94metadata:
95 name: moodleevs
96 labels:
97 app: moodleevs
98 namespace: default
99 annotations: {}
100spec:
101 selector:
102 app: moodleevs
103 externalTrafficPolicy: Cluster
104 ports:
105 - name: cce-service-0
106 targetPort: 8080
107 nodePort: 0
108 port: 8080
109 protocol: TCP
110 type: NodePort
111
112---
113kind: PersistentVolumeClaim
114apiVersion: v1
115metadata:
116 name: pvc-165706814685426547
117 namespace: default
118 annotations:
119 everest.io/disk-volume-type: SAS
120 enable: true
121 labels:
122 failure-domain.beta.kubernetes.io/zone: la-north-2a
123 failure-domain.beta.kubernetes.io/region: la-north-2
124spec:
125 accessModes:
126 - ReadWriteOnce
127 resources:
128 requests:
129 storage: 20Gi
130 storageClassName: csi-disk
注意,这里的ENV部分,对应的moodle连接的数据库,都是通过这些环境变量传过去的。
创建完成后,需要等待1-2分钟,通过日志确认已经完成安装,就可以通过nodeport对应的链接信息登录使用了,默认登录用户名是user,密码是bitnami。
二、OBS方式运行
OBS方式这里是不推荐的,除非前端有CDN,因为IO性能太差,SFS和EVS 1-2分钟可以安装完成,OBS需要7-9分钟左右。而且OBS仅支持并行文件系统,不支持对象桶。
这里先例下对应的yaml文件:
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 annotations:
5 description: ''
6 labels:
7 appgroup: ''
8 version: v1
9 name: moodleobs
10 namespace: default
11spec:
12 selector:
13 matchLabels:
14 app: moodleobs
15 version: v1
16 template:
17 metadata:
18 annotations:
19 metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]'
20 labels:
21 app: moodleobs
22 version: v1
23 spec:
24 containers:
25 - image: 'swr.la-north-2.myhuaweicloud.com/hcie/moodle:v4'
26 name: container-0
27 resources:
28 requests:
29 cpu: 250m
30 memory: 512Mi
31 limits:
32 cpu: 1000m
33 memory: 1024Mi
34 env:
35 - name: PAAS_APP_NAME
36 value: moodleobs
37 - name: PAAS_NAMESPACE
38 value: default
39 - name: PAAS_PROJECT_ID
40 value: 0e0e5cabfa80f2892f17c00390299e63
41 - name: MOODLE_DATABASE_TYPE
42 value: mysqli
43 - name: MOODLE_DATABASE_HOST
44 value: 192.168.0.230
45 - name: MOODLE_DATABASE_USER
46 value: moodletest
47 - name: MOODLE_DATABASE_PASSWORD
48 value: Abc@123456
49 - name: MOODLE_DATABASE_NAME
50 value: moodle2
51 volumeMounts:
52 - name: pvc-165707103684028570
53 mountPath: /bitnami/moodledata
54 readOnly: false
55 subPath: ''
56 imagePullSecrets:
57 - name: default-secret
58 terminationGracePeriodSeconds: 30
59 dnsPolicy: ClusterFirst
60 dnsConfig:
61 nameservers: []
62 options:
63 - name: timeout
64 value: ''
65 - name: ndots
66 value: '5'
67 - name: single-request-reopen
68 searches: []
69 volumes:
70 - persistentVolumeClaim:
71 claimName: pvc-165707103684028570
72 name: pvc-165707103684028570
73 affinity: {}
74 tolerations:
75 - key: node.kubernetes.io/not-ready
76 operator: Exists
77 effect: NoExecute
78 tolerationSeconds: 300
79 - key: node.kubernetes.io/unreachable
80 operator: Exists
81 effect: NoExecute
82 tolerationSeconds: 300
83 replicas: 1
84 minReadySeconds: 0
85 strategy:
86 type: RollingUpdate
87 rollingUpdate:
88 maxSurge: 0
89 maxUnavailable: 1
90
91---
92apiVersion: v1
93kind: Service
94metadata:
95 name: moodleobs
96 labels:
97 app: moodleobs
98 namespace: default
99 annotations: {}
100spec:
101 selector:
102 app: moodleobs
103 externalTrafficPolicy: Cluster
104 ports:
105 - name: cce-service-0
106 targetPort: 8080
107 nodePort: 0
108 port: 8080
109 protocol: TCP
110 type: NodePort
111
112---
113kind: PersistentVolumeClaim
114apiVersion: v1
115metadata:
116 name: pvc-165707103684028570
117 namespace: default
118 annotations:
119 everest.io/obs-volume-type: STANDARD
120 csi.storage.k8s.io/fstype: obsfs
121 enable: true
122spec:
123 accessModes:
124 - ReadWriteMany
125 resources:
126 requests:
127 storage: 1Gi
128 storageClassName: csi-obs
这里需要注意,此时的moodle还是仅支持单pod,如果需要支持多pod需要增加一个环境变量,MOODLE_SKIP_BOOTSTRAP="yes"
。如下:
MOODLE_SKIP_BOOTSTRAP: Do not initialize the Moodle database for a new deployment. This is necessary in case you use a database that already has Moodle data. Default: no
三、使用SFS Turbo存储
这里的配置和OBS的配置类似,只不过需要提前创建SFS Turbo存储,在标准版里,这里的最小存储空间是500G,在标准型增强版里,最小空间大小是10240G,这点需要注意下。
创建完成后,需要导入到CCE的存储配置里:
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 annotations:
5 description: ''
6 labels:
7 appgroup: ''
8 version: v1
9 name: moodlesfs
10 namespace: default
11spec:
12 selector:
13 matchLabels:
14 app: moodlesfs
15 version: v1
16 template:
17 metadata:
18 annotations:
19 metrics.alpha.kubernetes.io/custom-endpoints: '[{"api":"","path":"","port":"","names":""}]'
20 labels:
21 app: moodlesfs
22 version: v1
23 spec:
24 containers:
25 - image: 'swr.la-north-2.myhuaweicloud.com/hcie/moodle:v4'
26 name: container-0
27 resources:
28 requests:
29 cpu: 250m
30 memory: 512Mi
31 limits:
32 cpu: 1000m
33 memory: 1024Mi
34 env:
35 - name: PAAS_APP_NAME
36 value: moodlesfs
37 - name: PAAS_NAMESPACE
38 value: default
39 - name: PAAS_PROJECT_ID
40 value: 0e0e5cabfa80f2892f17c00390299e63
41 - name: MOODLE_DATABASE_TYPE
42 value: mysqli
43 - name: MOODLE_DATABASE_HOST
44 value: 192.168.0.230
45 - name: MOODLE_DATABASE_USER
46 value: moodletest
47 - name: MOODLE_DATABASE_PASSWORD
48 value: Abc@123456
49 - name: MOODLE_DATABASE_NAME
50 value: moodle
51 - name: MOODLE_SKIP_BOOTSTRAP //该变量首次增加时不使用,单pod启动后,再增加
52 value: yes
53 volumeMounts:
54 - name: cce-efs-import-l58s9guz-cof0
55 mountPath: /bitnami/moodledata
56 readOnly: false
57 subPath: ''
58 imagePullSecrets:
59 - name: default-secret
60 terminationGracePeriodSeconds: 30
61 dnsPolicy: ClusterFirst
62 dnsConfig:
63 nameservers: []
64 options:
65 - name: timeout
66 value: ''
67 - name: ndots
68 value: '5'
69 - name: single-request-reopen
70 searches: []
71 volumes:
72 - persistentVolumeClaim:
73 claimName: cce-efs-import-l58s9guz-cof0
74 name: cce-efs-import-l58s9guz-cof0
75 affinity: {}
76 tolerations:
77 - key: node.kubernetes.io/not-ready
78 operator: Exists
79 effect: NoExecute
80 tolerationSeconds: 300
81 - key: node.kubernetes.io/unreachable
82 operator: Exists
83 effect: NoExecute
84 tolerationSeconds: 300
85 replicas: 1
86 minReadySeconds: 0
87 strategy:
88 type: RollingUpdate
89 rollingUpdate:
90 maxSurge: 0
91 maxUnavailable: 1
92
93---
94apiVersion: v1
95kind: Service
96metadata:
97 name: moodlesfs
98 labels:
99 app: moodlesfs
100 namespace: default
101 annotations: {}
102spec:
103 selector:
104 app: moodlesfs
105 externalTrafficPolicy: Cluster
106 ports:
107 - name: cce-service-0
108 targetPort: 8080
109 nodePort: 0
110 port: 8080
111 protocol: TCP
112 type: NodePort
四、总结
因为配置比较简单,这里没有太多变化的东西,这里对于存储速度需要总结下,三者之间的访问速度是:
EVS > SFS Turbo > OBS
三者的区别如下:
表 OBS、EVS、SFS服务对比
对比维度 | 对象存储服务 | 云硬盘 | 弹性文件服务 |
---|---|---|---|
概念 | 提供海量、安全、高可靠、低成本的数据存储能力,可供用户存储任意类型和大小的数据。 | 可以为云服务器提供高可靠、高性能、规格丰富并且可弹性扩展的块存储服务,可满足不同场景的业务需求。云硬盘就类似PC中的硬盘。 | 提供按需扩展的高性能文件存储,可为云上多个云服务器提供共享访问。弹性文件服务就类似Windows或Linux中的远程目录。 |
存储数据的逻辑 | 存放的是对象,可以直接存放文件,文件会自动产生对应的系统元数据,用户也可以自定义文件的元数据。 | 存放的是二进制数据,无法直接存放文件,如果需要存放文件,需要先格式化文件系统后使用。 | 存放的是文件,会以文件和文件夹的层次结构来整理和呈现数据。 |
访问方式 | 可以通过互联网或专线访问。需要指定桶地址进行访问,使用的是HTTP和HTTPS等传输协议。 | 只能在ECS/BMS中挂载使用,不能被操作系统应用直接访问,需要格式化成文件系统进行访问。 | 在ECS/BMS中通过网络协议挂载使用,支持NFS和CIFS的网络协议。需要指定网络地址进行访问,也可以将网络地址映射为本地目录后进行访问。 |
使用场景 | 如大数据分析、静态网站托管、在线视频点播、基因测序和智能视频监控等。 | 如高性能计算、企业核心集群应用、企业应用系统和开发测试等。 说明: 高性能计算:主要是高速率、高IOPS的需求,用于作为高性能存储,比如工业设计、能源勘探这些。 |
如高性能计算、媒体处理、文件共享和内容管理和Web服务等。 说明: 高性能计算:主要是高带宽的需求,用于共享文件存储,比如基因测序、图片渲染这些。 |
容量 | EB级别 | TB级别 | PB级别 |
时延 | 10ms | 1~2ms | 3~10ms |
IOPS/TPS | 千万级 | 单盘 33K | 单文件系统 10K |
带宽 | TB/s级别 | MB/s级别 | GB/s级别 |
是否支持数据共享 | 是 | 是 | 是 |
是否支持远程访问 | 是 | 否 | 是 |
是否支持在线编辑 | 否 | 是 | 是 |
是否能单独使用 | 是 | 否 | 是 |
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/k8s-moodle/6844.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.