To install microk8s, run
sudo snap install microk8s --classic
Enable rules in firewall
sudo ufw allow in on cni0 sudo ufw allow out on cni0 sudo ufw default allow routed
Enable addons
microk8s enable dns dashboard storage
To see status of current addons, run
microk8s status
Here is status for a defaul install
root@ip-172-26-0-217:~# microk8s status microk8s is running high-availability: no datastore master nodes: 127.0.0.1:19001 datastore standby nodes: none addons: enabled: ha-cluster # Configure high availability on the current node disabled: ambassador # Ambassador API Gateway and Ingress cilium # SDN, fast with full network policy dashboard # The Kubernetes dashboard dns # CoreDNS fluentd # Elasticsearch-Fluentd-Kibana logging and monitoring gpu # Automatic enablement of Nvidia CUDA helm # Helm 2 - the package manager for Kubernetes helm3 # Helm 3 - Kubernetes package manager host-access # Allow Pods connecting to Host services smoothly ingress # Ingress controller for external access istio # Core Istio service mesh services jaeger # Kubernetes Jaeger operator with its simple config keda # Kubernetes-based Event Driven Autoscaling knative # The Knative framework on Kubernetes. kubeflow # Kubeflow for easy ML deployments linkerd # Linkerd is a service mesh for Kubernetes and other frameworks metallb # Loadbalancer for your Kubernetes cluster metrics-server # K8s Metrics Server for API access to service metrics multus # Multus CNI enables attaching multiple network interfaces to pods portainer # Portainer UI for your Kubernetes cluster prometheus # Prometheus operator for monitoring and logging rbac # Role-Based Access Control for authorisation registry # Private image registry exposed on localhost:32000 storage # Storage class; allocates storage from host directory traefik # traefik Ingress controller for external access root@ip-172-26-0-217:~#
To see all pods/services/deploymens, run
microk8s kubectl get all --all-namespaces
To avoid typing microk8s before kubectl, run
alias kubectl="microk8s kubectl"
You can add this to .bashrc to make it permanent.
To run an nginx container
root@ip-172-26-0-217:~# microk8s kubectl create deployment nginx --image=nginx:latest deployment.apps/nginx created root@ip-172-26-0-217:~# microk8s kubectl get pods NAME READY STATUS RESTARTS AGE nginx-55649fd747-xngk5 1/1 Running 0 106s root@ip-172-26-0-217:~#
To expose the nginx deployment to public, run
kubectl expose deployment nginx --port 80 --target-port 80 --type ClusterIP --name nginx --external-ip 172.26.0.217
Here –external-ip 172.26.0.217 is IP of the node. In this case, it is internal IP of Amazon ec2 sevrer (eth0 IP).
The above expose command create a service
root@ip-172-26-0-217:~# kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1443/TCP 45m nginx ClusterIP 10.152.183.11 172.26.0.217 80/TCP 8s root@ip-172-26-0-217:~#
To undo the expose command, you need to delete the service with name nginx.
root@ip-172-26-0-217:~# kubectl delete services nginx service "nginx" deleted root@ip-172-26-0-217:~#
See Kubernetes