0%

K3s 集群 helm 化改造之单例 minio - 流雨声 - 博客园

Excerpt

背景概况 MinIO 是全球领先的对象存储先锋,以 Apache License v2.0 发布的对象存储服务器,是为云应用和虚拟机而设计的分布式对象存储服务器。在标准硬件上,读/写速度上高达183GB/s和171GB/s。它与 Amazon S3 云存储服务兼容。 它最适用于存储非结构化数据,如照


背景概况

MinIO 是全球领先的对象存储先锋,以 Apache License v2.0 发布的对象存储服务器,是为云应用和虚拟机而设计的分布式对象存储服务器。在标准硬件上,读/写速度上高达183GB/s和171GB/s。它与 Amazon S3 云存储服务兼容。 它最适用于存储非结构化数据,如照片、视频、日志文件、备份和容器/虚拟机映像。 对象的大小可以从几KB 到最大5TB。

  • 对象存储,兼容Amazon S3协议
  • 安装运维相对简单,开箱即用
  • 后端除了本地文件系统,还支持多种存储系统,目前已经包括 OSS
  • 原生支持bucket事件通知机制
  • 可通过多节点集群方式,支持一定的高可用和数据容灾
  • 有WEB管理界面和CLI,可以用于测试或者管理
  • 公开bucket中的数据可以直接通过HTTP获取

Minio 资源

awk

1
2
<code-line></code-line>
<code-line></code-line>cd <span>/home/</span>work<span>/minio-demo/</span>
  • minio-deployment.yaml

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
<code-line></code-line><span>apiVersion:</span> <span>apps/v1</span>
<code-line></code-line><span>kind:</span> <span>Deployment</span>
<code-line></code-line><span>metadata:</span>
<code-line></code-line>
<code-line></code-line> <span>name:</span> <span>minio-deployment</span>
<code-line></code-line><span>spec:</span>
<code-line></code-line> <span>strategy:</span>
<code-line></code-line> <span>type:</span> <span>Recreate</span>
<code-line></code-line> <span>selector:</span>
<code-line></code-line> <span>matchLabels:</span>
<code-line></code-line> <span>app:</span> <span>minio</span>
<code-line></code-line> <span>template:</span>
<code-line></code-line> <span>metadata:</span>
<code-line></code-line> <span>labels:</span>
<code-line></code-line>
<code-line></code-line> <span>app:</span> <span>minio</span>
<code-line></code-line> <span>spec:</span>
<code-line></code-line>
<code-line></code-line> <span>volumes:</span>
<code-line></code-line> <span>-</span> <span>name:</span> <span>storage</span>
<code-line></code-line> <span>persistentVolumeClaim:</span>
<code-line></code-line>
<code-line></code-line> <span>claimName:</span> <span>minio-pv-claim</span>
<code-line></code-line> <span>containers:</span>
<code-line></code-line> <span>-</span> <span>name:</span> <span>minio</span>
<code-line></code-line>
<code-line></code-line> <span>image:</span> <span>minio/minio</span>
<code-line></code-line> <span>args:</span>
<code-line></code-line> <span>-</span> <span>server</span>
<code-line></code-line> <span>-</span> <span>/storage</span>
<code-line></code-line> <span>env:</span>
<code-line></code-line>
<code-line></code-line> <span>-</span> <span>name:</span> <span>MINIO_ACCESS_KEY</span>
<code-line></code-line> <span>value:</span> <span>"admin123"</span>
<code-line></code-line> <span>-</span> <span>name:</span> <span>MINIO_SECRET_KEY</span>
<code-line></code-line> <span>value:</span> <span>"admin123"</span>
<code-line></code-line> <span>ports:</span>
<code-line></code-line> <span>-</span> <span>containerPort:</span> <span>9000</span>
<code-line></code-line>
<code-line></code-line> <span>volumeMounts:</span>
<code-line></code-line> <span>-</span> <span>name:</span> <span>storage</span>
<code-line></code-line> <span>mountPath:</span> <span>"/storage"</span>
<code-line></code-line>
  • minio-pv.yaml

