All pages
Powered by GitBook
1 of 1

Loading...

05. Deploy demo app with persistence volume and publish app via ingress controller

Overview

Step-by-step guide on how to deploy demo application on HI GIO Kubernetes

  • Install nginx ingress controller to your Kubernetes cluster. Installing the nginx ingress controller will auto-create 2 Virtual services (80, 443) in HI GIO LB.

  • Deploy demo app with persistence volume into the Kubernetes cluster and publish app via ingress nginx

Procedure

1. Pre-requisites:

  • Helm (v3 or higher)

  • Make sure there is at least 1 available public IP

  • Have a default Storage Class

  • Permission for access to your Kubernetes cluster

2. Procedure:

1

Step 1: Install nginx ingress controller to your Kubernetes cluster

  • Verify pod status is Running and service ingress-nginx-controller successfully obtained an EXTERNAL IP

2

Step 2: Deploy demo app with persistence volume into the Kubernetes cluster and publish app via ingress nginx

  • Demo app folder structure

demoapp 
├── 01-demoapp-namespace.yaml
├── 02-demoapp-pvc.yaml
├── 03-demoapp-deployment.yaml
├── 04-demoapp-service.yaml
└── 05-demoapp-ingress.yaml
  • Create file 01-demoapp-namespace.yaml to create demoapp namespace

apiVersion: v1
kind: Namespace
metadata:
  name: demoapp
  • Create file 02-demoapp-pvc.yaml to create a Persistence Volume Claim

  • Create file 03-demoapp-deployment.yaml to create the demoapp deployment

  • Create file 04-demoapp-service.yaml to create demoapp service

  • Create file 05-demoapp-ingress.yaml to create demoapp ingress

  • Apply all manifests

  • Create a DNS record for demoapp

  • If all the configuration is correct, you can access your app with the domain http://<ingress-host>

#Add repo ingress-nginx
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx 
helm repo update ingress-nginx
#Install ingress nginx
helm install ingress-nginx ingress-nginx/ingress-nginx \
		--namespace ingress-nginx \
		--set controller.service.appProtocol=false \
		--create-namespace
kubectl get all -n ingress-nginx

CNI driver on Kubernetes automatically creates Virtual services on HI GIO LB and 2 DNAT rules (80, 443) on vCD.

Please modify the VPC firewall to allow access to the ingress virtual services. This provides access to your application published via the nginx ingress

Ref

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: demoapp-pvc
  namespace: demoapp
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: default-storage-class-1 #adjust to use your storage class
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demoapp
  namespace: demoapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demoapp
  template:
    metadata:
      labels:
        app: demoapp
    spec:
      containers:
      - name: demoapp
        image: paulbouwer/hello-kubernetes:1.8
        ports:
        - containerPort: 8080
        volumeMounts:
        - mountPath: /data
          name: demoapp-storage
      volumes:
      - name: demoapp-storage
        persistentVolumeClaim:
          claimName: demoapp-pvc
apiVersion: v1
kind: Service
metadata:
  name: demoapp
  namespace: demoapp
spec:
  type: ClusterIP
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: demoapp
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demoapp-ingress
  namespace: demoapp
spec:
  ingressClassName: nginx
  rules:
  - host: demoapp.cloud.net.vn #adjust to use your domain
    http:
      paths:
      - backend:
          service:
            name: demoapp
            port:
              number: 80
        path: /
        pathType: Prefix
cd demoapp
kubectl apply -f .
Name: <ingress-host>
Address: 42.113.xx.xx (EXTERNAL-IP of ingress nginx)
Using Edge Gateway firewall