Easy Kubernetes setup on Ubuntu with microk8s
To install microk8s, run
1 |
sudo snap install microk8s --classic |
Enable rules in firewall
1 2 3 |
sudo ufw allow in on cni0 sudo ufw allow out on cni0 sudo ufw default allow routed |
Enable addons
1 |
microk8s enable dns dashboard storage |
To see status of current addons, run
1 |
microk8s status |
Here is status for a defaul install
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
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
1 |
microk8s kubectl get all --all-namespaces |
To avoid typing microk8s before kubectl, run
1 |
alias kubectl="microk8s kubectl" |
You can add this to .bashrc to make it permanent.
To run an nginx container
1 2 3 4 5 6 |
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
1 |
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
1 2 3 4 5 |
root@ip-172-26-0-217:~# kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.152.183.1 <none> 443/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.
1 2 3 |
root@ip-172-26-0-217:~# kubectl delete services nginx service "nginx" deleted root@ip-172-26-0-217:~# |
See Kubernetes