Kubernetes部署单机MinIO服务(使用NFS存储)
1. 准备NFS存储
首先创建NFS服务器和共享目录(假设NFS服务器IP为192.168.1.100
,共享路径/data/minio
):
# 在NFS服务器执行
mkdir -p /data/minio
echo "/data/minio *(rw,sync,no_root_squash)" >> /etc/exports
exportfs -a
2. 创建Kubernetes持久卷(PV)和声明(PVC)
nfs-pv.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
name: minio-pv
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /data/minio
server: 192.168.1.100
nfs-pvc.yaml:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: minio-pvc
spec:
storageClassName: nfs
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
应用配置:
kubectl apply -f nfs-pv.yaml
kubectl apply -f nfs-pvc.yaml
3. 部署MinIO服务
minio-deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: minio
spec:
selector:
matchLabels:
app: minio
template:
metadata:
labels:
app: minio
spec:
containers:
- name: minio
image: minio/minio:latest
args:
- server
- /storage
env:
- name: MINIO_ROOT_USER
value: "admin"
- name: MINIO_ROOT_PASSWORD
value: "password123"
ports:
- containerPort: 9000
volumeMounts:
- name: storage
mountPath: "/storage"
volumes:
- name: storage
persistentVolumeClaim:
claimName: minio-pvc
---
apiVersion: v1
kind: Service
metadata:
name: minio-service
spec:
selector:
app: minio
ports:
- protocol: TCP
port: 9000
targetPort: 9000
type: NodePort
4. 部署验证
kubectl apply -f minio-deployment.yaml
kubectl get pods -l app=minio # 查看Pod状态
kubectl get svc minio-service # 获取NodePort
访问MinIO控制台:http://<NodeIP>:<NodePort>
,使用凭证admin/password123
使用OBS存储的替代方案(华为云)
若使用OBS(对象存储),需通过CSI驱动挂载:
1. 安装OBS CSI驱动
参考华为云文档安装CSI驱动:
kubectl apply -f https://github.com/huaweicloud/huaweicloud-csi-driver/blob/master/deploy/obs-csi-plugin.yaml
2. 创建Secret存储AK/SK
apiVersion: v1
kind: Secret
metadata:
name: obs-secret
type: Opaque
data:
accessKey: BASE64_ENCODED_AK
secretKey: BASE64_ENCODED_SK
3. 创建StorageClass
obs-storageclass.yaml:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: obs-csi
provisioner: obs.csi.huaweicloud.com
parameters:
csi.storage.k8s.io/node-publish-secret-name: obs-secret
csi.storage.k8s.io/node-publish-secret-namespace: default
4. 修改MinIO部署
在Deployment中替换存储配置:
volumes:
- name: storage
persistentVolumeClaim:
claimName: obs-pvc # 需创建对应的OBS PVC
注意:
- NFS方案适合通用环境,OBS需云平台支持
- 生产环境建议:
- 使用Secret管理敏感凭证
- 启用TLS加密
- 配置资源请求/限制
- 设置持久卷回收策略
验证存储:
kubectl exec -it minio-pod -- ls /storage # 查看挂载点