dts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<code-line></code-line><span>apiVersion:</span> v1
<code-line></code-line><span>kind:</span> PersistentVolume
<code-line></code-line><span>metadata:</span>
<code-line></code-line><span> labels:</span>
<code-line></code-line><span> app:</span> minio
<code-line></code-line><span> release:</span> minio
<code-line></code-line><span> name:</span> minio
<code-line></code-line><span> namespace:</span> default
<code-line></code-line><span>spec:</span>
<code-line></code-line><span> accessModes:</span>
<code-line></code-line> - ReadWriteOnce
<code-line></code-line><span> capacity:</span>
<code-line></code-line><span> storage:</span> <span>20</span>Gi
<code-line></code-line><span> volumeMode:</span> Filesystem
<code-line></code-line><span> hostPath:</span>
<code-line></code-line><span> path:</span> <span>/mnt/</span>minio
  • minio-pvc.yaml

properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<code-line></code-line><span>apiVersion</span>: <span>v1</span>
<code-line></code-line><span>kind</span>: <span>PersistentVolumeClaim</span>
<code-line></code-line><span>metadata</span>:<span></span>
<code-line></code-line>
<code-line></code-line> <span>name</span>: <span>minio-pv-claim</span>
<code-line></code-line> <span>labels</span>:<span></span>
<code-line></code-line> <span>app</span>: <span>minio-storage-claim</span>
<code-line></code-line><span>spec</span>:<span></span>
<code-line></code-line>
<code-line></code-line> <span>accessModes</span>:<span></span>
<code-line></code-line> <span>-</span> <span>ReadWriteOnce</span>
<code-line></code-line> <span>resources</span>:<span></span>
<code-line></code-line>
<code-line></code-line> <span>requests</span>:<span></span>
<code-line></code-line> <span>storage</span>: <span>20Gi</span>
<code-line></code-line>
<code-line></code-line>
  • minio-svc.yaml

yaml

1
2
3
4
5
6
7
8
9
10
11
12
<code-line></code-line><span>apiVersion:</span> <span>v1</span>
<code-line></code-line><span>kind:</span> <span>Service</span>
<code-line></code-line><span>metadata:</span>
<code-line></code-line> <span>name:</span> <span>minio-service</span>
<code-line></code-line><span>spec:</span>
<code-line></code-line> <span>type:</span> <span>NodePort</span>
<code-line></code-line> <span>ports:</span>
<code-line></code-line> <span>-</span> <span>port:</span> <span>9000</span>
<code-line></code-line> <span>targetPort:</span> <span>9000</span>
<code-line></code-line> <span>protocol:</span> <span>TCP</span>
<code-line></code-line> <span>selector:</span>
<code-line></code-line> <span>app:</span> <span>minio</span>
  • minio-ingress.yaml

yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<code-line></code-line><span>apiVersion:</span> <span>extensions/v1beta1</span>
<code-line></code-line><span>kind:</span> <span>Ingress</span>
<code-line></code-line><span>metadata:</span>
<code-line></code-line> <span>name:</span> <span>traefik-minio</span>
<code-line></code-line> <span>namespace:</span> <span>default</span>
<code-line></code-line> <span>annotations:</span>
<code-line></code-line> <span>kubernetes.io/ingress.class:</span> <span>traefik</span>
<code-line></code-line><span>spec:</span>
<code-line></code-line> <span>rules:</span>
<code-line></code-line> <span>-</span> <span>host:</span> <span>traefik.minio-minio-standalone.io</span>
<code-line></code-line> <span>http:</span>
<code-line></code-line> <span>paths:</span>
<code-line></code-line> <span>-</span> <span>backend:</span>
<code-line></code-line> <span>serviceName:</span> <span>minio-service</span>
<code-line></code-line> <span>servicePort:</span> <span>9000</span>

资源创建过程:

powershell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<code-line></code-line>
<code-line></code-line>kubectl apply <span>-f</span> minio<span>-pv</span>.yaml
<code-line></code-line>
<code-line></code-line>
<code-line></code-line>kubectl apply <span>-f</span> minio<span>-pv</span>.yaml
<code-line></code-line>
<code-line></code-line>
<code-line></code-line>kubectl apply <span>-f</span> minio<span>-deployment</span>.yaml
<code-line></code-line>
<code-line></code-line>
<code-line></code-line>kubectl apply <span>-f</span> minio<span>-svc</span>.yaml
<code-line></code-line>
<code-line></code-line>
<code-line></code-line>kubectl apply <span>-f</span> minio<span>-ingress</span>.yaml

