Akemi

Helm部署minIO-单点与分布式

2024/12/05

二进制常规部署minio

因为我之前没部署过minio,在helm部署前我觉得需要先通过常规的部署,熟悉一下

这种部署其实就相当于单点的部署

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
官网给的部署方式很简单
采用二进制部署方式,系统是centos7.9

服务端:
wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio
chmod +x minio
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=password ./minio server /mnt/data --console-address ":9001"

默认的账号admin,默认密码password
API地址9000端口,网页地址9001端口

也可以通过nohup方式后台运行
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=password
nohup ./minio server /mnt/data --console-address ":9001" &

客户端:
# 下载mc工具
wget https://dl.minio.org.cn/client/mc/release/linux-amd64/mc
chmod +x mc
ln -s /root/mc /bin/mc

mc alias set myminio/ http://MINIO-SERVER MYUSER MYPASSWORD

mc alias set 'myminio' 'http://192.168.10.102:9000' 'admin' 'password'

# Added `myminio` successfully.
就说明已经将myminio这个minio服务器添加到了本地

通过mc工具对存储桶进行CRUD

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
我现在在网页已经添加了一个存储桶名字test

# 列出存在的桶
mc ls myminio
[2024-12-04 13:52:23 CST] 0B test/

# 创建一个桶
mc mb myminio/wangsheng
mc ls myminio
[2024-12-04 13:52:23 CST] 0B test/
[2024-12-04 14:01:09 CST] 0B wangsheng/

# 删除一个桶
mc rb myminio/test
Removed `myminio/test` successfully.

# 获取桶信息(仅限于admin
mc admin info myminio/wangsheng
● 192.168.10.102:9000
Uptime: 18 minutes
Version: 2024-11-07T00:52:20Z
Network: 1/1 OK
Drives: 1/1 OK
Pool: 1

┌──────┬───────────────────────┬─────────────────────┬──────────────┐
│ Pool │ Drives Usage │ Erasure stripe size │ Erasure sets │
│ 1st │ 16.1% (total: 45 GiB) │ 1 │ 1 │
└──────┴───────────────────────┴─────────────────────┴──────────────┘

0 B Used, 1 Bucket, 0 Objects
1 drive online, 0 drives offline, EC:0

# 上传单个文件到桶
mc cp nohup.out myminio/wangsheng/test01
/root/nohup.out: 1.39 KiB / 1.39 KiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 158.59 KiB/s 0s

# 上传一个目录
mc cp data/ myminio/wangsheng/dir01 --recursive
...ndex_jsp.java: 425.34 MiB / 425.34 MiB ┃▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓┃ 158.01 MiB/s 2s

# 删除文件
mc rm myminio/wangsheng/test01
Removed `myminio/wangsheng/test01`.

# 删除目录-递归删除
mc rm -r --force myminio/wangsheng/dir01

#添加一个用户wangsheng
mc admin user add myminio wangsheng wangsheng12345
#Added user `wangsheng` successfully.

#启用用户wangsheng
mc admin user enable myminio wangsheng
#Enabled user `wangsheng` successfully.

下载Chart

1
2
3
4
5
helm search repo minio
可以看到bitnami和aliyun都有
但是bitnami很新,是24年11月的版本

helm pull bitnami/minio

观察chart与修改配置

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
需求镜像:
docker.io/bitnami/minio:2024.11.7-debian-12-r0
docker.io/bitnami/minio-client:2024.10.29-debian-12-r1
docker.io/bitnami/os-shell:12-debian-12-r32
在Value文件中可以修改

Value文件结构:
global-全局配置,包括指定镜像仓库地址,拉取策略,存储类名等
通用配置-包括nameOverride,helm全名,command启动命令,污点,亲和性,节点selecetor等
image-镜像信息
clientImage-命令行镜像信息
auth-认证信息,包括初始密码
tls-证书认证信息,默认为关

修改内容:
1.因为我是单master节点,所以打一个污点
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"

2.指定一个密码,如果不指定就会默认用base64生成的密码
注意修改的密码必须大于8位,不然会报错
rootPassword: "wangsheng"

