Dec 6, 2022 by Thibault Debatty | 3133 views
Kubernetes is a complex beast, with lots of available drivers and plugins to handle different types of clusters. For example, to handle networking between pods in the cluster, you must install a CNI (Container Network Interface) plugin like Flannel, Calico, Weave Net, Cilium or other. To handle storage and volumes, you can install one of multiple CSI (Container Storage Interface) plugins like CephFS, GlusterFS, Google Cloud Storage etc. In this blog post we show how to use MicroK8s to simplify the installation process.
MicroK8s is a Kubernetes management tool that is perfect to deploy a development or testing Kubernetes environment on a single machine, or a small Kubernetes cluster.
MicroK8s is actually a snap package, so the installation is very simple:
sudo snap install microk8s --classic
To allow pod communication, you will have to add
sudo ufw allow in on cni0 sudo ufw allow out on cni0 sudo ufw default allow routed # if needed, don't forget to allow ssh and enable ufw: sudo ufw allow ssh sudo ufw enable
You can now add yourself to the list of users that are allowed to use microk8s:
sudo usermod -a -G microk8s `whoami` sudo chown -f -R `whoami` ~/.kube
To apply the changes, you must either logout and login again, or you can reload your terminal session with:
You can now use
kubectl almost as usual, but you must prepend the microk8s wrapper:
microk8s kubectl version
At the time of writing, microk8s installs kuvernetes v1.25.4
If you prefer you can also create an alias for kubectl, at the end of
alias kubectl='microk8s kubectl'
By default, microk8s installs a very light Kubernetes environment, with only a few plugins. You can list enable and available addons with:
For a basic Kubernetes setup, you should probably enable at least DNS and local storage:
microk8s enable dns hostpath-storage
Create a file called cylab.yaml that describes a pod and a NodePort service that will expose the pod on port 30001:
apiVersion: v1 kind: Pod metadata: name: cylab-hello-pod labels: app: cylab-hello spec: containers: - name: cylab-hello image: cylab/hello:1.0 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: cylab-hello-svc spec: type: NodePort ports: - port: 80 nodePort: 30001 protocol: TCP selector: app: cylab-hello
Apply the app description:
microk8s kubectl apply -f cylab.yaml
After a few seconds, the pods and services will be up and running:
And the application will be available on port 30001, using the IP address of your host computer.
MicroK8s can also deploy the Kubernetes Dashboard for you with:
After a few second, the Dashboard will be available at
https://ip.of.your.host:10443. Don't be surprised: the server uses a self-signed https certificate, that will probably trigger a warning in your browser.