Kubernetes Made Simple with K3S

Sebastian
3 min readJul 27, 2020

--

Kubernetes Made Simple with K3S

Creating a Kubernetes Cluster from scratch seemed like a daunting task to me. And then I discovered the lightweight Kubernetes distribution K3S: Creating a cluster with an on-line command per Node! Here is the tutorial for you to follow along.

This article originally appeared at my blog.

Required Hardware

For this tutorial, you need three different types of hardware.

  • controller: Your laptop/PC to bootstrap the installation
  • k3s-server: A node designated as the server
  • k3s-nodes: Nodes designated as worker

For simplicity, I created cloud computing servers with the following specs.

  • k3s-server: 1 CPU, 2 GB RAM
  • k3s-node1: 2 CPUs, 4GB RAM
  • k3s-node2: 2 CPUs, 4GB RAM

Be sure to have SSH access to each node.

Prepare the Controller

Using MaxOsX, you execute:

curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl"
curl -sLS https://get.k3sup.dev | sh

Install K3S

Install K3S on the server node first.

k3sup install --ip $SERVER_IP --user $USERcp ${pwd}kubeconfig ~/.kubeconfig
export KUBECONFIG=~/.kubeconfig

Then, install K3S on all worker nodes.

k3sup join --ip $NODE_IP --server-ip $SERVER_IP --user $USERNAME

If all goes well, try the kubectl command to see your nodes:

kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k3s-node1 Ready <none> 14h v1.17.2+k3s1 49.12.45.26 <none> Debian GNU/Linux 10 (buster) 4.19.0-8-amd64 containerd://1.3.3-k3s1
k3s-server Ready master 14h v1.17.2+k3s1 49.12.45.6 <none> Debian GNU/Linux 10 (buster) 4.19.0-8-amd64 containerd://1.3.3-k3s1
k3s-node2 Ready <none> 14h v1.17.2+k3s1 49.12.64.126 <none> Debian GNU/Linux 10 (buster) 4.19.0-8-amd64 containerd://1.3.3-k3s1

With these steps, the basic Kubernetes installation is done. Did you check your stopwatch?

Install Dashboard

Then install the dashboard.

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

Store the following configuration in a file called dashboard_accounts.yml.

apiVersion: v1
kind: Namespace
metadata:
name: kubernetes-dashboard
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
---

Then create these roles.

kubectl apply -f dashboard_accounts.yml

If all goes well, the final steps are to create a local proxy server and get the access token.

kubectl proxy&
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user-token | awk '{print $1}')

Then, access the dashboard in your browser on localhost:8001/api.

Conclusion

This article showed you how to install Kubernetes with the lightweight distribution K3S. With simple one-line shell scripts, you have working cluster in a very short time. If you want to customize this installation, there are lots of [configuration options] you can apply, for example if your containers are executed with containerd or Docker, or whether you want to use Nginx or Traefik as your ingress controller. In the next tutorials, I will show you how the setup TLS encryption for your services, and how to deploy a private Docker registry so you can run private Containers with your Kubernetes.

--

--