Introduction

Install Minikube

Minikube runs inside a VM

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: springboot-app
  template:
    metadata:
      labels:
        app: springboot-app
    spec:
      containers:
        - name: app
          image: minhen/springboot-app:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8088
          env:
            - name: SPRING_PROFILES_ACTIVE
              value: prod
            - name: SPRING_DATASOURCE_URL
              value: jdbc:postgresql://**host.docker.internal**:5435/mhpractice
            - name: SPRING_DATASOURCE_USERNAME
              value: minhen
            - name: SPRING_DATASOURCE_PASSWORD
              value: minhen
            - name: SPRING_DATA_REDIS_HOST
              value: **host.docker.internal**
            - name: SPRING_DATA_REDIS_PORT
              value: "6380"
            - name: SPRING_KAFKA_BOOTSTRAP_SERVERS
              value: host.docker.internal:9092
            - name: SPRING_KAFKA_CONSUMER_GROUP_ID
              value: wallet-service-group
            - name: JWT_SECRET
              value: dG9wLXNlY3JldC1rZXktZm9yLWp3dC1zaWduaW5nLTI1Ni1iaXQ=
            - name: JWT_ENCRYPTION_KEY
              value: MTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTI=
            - name: SPRING_MAIL_HOST
              value: **host.docker.internal**
            - name: SPRING_MAIL_PORT
              value: "1026"

Use Minikube + kubectl

  1. Start Minikube (start the vm that act as Kubernetes cluster):

    minikube start
    
  2. Load the app image in Minikube

    1. Since Minikube is separated (doesn't share a hard drive with local machine).
    2. Copy springboot-app:1.0 Docker image (contains whole app jar and Java runtime) from local machine into Minikube's internal hard drive.
    3. So the cluster can access it later.
    minikube image load springboot-app:1.0