apiVersion: v1 kind: Service metadata: # This service is meant to be used by clients of the object store. It exposes a ClusterIP that will # automatically load balance connections to the different database pods. name: minio-public labels: app: minio spec: ports: - port: 9000 targetPort: 9000 selector: app: minio --- apiVersion: v1 kind: Service metadata: # This service only exists to create DNS entries for each pod in the stateful # set such that they can resolve each other's IP addresses. It does not # create a load-balanced ClusterIP and should not be used directly by clients # in most circumstances. name: minio labels: app: minio spec: ports: - port: 9000 targetPort: 9000 clusterIP: None selector: app: minio --- apiVersion: apps/v1beta1 kind: StatefulSet metadata: name: minio spec: serviceName: "minio" replicas: 4 template: metadata: labels: app: minio spec: volumes: - name: data persistentVolumeClaim: claimName: data-minio containers: - name: minio env: - name: MINIO_ACCESS_KEY value: "minio" - name: MINIO_SECRET_KEY value: "minio123" image: minio/minio:RELEASE.2018-09-12T18-49-56Z imagePullPolicy: IfNotPresent args: ["server", "http://minio-0.minio.default.svc.cluster.local/data", "http://minio-1.minio.default.svc.cluster.local/data", "http://minio-2.minio.default.svc.cluster.local/data", "http://minio-3.minio.default.svc.cluster.local/data"] ports: - containerPort: 9000 # These volume mounts are persistent. Each pod in the PetSet # gets a volume mounted based on this field. volumeMounts: - name: data mountPath: /data # These are converted to volume claims by the controller # and mounted at the paths mentioned above. volumeClaimTemplates: - metadata: name: data annotations: volume.alpha.kubernetes.io/storage-class: anything spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 2Gi