第二章:安装部署
详细讲解 MinIO 的多种安装方式,包括二进制安装、Docker 部署和 Kubernetes 部署。
最后更新: 2024-01-15
页面目录
第二章:安装部署
2.1 系统要求
2.1.1 硬件要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 8 核以上 |
| 内存 | 4 GB | 16 GB 以上 |
| 磁盘 | 100 GB | 1 TB+ NVMe SSD |
| 网络 | 千兆 | 万兆 |
2.1.2 软件要求
- 操作系统:Linux (推荐)、macOS、Windows
- 架构:x86_64, ARM64
- 依赖:无(单二进制文件)
2.2 二进制安装
2.2.1 下载 MinIO
# 下载最新版本
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
# 下载 MinIO Client
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
# 验证安装
minio --version
mc --version
2.2.2 启动 MinIO(单机)
# 创建数据目录
sudo mkdir -p /data/minio
# 启动 MinIO
minio server /data/minio --console-address ":9001"
# 后台运行
nohup minio server /data/minio --console-address ":9001" \
> /var/log/minio.log 2>&1 &
# 使用 systemd 管理
sudo useradd -r minio-user -s /sbin/nologin
sudo chown -R minio-user:minio-user /data/minio
2.2.3 systemd 服务配置
# /etc/systemd/system/minio.service
[Unit]
Description=MinIO
Documentation=https://docs.min.io
Wants=network-online.target
After=network-online.target
[Service]
User=minio-user
Group=minio-user
ExecStart=/usr/local/bin/minio server /data/minio --console-address ":9001"
Restart=always
RestartSec=10
# 环境配置
Environment="MINIO_ROOT_USER=admin"
Environment="MINIO_ROOT_PASSWORD=your-strong-password"
# 资源限制
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
# 启用并启动服务
sudo systemctl daemon-reload
sudo systemctl enable minio
sudo systemctl start minio
sudo systemctl status minio
2.3 Docker 部署
2.3.1 Docker 单机部署
# 拉取镜像
docker pull minio/minio:latest
# 启动 MinIO
docker run -d \
--name minio \
-p 9000:9000 \
-p 9001:9001 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=password123" \
-v /data/minio:/data \
minio/minio server /data --console-address ":9001"
# 查看日志
docker logs -f minio
# 访问
# API: http://localhost:9000
# Console: http://localhost:9001
2.3.2 Docker Compose 单机部署
# docker-compose.yml
version: '3.8'
services:
minio:
image: minio/minio:latest
container_name: minio
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: password123
volumes:
- minio-data:/data
command: server /data --console-address ":9001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
restart: unless-stopped
volumes:
minio-data:
docker-compose up -d
docker-compose logs -f minio
2.4 分布式部署
2.4.1 分布式架构
┌─────────────────────────────────────────────────────────┐
│ MinIO Distributed Cluster │
│ (8 节点, 纠删码模式) │
├─────────────────────────────────────────────────────────┤
│ │
│ Node 1 Node 2 Node 3 Node 4 │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │Disk 1 │ │Disk 2 │ │Disk 3 │ │Disk 4 │ │
│ │Disk 2 │ │Disk 3 │ │Disk 4 │ │Disk 1 │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
│ │
│ Node 5 Node 6 Node 7 Node 8 │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │Disk 4 │ │Disk 1 │ │Disk 2 │ │Disk 3 │ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
2.4.2 分布式启动脚本
#!/bin/bash
# start-distributed-minio.sh
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=password123
minio server \
http://node{1...4}:9000/data/minio{1...2} \
http://node{5...8}:9000/data/minio{1...2}
2.4.3 Docker Compose 分布式部署
# docker-compose-distributed.yml
version: '3.8'
services:
minio1:
image: minio/minio:latest
container_name: minio1
hostname: minio1
ports:
- "9001:9000"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: password123
volumes:
- minio1-data:/data/minio
command: server http://minio{1...4}/data/minio --console-address ":9000"
networks:
minio-net:
ipv4_address: 172.20.0.11
minio2:
image: minio/minio:latest
container_name: minio2
hostname: minio2
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: password123
volumes:
- minio2-data:/data/minio
command: server http://minio{1...4}/data/minio --console-address ":9000"
networks:
minio-net:
ipv4_address: 172.20.0.12
minio3:
image: minio/minio:latest
container_name: minio3
hostname: minio3
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: password123
volumes:
- minio3-data:/data/minio
command: server http://minio{1...4}/data/minio --console-address ":9000"
networks:
minio-net:
ipv4_address: 172.20.0.13
minio4:
image: minio/minio:latest
container_name: minio4
hostname: minio4
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: password123
volumes:
- minio4-data:/data/minio
command: server http://minio{1...4}/data/minio --console-address ":9000"
networks:
minio-net:
ipv4_address: 172.20.0.14
networks:
minio-net:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
volumes:
minio1-data:
minio2-data:
minio3-data:
minio4-data:
2.5 Kubernetes 部署
2.5.1 使用 Operator 部署
# 安装 MinIO Operator
kubectl apply -k https://github.com/minio/operator?ref=master
# 检查 Operator 状态
kubectl get pods -n minio-operator
2.5.2 创建 Tenant
# minio-tenant.yaml
apiVersion: minio.min.io/v4
kind: Tenant
metadata:
name: minio-tenant
namespace: minio-tenant-ns
spec:
image: minio/minio:RELEASE.2024-01-16T16-07-38Z
pools:
- servers: 4
volumesPerServer: 4
volumeClaimTemplate:
metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
credsSecret:
name: minio-creds
exposeServices:
console: true
minio: true
serviceAccountName: minio-sa
---
apiVersion: v1
kind: Namespace
metadata:
name: minio-tenant-ns
---
apiVersion: v1
kind: Secret
metadata:
name: minio-creds
namespace: minio-tenant-ns
type: Opaque
stringData:
rootUser: admin
rootPassword: password123
kubectl apply -f minio-tenant.yaml
kubectl get tenant -n minio-tenant-ns
2.6 环境变量配置
| 变量 | 说明 | 示例 |
|---|---|---|
MINIO_ROOT_USER |
访问密钥 | admin |
MINIO_ROOT_PASSWORD |
秘密密钥 | password |
MINIO_REGION_NAME |
区域名称 | us-east-1 |
MINIO_CACHE_DRIVES |
缓存盘 | /mnt/cache1,/mnt/cache2 |
MINIO_CACHE_EXCLUDE |
缓存排除 | “.pdf,mybucket/” |
MINIO_CACHE_QUOTA |
缓存配额 | 80 |
MINIO_STORAGE_CLASS_STANDARD |
存储类别 | EC:2 |
MINIO_IDENTITY_OPENID |
OIDC 配置 | … |
MINIO_IDENTITY_LDAP |
LDAP 配置 | … |
2.7 常用运维命令
# 查看版本
minio --version
# 查看健康状态
curl http://localhost:9000/minio/health/live
# 查看集群信息
curl http://localhost:9000/minio/v2/info | jq
# 重启服务
sudo systemctl restart minio
# 查看日志
sudo journalctl -u minio -f
2.8 总结
本章介绍了 MinIO 的多种安装部署方式,包括二进制安装、Docker 部署和 Kubernetes 部署。生产环境推荐使用分布式部署以获得高可用性。下一章将学习 MinIO 的快速入门操作。