3.指定存储类,直接从供应商拉pv
global:
storageClass: "local-path"

4.指定statefulset副本数,拉满,战斗爽
statefulset:
replicaCount: 5

5.修改mode
默认是standalone,此时会使用deployment部署
改成distributed,就会使用statefulset部署
mode: distributed

如果用statefulset部署,相当于就是分布式部署了

helm部署minio

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
helm install minio ./
如果和我配置一样,那应该部署没啥问题
kubectl get pods | grep minio
minio-0 1/1 Running 0 5m15s
minio-1 1/1 Running 0 5m15s
minio-2 1/1 Running 0 5m15s
minio-3 1/1 Running 0 5m15s
minio-4 1/1 Running 0 5m15s

kubectl get svc | grep minio
minio ClusterIP 10.102.72.244 <none> 9000/TCP,9001/TCP 5m31s
minio-headless ClusterIP None <none> 9000/TCP,9001/TCP 5m31s

helm list | grep minio
minio default 1 2024-12-04 15:00:13.021768562 +0800 CST deployed minio-14.8.5 2024.11.7

部署minio-client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
chart推荐的方法:
export ROOT_USER=$(kubectl get secret --namespace default minio -o jsonpath="{.data.root-user}" | base64 -d)
export ROOT_PASSWORD=$(kubectl get secret --namespace default minio -o jsonpath="{.data.root-password}" | base64 -d)
kubectl run --namespace default minio-client \
--rm --tty -i --restart='Never' \
--env MINIO_SERVER_ROOT_USER=$ROOT_USER \
--env MINIO_SERVER_ROOT_PASSWORD=$ROOT_PASSWORD \
--env MINIO_SERVER_HOST=minio \
--image docker.io/bitnami/minio-client:2024.10.29-debian-12-r1 -- admin info minio

但是我不推荐,因为我用这玩意一直在报错很烦

# 端口转发
echo "MinIO&reg; web URL: http://127.0.0.1:9001/minio"
nohup kubectl port-forward --namespace default svc/minio 9000:9000 &

# 用本机的mc连接
mc alias set 'myminio' 'http://127.0.0.1:9000' 'admin' 'wangsheng'
#Handling connection for 9000
#Added `myminio` successfully.

分布式部署说明

helm的这种部署一种有状态的分布式部署,即将数据进行分片:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ls /data
pvc-2742941f-3387-44a9-809e-abed875d52c0_default_data-minio-0
pvc-65c88bb7-7361-48f1-b6a6-2cfbda4191c8_default_data-minio-4
pvc-b84eef22-0bde-4610-932c-9ed8f172121c_default_data-minio-3
pvc-bb65bb62-ad08-47dd-a597-c8c38e57e24f_default_data-minio-2
pvc-e0c33dc7-000d-4b50-a4ea-dfeffc5276db_default_data-minio-1

这里的每个文件夹中都存放了一份我上传的文件

现在上传一下
mc cp bitnami-mysql8.tar.gz myminio/wangsheng/bitnami-mysql8.tar.gz

sudo du -ah -d 1 .
230M ./pvc-2742941f-3387-44a9-809e-abed875d52c0_default_data-minio-0
230M ./pvc-e0c33dc7-000d-4b50-a4ea-dfeffc5276db_default_data-minio-1
230M ./pvc-65c88bb7-7361-48f1-b6a6-2cfbda4191c8_default_data-minio-4
230M ./pvc-b84eef22-0bde-4610-932c-9ed8f172121c_default_data-minio-3
230M ./pvc-bb65bb62-ad08-47dd-a597-c8c38e57e24f_default_data-minio-2

我这个文件原大小是680M,而可以看到分成了5份230M的文件,总大小来到了1G
这是因为分布式存储因为做了分布式奇偶校验,所以产生了额外的开销,
数据分片份数越多,开销占源文件比例就越小
CATALOG
  1. 1. 二进制常规部署minio
  2. 2. 通过mc工具对存储桶进行CRUD
  3. 3. 下载Chart
  4. 4. 观察chart与修改配置
  5. 5. helm部署minio
  6. 6. 部署minio-client
  7. 7. 分布式部署说明