Commit 0cc7e257 authored by Prout, Ryan's avatar Prout, Ryan
Browse files

change from NodePort to ClusterIP and update README

parent 1376ce25
Loading
Loading
Loading
Loading
+103 −3
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ In the following we will look at the files of our Minio Standalone application/c

### The Persistent Volume Claim

Minio needs persistent storage to store objects. Without persistent storage, the data stored in an application instance will be stored in the container file system, which will be destroyed as soon as the container restarts. This is true for any application needing to persist data on Slate. So, to persist data in your application use a persistent volume claim, or "PVC".
Minio needs persistent storage to store objects. The idea of persistent data applies to many data applictions, so this fundemental piece is applicable in many scenarios. Without persistent storage, the data stored in an application instance will be stored in the container file system, which will be destroyed as soon as the container restarts. This is true for any application needing to persist data on Slate. So, to persist data in your application use a persistent volume claim, or "PVC".

The file we use to do this is [minio-standalone-pvc.yaml](https://code.ornl.gov/ryu/slate_helm_examples/-/blob/prout-dev/charts/minio-standalone/templates/minio-standalone-pvc.yaml): 

@@ -54,8 +54,108 @@ spec:
```
### The Deployment

A deployment encapsulates [ReplicaSets](https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/) and [Pods](https://kubernetes.io/docs/concepts/workloads/pods/pod/). If a pod goes down, the replication controller makes sure another pod comes up automatically. This creates the ability to handle pod failures automatically, without you having to worry about them, enabliing stable applications and services.

The file we use to do this is [minio-standaline-deployment.yaml](https://code.ornl.gov/ryu/slate_helm_examples/-/blob/prout-dev/charts/minio-standalone/templates/minio-standalone-deployment.yaml):

```
apiVersion: apps/v1
kind: Deployment
metadata:
  # This name uniquely identifies the Deployment
  name: minio-standalone
spec:
  selector:
    matchLabels:
      app: minio-standalone # has to match .spec.template.metadata.labels
  strategy:
    # Specifies the strategy used to replace old Pods by new ones
    # Refer: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
    type: Recreate
  template:
    metadata:
      labels:
        # This label is used as a selector in Service definition
        app: minio-standalone
    spec:
      # Volumes used by this deployment
      volumes:
      - name: data
        # This volume is based on PVC
        persistentVolumeClaim:
          # Name of the PVC created earlier
          claimName: minio-standalone-pv-claim
      containers:
      - name: minio
        # Volume mounts for this container
        volumeMounts:
        # Volume 'data' is mounted to path '/data'
        - name: data 
          mountPath: "/data"
        # Pulls the lastest Minio image from Docker Hub
        image: minio/minio:RELEASE.2020-05-08T02-40-49Z
        args:
        - server
        - /data
        env:
        # MinIO access key and secret key
        - name: MINIO_ACCESS_KEY
          valueFrom:
            secretKeyRef:
              key: SECRET_TOKEN
              name: minio-standalone-access-key
        - name: MINIO_SECRET_KEY
          valueFrom:
            secretKeyRef:
              key: SECRET_TOKEN
              name: minio-standalone-secret-key 
        ports:
        - containerPort: 9000
        # Readiness probe detects situations when MinIO server instance
        # is not ready to accept traffic. Kubernetes doesn't forward
        # traffic to the pod while readiness checks fail.
        readinessProbe:
          httpGet:
            path: /minio/health/ready
            port: 9000
          initialDelaySeconds: 120
          periodSeconds: 20
        # Liveness probe detects situations where MinIO server instance
        # is not working properly and needs restart. Kubernetes automatically
        # restarts the pods if liveness checks fail.
        livenessProbe:
          httpGet:
            path: /minio/health/live
            port: 9000
          initialDelaySeconds: 120
          periodSeconds: 20
```
### The Service

### The Network Policy
A service allows us to expose our deployment externally. There are three major service types - the default is ClusterIP, which exposes a service to connection from inside the cluster. The NodePort and LoadBalancer types enable the ability to expose services to external traffic directly.

In this example we use the ClusterIP type in our [minio-standalone-service.yaml](https://code.ornl.gov/ryu/slate_helm_examples/-/blob/prout-dev/charts/minio-standalone/templates/minio-standalone-service.yaml):

```
apiVersion: v1
kind: Service
metadata:
  # This name uniquely identifies the service
  name: minio-standalone-service
  labels:
    app: minio-standalone
spec:
  type: ClusterIP
  ports:
    - name: 9000-tcp
      port: 9000
      targetPort: 9000
      protocol: TCP
  selector:
    # Looks for labels `app:minio-standalone` in the namespace and applies the spec
    app: minio-standalone
```

### The Route

### The Network Policy
 No newline at end of file
+8 −1
Original line number Diff line number Diff line
@@ -48,6 +48,13 @@ spec:
            secretKeyRef:
              key: SECRET_TOKEN
              name: minio-standalone-secret-key
        resources:
          limits:
            cpu: 1
            memory: 1Gi
          requests:
            cpu: 1
            memory: 1Gi
        ports:
        - containerPort: 9000
        # Readiness probe detects situations when MinIO server instance
+1 −1
Original line number Diff line number Diff line
@@ -6,7 +6,7 @@ metadata:
  labels:
    app: minio-standalone
spec:
  type: NodePort
  type: ClusterIP
  ports:
    - name: 9000-tcp
      port: 9000