以下是一个使用Ansible playbook在Kubernetes上安装Minio的示例:
---
- name: Deploy Minio on Kubernetes using Helm
hosts: k8s_cluster
become: true
vars:
minio_namespace: default # 定义Minio部署的namespace名称
minio_release_name: my-minio # 定义Helm release名称
storage_class_name: nfs # 指定要使用的存储类别名称
pvc_name: minio-pvc # 定义PVC名称
pv_name: minio-pv # 定义PV名称
tasks:
- name: Create PV for Minio data storage
k8s:
state: present
kind: PersistentVolume
api_version: v1
definition:
apiVersion: v1
kind: PersistentVolume
metadata:
name: "{{ pv_name }}"
spec:
capacity:
storage: "10Gi"
accessModes:
- ReadWriteMany
nfs:
path: /mnt/data/minio
server: x.x.x.x # 替换为您NFS服务器IP地址
persistentVolumeReclaimPolicy : Retain
- name: Create PVC for Minio data storage
k8s:
state: present
namespace : "{{ minio_namespace }}"
kind : PersistentVolumeClaim
definition :
apiVersion : v1
kind : PersistentVolumeClaim
metadata :
name : "{{ pvc_name }}"
spec :
accessModes :
- ReadWriteMany
resources :
requests :
storage : "10Gi"
selector :
matchLabels :
app : my-minio
- name: Install Minio using Helm chart
helm:
name: "{{ minio_release_name }}"
chart_repo: minio/minio
release_namespace: "{{ minio_namespace }}"
chart_version: 9.0.2
state: present
values_files : "minio_values.yaml"
wait : yes
- name: Configure Minio access policy
k8s:
state : present
namespace : "{{ minio_namespace }}"
definition :
apiVersion: v1
kind: ConfigMap
metadata:
name: my-minio-policy
data:
read_only.json: |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectAcl",
"s3:GetObjectVersion",
"s3:GetObjectTagging"
],
"Resource": [
"arn:aws:s3:::*/*"
]
}
]
}
read_write.json: |
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": [
"*"
]
}
]
}
- name : Attach the policy to MinIO buckets
k8s_raw:
state : present
resource_definition :
apiVersion : v1
kind : ConfigMap
metadata :
name : my-minio-policy-map-buckets
namespace : "{{ minio_namespace }}"
data :
policies.json |-
[{"bucket":"mybucket","policyReadOnlyPath":"/tmp/read_only.json","policyReadWritePath":"/tmp/read_write.json"}]
说明:
- 该playbook中定义了以下变量:
minio_namespace(Minio部署的namespace名称)、minio_release_name(Helm release名称)、storage_class_name(要使用的存储类别名称)、pvc_name(PVC名称)和pv_name(PV名称)。 - playbook中先创建一个名为“minio-pv”的PersistentVolume,然后创建一个名为“minio-pvc”的PersistentVolumeClaim,并将其绑定到指定的PV上。
- 使用Helm安装Minio。在这里,我们使用了values.yaml文件来配置Minio Helm chart。如果需要自定义值,请修改此文件并将其保存为“minio_values.yaml”。
- playbook还配置了Minio访问策略,并将其附加到名为“mybucket”的桶上。
请注意,在运行该playbook之前,请确保您的Kubernetes集群已经正常运行并且已正确设置PV/PVC。




