{"id":13481359,"url":"https://github.com/minio/operator","last_synced_at":"2025-10-23T02:35:52.949Z","repository":{"id":36970235,"uuid":"154578184","full_name":"minio/operator","owner":"minio","description":"Simple Kubernetes Operator for MinIO clusters :computer:","archived":false,"fork":false,"pushed_at":"2025-05-06T02:29:00.000Z","size":50233,"stargazers_count":1292,"open_issues_count":53,"forks_count":470,"subscribers_count":36,"default_branch":"master","last_synced_at":"2025-05-12T05:42:44.023Z","etag":null,"topics":["k8s","kubernetes","minio","storage"],"latest_commit_sha":null,"homepage":"https://min.io/docs/minio/kubernetes/upstream/index.html","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/minio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-10-24T22:40:09.000Z","updated_at":"2025-05-11T16:24:12.000Z","dependencies_parsed_at":"2023-09-28T04:11:07.954Z","dependency_job_id":"40bbc962-e5ba-4df1-8d4e-7ceea38be996","html_url":"https://github.com/minio/operator","commit_stats":{"total_commits":1370,"total_committers":141,"mean_commits":9.71631205673759,"dds":0.8175182481751825,"last_synced_commit":"c28fcf820378eb1cf7be0019b1412957cd3b8ec5"},"previous_names":["minio/minio-operator"],"tags_count":160,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minio%2Foperator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minio%2Foperator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minio%2Foperator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minio%2Foperator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/minio","download_url":"https://codeload.github.com/minio/operator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253692203,"owners_count":21948312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["k8s","kubernetes","minio","storage"],"created_at":"2024-07-31T17:00:51.171Z","updated_at":"2025-10-23T02:35:52.943Z","avatar_url":"https://github.com/minio.png","language":"Go","funding_links":[],"categories":["Go","kubernetes","HarmonyOS","operator候选列表"],"sub_categories":["Windows Manager","部署类型"],"readme":"# MinIO Operator\n\n[![build](https://img.shields.io/badge/build-passing-green.svg)](https://github.com/minio/operator/actions) [![license](https://img.shields.io/badge/license-AGPL%20V3-blue)](https://github.com/minio/operator/blob/master/LICENSE)\n\n[![MinIO](https://raw.githubusercontent.com/minio/minio/master/.github/logo.svg?sanitize=true)](https://min.io)\n\nMinIO is a Kubernetes-native high performance object store with an S3-compatible API. The\nMinIO Kubernetes Operator supports deploying MinIO Tenants onto private and public\ncloud infrastructures (\"Hybrid\" Cloud).\n\nThis README provides a high level description of the MinIO Operator and\nquickstart instructions. See https://min.io/docs/minio/kubernetes/upstream/index.html for\ncomplete documentation on the MinIO Operator.\n\n## Table of Contents\n\n* [Architecture](#architecture)\n* [Deploy the MinIO Operator and Create a Tenant](#deploy-the-minio-operator-and-create-a-tenant)\n    * [Prerequisites](#prerequisites)\n    * [Procedure](#procedure)\n\n# Architecture\n\nEach MinIO Tenant represents an independent MinIO Object Store within\nthe Kubernetes cluster. The following diagram describes the architecture of a\nMinIO Tenant deployed into Kubernetes:\n\n![Tenant Architecture](docs/images/architecture.png)\n\nMinIO provides multiple methods for accessing and managing the MinIO Tenant:\n\n# Deploy the MinIO Operator and Create a Tenant\n\nThis procedure installs the MinIO Operator and creates a 4-node MinIO Tenant for supporting object storage operations in\na Kubernetes cluster.\n\n## Prerequisites\n\n### Kubernetes 1.30.0 or Later\n\nStarting with Operator v7.1.1, MinIO requires Kubernetes version 1.30.0 or later.\n\nThis procedure assumes the host machine has [`kubectl`](https://kubernetes.io/docs/tasks/tools) installed and configured\nwith access to the target Kubernetes cluster.\n\n### MinIO Tenant Namespace\n\nMinIO supports no more than *one* MinIO Tenant per Namespace. The following `kubectl` command creates a new namespace\nfor the MinIO Tenant.\n\n```sh\nkubectl create namespace minio-tenant\n```\n\n### Tenant Storage Class\n\nThe MinIO Kubernetes Operator automatically generates Persistent Volume Claims (`PVC`) as part of deploying a MinIO\nTenant.\n\nThe plugin defaults to creating each `PVC` with the `default`\nKubernetes [`Storage Class`](https://kubernetes.io/docs/concepts/storage/storage-classes/). If the `default` storage\nclass cannot support the generated `PVC`, the tenant may fail to deploy.\n\nMinIO Tenants *require* that the `StorageClass` sets `volumeBindingMode` to `WaitForFirstConsumer`. The\ndefault `StorageClass` may use the `Immediate` setting, which can cause complications during `PVC` binding. MinIO\nstrongly recommends creating a custom `StorageClass` for use by `PV` supporting a MinIO Tenant.\n\nThe following `StorageClass` object contains the appropriate fields for supporting a MinIO Tenant using\n[MinIO DirectPV-managed drives](https://github.com/minio/directpv):\n\n```yaml\napiVersion: storage.k8s.io/v1\nkind: StorageClass\nmetadata:\n  name: directpv-min-io\nprovisioner: kubernetes.io/no-provisioner\nvolumeBindingMode: WaitForFirstConsumer\n```\n\n### Tenant Persistent Volumes\n\nThe MinIO Operator generates one Persistent Volume Claim (PVC) for each volume in the tenant *plus* two PVC to support\ncollecting Tenant Metrics and logs. The cluster *must* have\nsufficient [Persistent Volumes](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) that meet the capacity\nrequirements of each PVC for the tenant to start correctly. For example, deploying a Tenant with 16 volumes requires\n18 (16 + 2). If each PVC requests 1TB capacity, then each PV must also provide *at least* 1TB of capacity.\n\nMinIO recommends using the [MinIO DirectPV Driver](https://github.com/minio/directpv) to automatically provision\nPersistent Volumes from locally attached drives. This procedure assumes MinIO DirectPV is installed and configured.\n\nFor clusters which cannot deploy MinIO DirectPV,\nuse [Local Persistent Volumes](https://kubernetes.io/docs/concepts/storage/volumes/#local). The following example YAML\ndescribes a local persistent volume:\n\nThe following YAML describes a `local` PV:\n\n```yaml\napiVersion: v1\nkind: PersistentVolume\nmetadata:\n  name: \u003cPV-NAME\u003e\nspec:\n  capacity:\n    storage: 1Ti\n  volumeMode: Filesystem\n  accessModes:\n    - ReadWriteOnce\n  persistentVolumeReclaimPolicy: Retain\n  storageClassName: local-storage\n  local:\n    path: \u003c/mnt/disks/ssd1\u003e\n  nodeAffinity:\n    required:\n      nodeSelectorTerms:\n        - matchExpressions:\n            - key: kubernetes.io/hostname\n              operator: In\n              values:\n                - \u003cNODE-NAME\u003e\n```\n\nReplace values in brackets `\u003cVALUE\u003e` with the appropriate value for the local drive.\n\nYou can estimate the number of PVC by multiplying the number of `minio` server pods in the Tenant by the number of\ndrives per node. For example, a 4-node Tenant with 4 drives per node requires 16 PVC and therefore 16 PV.\n\nMinIO *strongly recommends* using the following CSI drivers for creating local PV to ensure best object storage\nperformance:\n\n- [MinIO DirectPV](https://github.com/minio/directpv)\n- [Local Persistent Volume](https://kubernetes.io/docs/concepts/storage/volumes/#local)\n\n## Procedure\n\n### 1) Install the MinIO Operator via Kustomization\n\nThe standard `kubectl` tool ships with support\nfor [kustomize](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/) out of the box, so you can\nuse that to install MiniO Operator.\n\n```sh\nkubectl kustomize github.com/minio/operator\\?ref=v7.1.1 | kubectl apply -f -\n```\n\nRun the following command to verify the status of the Operator:\n\n```sh\nkubectl get pods -n minio-operator\n```\n\nThe output resembles the following:\n\n```sh\nNAME                              READY   STATUS    RESTARTS   AGE\nminio-operator-69fd675557-lsrqg   1/1     Running   0          99s\n```\n\n### 2) Build the Tenant Configuration\n\nWe provide a variety of examples for creating MinIO Tenants in the `examples` directory. The following example creates a\n4-node MinIO Tenant with 4 volumes per node:\n\n```yaml\nkubectl apply -k github.com/minio/operator/examples/kustomization/base\n```\n\n### 3) Connect to the Tenant\n\nUse the following command to list the services created by the MinIO\nOperator:\n\n```sh\nkubectl get svc -n NAMESPACE\n```\n\nReplace `NAMESPACE` with the namespace for the MinIO Tenant. The output\nresembles the following:\n\n```sh\nNAME                             TYPE            CLUSTER-IP        EXTERNAL-IP   PORT(S)      \nminio                            LoadBalancer    10.104.10.9       \u003cpending\u003e     443:31834/TCP\nmyminio-console           LoadBalancer    10.104.216.5      \u003cpending\u003e     9443:31425/TCP\nmyminio-hl                ClusterIP       None              \u003cnone\u003e        9000/TCP\n```\n\nApplications *internal* to the Kubernetes cluster should use the `minio` service for performing object storage\noperations on the Tenant.\n\nAdministrators of the Tenant should use the `minio-tenant-1-console` service to access the MinIO Console and manage the\nTenant, such as provisioning users, groups, and policies for the Tenant.\n\nMinIO Tenants deploy with TLS enabled by default, where the MinIO Operator uses the\nKubernetes `certificates.k8s.io` API to generate the required x.509 certificates. Each\ncertificate is signed using the Kubernetes Certificate Authority (CA) configured during\ncluster deployment. While Kubernetes mounts this CA on Pods in the cluster, Pods do\n*not* trust that CA by default. You must copy the CA to a directory such that the\n`update-ca-certificates` utility can find and add it to the system trust store to\nenable validation of MinIO TLS certificates:\n\n```sh\n\ncp /var/run/secrets/kubernetes.io/serviceaccount/ca.crt /usr/local/share/ca-certificates/\nupdate-ca-certificates\n```\n\nFor applications *external* to the Kubernetes cluster, you must configure\n[Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/) or a\n[Load Balancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer) to\nexpose the MinIO Tenant services. Alternatively, you can use the `kubectl port-forward` command\nto temporarily forward traffic from the local host to the MinIO Tenant.\n\n# License\n\nUse of MinIO Operator is governed by the GNU AGPLv3 or later, found in the [LICENSE](./LICENSE) file.\n\n# Explore Further\n\n[MinIO Hybrid Cloud Storage Documentation](https://min.io/docs/minio/kubernetes/upstream/index.html)\n\n- [Deploy MinIO Operator on Kubernetes](https://min.io/docs/minio/kubernetes/upstream/operations/installation.html)\n- [Deploy a MinIO Tenant using the MinIO Plugin](https://min.io/docs/minio/kubernetes/upstream/operations/install-deploy-manage/deploy-minio-tenant.html)\n- [Configure TLS/SSL for MinIO Tenants](https://min.io/docs/minio/kubernetes/upstream/operations/network-encryption.html)\n\n[Github Resources](https://github.com/minio/operator/blob/master/docs/)\n\n- [Examples for MinIO Tenant Settings](https://github.com/minio/operator/blob/master/docs/examples.md)\n- [Custom Hostname Discovery](https://github.com/minio/operator/blob/master/docs/custom-name-templates.md)\n- [Apply PodSecurityPolicy](https://github.com/minio/operator/blob/master/docs/pod-security-policy.md)\n- [Deploy MinIO Tenant with KES](https://github.com/minio/operator/blob/master/docs/kes.md)\n- [Tenant API Documentation](docs/tenant_crd.adoc)\n- [Policy Binding API Documentation](docs/policybinding_crd.adoc)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminio%2Foperator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fminio%2Foperator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminio%2Foperator/lists"}