What you’ll need
- 2 CPUs or more
- 2GB of free memory
- 20GB of free disk space
- Internet connection
- Container or virtual machine manager, such as: Docker, QEMU, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation
Step 1:
- To install the latest minikube stable release on x86-64 Linux using binary download:
- curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
- sudo install minikube-linux-amd64 /usr/local/bin/minikube
Step 2:
- Start your cluster From a terminal with administrator access (but not logged in as root), run:
- minikube start
Step 3: Interact with your cluster
- If you already have kubectl installed, you can now use it to access your shiny new cluster:
- kubectl get po -A
- Alternatively, minikube can download the appropriate version of kubectl and you should be able to use it like this:
- minikube kubectl — get po -A
- You can also make your life easier by adding the following to your shell config:
- alias kubectl=”minikube kubectl –“
- Initially, some services such as the storage-provisioner, may not yet be in a Running state. This is a normal condition during cluster bring-up, and will resolve itself momentarily. For additional insight into your cluster state, minikube bundles the Kubernetes Dashboard, allowing you to get easily acclimated to your new environment:
- minikube dashboard
Step 4: Deploy application & Expose through “Service”
- Create a sample deployment and expose it on port 8080:
- kubectl create deployment hello-minikube –image=kicbase/echo-server:1.0
- kubectl expose deployment hello-minikube –type=NodePort –port=8080
- It may take a moment, but your deployment will soon show up when you run:
- kubectl get services hello-minikube
- The easiest way to access this service is to let minikube launch a web browser for you:
- minikube service hello-minikube
- Alternatively, use kubectl to forward the port:
- kubectl port-forward service/hello-minikube 7080:8080
- Tada! Your application is now available at http://localhost:7080/.
- You should be able to see the request metadata in the application output. Try changing the path of the request and observe the changes. Similarly, you can do a POST request and observe the body show up in the output.
Step 5: Deploy application & Expose through “LoadBalancer”
- To access a LoadBalancer deployment, use the “minikube tunnel” command. Here is an example deployment:
- kubectl create deployment balanced –image=kicbase/echo-server:1.0
- kubectl expose deployment balanced –type=LoadBalancer –port=8080
- In another window, start the tunnel to create a routable IP for the ‘balanced’ deployment:
- minikube tunnel
- To find the routable IP, run this command and examine the EXTERNAL-IP column:
- kubectl get services balanced
- Your deployment is now available at :8080
Step 6: Deploy application & Expose through “Ingress“
- Enable ingress addon:
- minikube addons enable ingress
- The following example creates simple echo-server services and an Ingress object to route to these services.
kind: Pod
apiVersion: v1
metadata:
name: foo-app
labels:
app: foo
spec:
containers:
- name: foo-app
image: 'kicbase/echo-server:1.0'
---
kind: Service
apiVersion: v1
metadata:
name: foo-service
spec:
selector:
app: foo
ports:
- port: 8080
---
kind: Pod
apiVersion: v1
metadata:
name: bar-app
labels:
app: bar
spec:
containers:
- name: bar-app
image: 'kicbase/echo-server:1.0'
---
kind: Service
apiVersion: v1
metadata:
name: bar-service
spec:
selector:
app: bar
ports:
- port: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /foo
backend:
service:
name: foo-service
port:
number: 8080
- pathType: Prefix
path: /bar
backend:
service:
name: bar-service
port:
number: 8080
---
- Apply the contents
- kubectl apply -f https://storage.googleapis.com/minikube-site-examples/ingress-example.yaml
- Wait for ingress address
- kubectl get ingress
kubectl get ingress NAME CLASS HOSTS ADDRESS PORTS AGE example-ingress nginx * <your_ip_here> 80 5m45s Note for Docker Desktop Users: To get ingress to work you’ll need to open a new terminal window and run minikube tunnel and in the following step use 127.0.0.1 in place of <ip_from_above>. Now verify that the ingress works $ curl <ip_from_above>/foo Request served by foo-app ... $ curl <ip_from_above>/bar Request served by bar-app ...
Step 7: Manage your cluster
Pause Kubernetes without impacting deployed applications:
minikube pause
Copy
Unpause a paused instance:
minikube unpause
Halt the cluster:
minikube stop
Change the default memory limit (requires a restart):
minikube config set memory 9001
Browse the catalog of easily installed Kubernetes services:
minikube addons list
Create a second cluster running an older Kubernetes release:
minikube start -p aged --kubernetes-version=v1.16.1
Delete all of the minikube clusters:
minikube delete --all