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>
|
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>
|
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
|
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>
|
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>
|
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>│ ├── minio-deployment.yaml <code-line></code-line>│ ├── minio-ingress.yaml <code-line></code-line>│ ├── minio-pvc.yaml <code-line></code-line>│ ├── minio-pv.yaml <code-line></code-line>│ └── 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><YOUR-NAMESPACE></span> standalone standalone <code-line></code-line> <code-line></code-line><span>2</span>. 更新 <code-line></code-line>helm upgrade -n <span><YOUR-NAMESPACE></span> standalone standalone <code-line></code-line> <code-line></code-line><span>3</span>. 卸载 <code-line></code-line>helm <span>delete</span> -n <span><YOUR-NAMESPACE></span> standalone
|
minio 部署资源查看
配置 hosts 文件:
浏览器打开访问:
拓展阅读
本次改造的 minio 是单实例节点副本的 helm 化改造,主要用于机器资源不足,没有进行全盘虚拟化的场景下的资源调度管理上的应用部署,针对应用的场景不同,所以需要结合不同的项目需求进行设计。minio 可以支持单实例副本,同时也支持最小的四节点集群模式(所以在资源较少时建议采用单副本的minio,在集群中可以调度的机器节点资源大于等于4时,minio的集群模式才可以正常使用,后续将会开展集群模式的改造部署)
__EOF__