47722ea95ccf2becdb8778691232998a7b36c78d
\346\214\202\350\275\275minio\345\210\260\346\234\254\345\234\260.md
... | ... | @@ -0,0 +1,95 @@ |
1 | +### 引擎目前使用方式 |
|
2 | + |
|
3 | +引擎目前使用minio的方式是通过minio client去访问minio server来进行文件读写,这是正确的做法,但是我们还需要将远程的文件下载放到本地,比如jar包,比如前端zip包,以供引擎加载和使用,那么就涉及到需要维护两种方式访问文件的方式,一种是远程访问minio,另一种是访问本地磁盘。如果我们能够统一访问minio的方式跟访问本地磁盘一样,那么整个操作流程会变得更为简单,而且也没有在业务中先下载前端zip然后解压到本地再使用的操作,只需要在本地直接就地解压minio上面的文件即可,保证了一致性。 |
|
4 | + |
|
5 | +### 使用方式 |
|
6 | + |
|
7 | +#### k8s csi |
|
8 | +k8s除了在资源计算、网络方面做了抽象,当然也会在存储方面进行抽象和提供统一的接口,那就是csi,具体参考官方文档:https://kubernetes-csi.github.io/docs/ ,简单来说任何实现了csi接口的其他文件系统都可以当作k8s的存储来使用。我们目前使用的 nfs 就是一种,而minio作为对象存储当然也是可以作为k8s存储的,但是需要我们做一些工作。 |
|
9 | + |
|
10 | +#### 存储供应 |
|
11 | + |
|
12 | + ```yaml |
|
13 | + kind: StorageClass |
|
14 | + apiVersion: storage.k8s.io/v1 |
|
15 | + metadata: |
|
16 | + name: minio-s3fs-sc |
|
17 | + labels: |
|
18 | + app.kubernetes.io/managed-by: Helm |
|
19 | + annotations: |
|
20 | + meta.helm.sh/release-name: csi-s3 |
|
21 | + meta.helm.sh/release-namespace: default |
|
22 | + storageclass.kubesphere.io/allow-clone: 'true' |
|
23 | + storageclass.kubesphere.io/allow-snapshot: 'true' |
|
24 | + provisioner: minio.s3.csi.sie.com |
|
25 | + parameters: |
|
26 | + access-key: snest |
|
27 | + bucket: apps |
|
28 | + endpoint: '192.168.184.122:31179' |
|
29 | + mounter: s3fs |
|
30 | + secret-key: snest123 |
|
31 | + reclaimPolicy: Delete |
|
32 | + volumeBindingMode: Immediate |
|
33 | + |
|
34 | + ``` |
|
35 | +如上,需要定义StorageClass,来配置我们后面需要用到的pv,包括provisioner是谁,minio的url地址,桶等相关信息。 |
|
36 | + |
|
37 | +#### pvc |
|
38 | + |
|
39 | +有了 StorageClass,我们就可以创建对应的pvc来供业务使用了,我们这里创建了2个pvc: minio-apps-pvc 用于保存apps相关文件,minio-apps-frontend-pvc 用于保存前端相关文件,且可以供引擎和前端共享。 |
|
40 | + |
|
41 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/1.jpg]] |
|
42 | + |
|
43 | +创建pvc以后,就会相应地在minio创建两个目录: |
|
44 | + |
|
45 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/2.jpg]] |
|
46 | + |
|
47 | +#### 使用 |
|
48 | + |
|
49 | +有了pvc以后,我们就可以在业务中使用。 |
|
50 | + |
|
51 | +在引擎中分别挂载这2个pvc到容器内的 /apps 目录和 /apps-frontend 目录 |
|
52 | + |
|
53 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/3.jpg]] |
|
54 | + |
|
55 | +前端容器也是一样的使用方式: |
|
56 | + |
|
57 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/4.jpg]] |
|
58 | + |
|
59 | +我们开始通过应用市场上传app相关文件,上传以后还是可以在minio查看到相关的文件,格式是 日期/随机数 |
|
60 | + |
|
61 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/5.jpg]] |
|
62 | + |
|
63 | +我们继续查看前端在minio映射的文件内容,可以发现就是 /usr/share/nginx/html 的文件内容: |
|
64 | + |
|
65 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/6.jpg]] |
|
66 | + |
|
67 | +引擎端也是类似的: |
|
68 | + |
|
69 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/7.jpg]] |
|
70 | + |
|
71 | + |
|
72 | +我们继续从应用市场安装一个app,然后查看/apps/modules 目录下的内容,发现安装的app jar包已经在里面了: |
|
73 | + |
|
74 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/8.jpg]] |
|
75 | + |
|
76 | +继续查看 /apps-frontend/umdComps 目录下的前端文件,发现也已经保存了: |
|
77 | + |
|
78 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/9.jpg]] |
|
79 | + |
|
80 | +最后我们回到引擎和前端容器的内部,核查以下文件是否保存在对应的目录了,可以发现确实都已经存在了: |
|
81 | + |
|
82 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/10.jpg]] |
|
83 | + |
|
84 | +[[http://iidp.chinasie.com:9999/iidpminio/csi-s3/11.jpg]] |
|
85 | + |
|
86 | +最终我们实现了将minio挂载到本地,像操作本地磁盘一样来操作minio。 |
|
87 | + |
|
88 | + |
|
89 | +#### 原理 |
|
90 | + |
|
91 | +1, linux fuse 框架,linux内核提供了用户态的文件系统,参考:[[https://www.kernel.org/doc/html/latest/filesystems/fuse.html]] |
|
92 | + |
|
93 | +2,s3fs 一个可以把 S3 Bucket 挂在本地的文件系统,参考:[[https://github.com/s3fs-fuse/s3fs-fuse]] |
|
94 | + |
|
95 | + |