In a previous post I talked about k3sup, a tool to easily install k3s on any system available over SSH. If you don’t know what k3s is, it’s a lightweight version of Kubernetes. It also runs on ARMv7 and ARM64 processors. That means it’s also compatible with a Raspberry Pi.
If I am not mistaken, Civo is the first cloud provider that offers a managed k3s service. Just like the other Civo services it is very easy to use. At this point in time, the service is in beta and you need to be accepted to participate.
Deploying the cluster
The cluster can be deployed via the portal, CLI or the REST API. Portal deployment is very simple:
- set a name
- set the size of the nodes
- set the number of nodes
After deployment, you will see the cluster as follows:
Kubernetes on Civo comes with a marketplace of Kubernetes apps to install during or after cluster deployment. By default, Traefik is selected but you can add other apps. I added Helm for instance:
Getting your Kubeconfig
You can use the portal to grab the Kubeconfig file:
Then, in your shell, set the KUBECONFIG environment variable to the path where you downloaded the file. Alternatively, you can use the Civo CLI to obtain the Kubeconfig file.
Deploying an application
Let’s install my image classifier app to the cluster and expose it via Traefik. Let’s look at the Traefik service in the cluster:
If you look closely, you will see that the Traefik service is exposed on each node. Currently, there is no integration with Civo’s load balancers. You do get a DNS name that uses round robin over the IP addresses of the nodes. The DNS name is something like 232b548e-897f-41d3-86f6-1a2a38516a58.k8s.civo.com.
Let’s install and expose my image classifier with the following basic YAML:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: nasnet-ingress namespace: default annotations: kubernetes.io/ingress.class: traefik spec: rules: - host: IPADDRESS.nip.io http: paths: - path: / backend: serviceName: nasnet-svc servicePort: 80 --- kind: Service apiVersion: v1 metadata: name: nasnet-svc spec: selector: app: nasnet ports: - protocol: TCP port: 80 targetPort: 9090 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: nasnet-app labels: app: nasnet spec: replicas: 2 selector: matchLabels: app: nasnet template: metadata: labels: app: nasnet spec: containers: - name: nasnet image: gbaeke/nasnet resources: limits: cpu: "0.5" requests: cpu: "0.2" ports: - containerPort: 9090
In the above YAML, replace IPADDRESS with one of the IP addresses of your nodes. With a little help of nip.io, that name will resolve to the IP address that you specify.
This was just a quick look at Civo’s Kubernetes service. It is easy to install and comes with an easy to use marketplace to quickly get started. In a relatively short time, they were able to get this up and running quickly. I am sure it will rapidly evolve into a great contender to the other managed Kubernetes services out there.