Helm 改造

资源改造目录如下:

reasonml

1
2
3
4
5
6
7
8
9
10
11
12
13
<code-line></code-line><span>[<span>root</span>@<span>vm3290</span> <span>helm</span>]</span># tree minio-standalone/
<code-line></code-line>minio-standalone/
<code-line></code-line>├── <span><span><span>Chart</span>.</span></span>yaml
<code-line></code-line>├── <span><span><span>README</span>.</span></span>md
<code-line></code-line>├── templates
<code-line></code-line>│&nbsp;&nbsp; ├── minio-deployment.yaml
<code-line></code-line>│&nbsp;&nbsp; ├── minio-ingress.yaml
<code-line></code-line>│&nbsp;&nbsp; ├── minio-pvc.yaml
<code-line></code-line>│&nbsp;&nbsp; ├── minio-pv.yaml
<code-line></code-line>│&nbsp;&nbsp; └── minio-svc.yaml
<code-line></code-line>└── values.yaml
<code-line></code-line>
<code-line></code-line><span>1</span> directory, <span>8</span> files

定义 values.yaml 内容如下:

dts

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
<code-line></code-line><span>replicas:</span> <span>1</span>
<code-line></code-line><span>strategy:</span> Recreate
<code-line></code-line><span>resources:</span>
<code-line></code-line><span> limits:</span>
<code-line></code-line><span> cpu:</span> <span>"1"</span>
<code-line></code-line><span> memory:</span> <span>1</span>Gi
<code-line></code-line><span> requests:</span>
<code-line></code-line><span> cpu:</span> <span>200</span>m
<code-line></code-line><span> memory:</span> <span>200</span>Mi
<code-line></code-line><span>
<code-line></code-line>pv:</span>
<code-line></code-line><span> name:</span> minio
<code-line></code-line><span> accessModes:</span> ReadWriteOnce
<code-line></code-line><span> storage:</span> <span>20</span>Gi
<code-line></code-line><span>
<code-line></code-line>pvc:</span>
<code-line></code-line><span> name:</span> minio-pv-claim
<code-line></code-line><span>
<code-line></code-line>service:</span>
<code-line></code-line><span> name:</span> minio-service
<code-line></code-line><span>
<code-line></code-line>ingress:</span>
<code-line></code-line><span> name:</span> minio-ingress
<code-line></code-line><span> host:</span> traefik.minio-minio-standalone.io
<code-line></code-line>
<code-line></code-line><span># 请不要轻易修改此配置</span>
<code-line></code-line><span>global:</span>
<code-line></code-line><span> namespace:</span> minio-ns
<code-line></code-line><span> minio:</span>
<code-line></code-line><span> name:</span> minio-ds
<code-line></code-line><span> image:</span> minio/minio
<code-line></code-line><span> tag:</span> latest
<code-line></code-line><span> port:</span> <span>9000</span>

项目部署

vim

1
2
3
4
5
6
7
8
<code-line></code-line><span>1</span>. 安装
<code-line></code-line>helm install -n <span>&lt;YOUR-NAMESPACE&gt;</span> standalone standalone
<code-line></code-line>
<code-line></code-line><span>2</span>. 更新
<code-line></code-line>helm upgrade -n <span>&lt;YOUR-NAMESPACE&gt;</span> standalone standalone
<code-line></code-line>
<code-line></code-line><span>3</span>. 卸载
<code-line></code-line>helm <span>delete</span> -n <span>&lt;YOUR-NAMESPACE&gt;</span> standalone

minio 部署资源查看

配置 hosts 文件:

浏览器打开访问:

拓展阅读

本次改造的 minio 是单实例节点副本的 helm 化改造,主要用于机器资源不足,没有进行全盘虚拟化的场景下的资源调度管理上的应用部署,针对应用的场景不同,所以需要结合不同的项目需求进行设计。minio 可以支持单实例副本,同时也支持最小的四节点集群模式(所以在资源较少时建议采用单副本的minio,在集群中可以调度的机器节点资源大于等于4时,minio的集群模式才可以正常使用,后续将会开展集群模式的改造部署)

__EOF__