Tag: microk8s

  • Easy Kubernetes setup on Ubuntu with microk8s

    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