Easy Kubernetes setup on Ubuntu with microk8s

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.1             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.

root@ip-172-26-0-217:~# kubectl delete services nginx
service "nginx" deleted
root@ip-172-26-0-217:~# 

See Kubernetes

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *