Skip to content

Kubernetes development with microk8s

wordpress meta

title: 'Kubernetes Development with MicroK8s'
date: '2020-05-27T15:56:36-05:00'
status: publish
permalink: /kubernetes-development-with-microk8s
author: admin
excerpt: ''
type: post
id: 1657
category:
    - Kubernetes
    - microk8s
tag: []
post_format: []
ct_author_last_updated:


Using Ubuntu's MicroK8s Kubernetes environment to test a Nginx container with a NodePort and also Ingress so we can access from another machine.

install

```bash $ sudo snap install microk8s --classic microk8s v1.18.2 from Canonical✓ installed

$ sudo usermod -a -G microk8s rrosso

$ microk8s.kubectl get all --all-namespaces NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.152.183.1 443/TCP 2m29s

$ microk8s.kubectl get nodes NAME STATUS ROLES AGE VERSION server1 Ready 3m v1.18.2-41+b5cdb79a4060a3

$ microk8s.enable dns dashboard ...

$ watch microk8s.kubectl get all --all-namespaces ````

NOTE: alias the command

```bash $ sudo snap alias microk8s.kubectl kubectl Added: - microk8s.kubectl as kubectl ````

nginx first attempt

```bash $ kubectl create deployment nginx --image=nginx deployment.apps/nginx created

$ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 9s

$ kubectl get pods NAME READY STATUS RESTARTS AGE

nginx-f89759699-jnlng 1/1 Running 0 15s

$ kubectl get all --all-namespaces

NAMESPACE NAME READY STATUS RESTARTS AGE default pod/nginx-f89759699-jnlng 1/1 Running 0 31s ... NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default service/kubernetes ClusterIP 10.152.183.1 443/TCP 94m ... NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE default deployment.apps/nginx 1/1 1 1 31s kube-system deployment.apps/coredns 1/1 1 1 90m ...

NAMESPACE NAME DESIRED CURRENT READY AGE default replicaset.apps/nginx-f89759699 1 1 1 31s kube-system replicaset.apps/coredns-588fd544bf 1 1 1 90m ...

$ kubectl get all --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default pod/nginx-f89759699-jnlng 1/1 Running 0 2m38s ... NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ... NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE default deployment.apps/nginx 1/1 1 1 2m38s

NAMESPACE NAME DESIRED CURRENT READY AGE default replicaset.apps/nginx-f89759699 1 1 1 2m38s ...

$ wget 10.152.183.151 --2020-05-25 14:26:14-- http://10.152.183.151/ Connecting to 10.152.183.151:80... connected. HTTP request sent, awaiting response... 404 Not Found 2020-05-25 14:26:14 ERROR 404: Not Found.

$ kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 3m40s

$ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-f89759699-jnlng 1/1 Running 0 3m46s

$ microk8s.kubectl expose deployment nginx --port 80 --target-port 80 --type ClusterIP --selector=run=nginx --name nginx service/nginx exposed

$ microk8s.kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-f89759699-jnlng 1/1 Running 0 9m29s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.152.183.1 443/TCP 103m service/nginx ClusterIP 10.152.183.55 80/TCP 3m55s

NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx 1/1 1 1 9m29s

NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-f89759699 1 1 1 9m29s

$ wget 10.152.183.55 --2020-05-25 14:33:02-- http://10.152.183.55/ Connecting to 10.152.183.55:80... failed: Connection refused. ````

NOTE: Kubernetes does not provide a loadbalancer. It is assumed that loadbalancers are an external component. MicroK8s is not shipping any loadbalancer but even if it did there would not have been any nodes to balance load over. There is only one node so if you want to expose a service you should use the NodePort service type.
There is no external LB shipping with MicroK8s, therefore there is no way to appoint an (LB provided) external IP to a service. What you can do is to expose a service to a host's port using NodePort.

nginx attempt 2

```bash $ kubectl delete services nginx-service service "nginx-service" deleted

$ kubectl delete deployment nginx deployment.apps "nginx" deleted

$ kubectl create deployment nginx --image=nginx deployment.apps/nginx created

$ kubectl expose deployment nginx --type NodePort --port=80 --name nginx-service service/nginx-service exposed

$ kubectl get all NAME READY STATUS RESTARTS AGE pod/nginx-f89759699-jr4gz 1/1 Running 0 23s

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.152.183.1 443/TCP 19h service/nginx-service NodePort 10.152.183.229 80:30856/TCP 10s

NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx 1/1 1 1 23s

NAME DESIRED CURRENT READY AGE replicaset.apps/nginx-f89759699 1 1 1 23s

$ wget 10.152.183.229 Connecting to 10.152.183.229:80... connected. HTTP request sent, awaiting response... 200 OK 2020-05-26 08:05:22 (150 MB/s) - ‘index.html’ saved [612/612] ````

ingress

```bash $ cat ingress-nginx.yaml apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: http-ingress spec: rules: - http: paths: - path: / backend: serviceName: nginx-service servicePort: 80

$ kubectl apply -f ingress-nginx.yaml ingress.networking.k8s.io/http-ingress created ````

NOTE: https://192.168.1.112/ pulls up Nginx homepage

after reboot:

http://192.168.1.112:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

next

  • persistent storage test