Develop Build and Deploy Golang App to K3s
We will require a container runtime as we will be building a image from our application code :
$ curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh
$ docker version
Build the image using the Dockerfile and by using the image name and tag of your own account:
$ docker build -t shrutianekar/rpi-hostname:latest .
Now the image has been built, let's test this locally:
``` bash
$ docker run -it -p 80:8000 shrutianekar/rpi-hostname:latest
Server listening on port 8000
Make a HTTP Request:
$ curl -i http://192.168.0.100/
HTTP/1.1 200 OK
Date: Sat, 10 Sep 2022 13:14:20 GMT
Content-Length: 23
Content-Type: text/plain; charset=utf-8
Hostname: 7c5f0d0bc212
Push the image to your image repository of choice
$ docker push ruanbekker/rpi-hostname
From the configuration above we are using Traefik for our ingress and mapping port 80 to the k3s-demo service via the dns name k3s-demo.example.org
As I do not own example.org, I will be setting that in my /etc/hosts file:
$ cat /etc/hosts | grep k3s
192.168.0.100 k3s-demo.example.org
Deploy our application:
$ kubectl apply -f k3s-demo.yml
deployment.extensions/k3s-demo created
service/k3s-demo created
ingress.extensions/k3s-demo created
After a minute or so, have a look at the services:
$ kubectl get service
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default k3s-demo ClusterIP 10.43.89.51 <none> 80/TCP 31s
The deployments:
$ kubectl get deployments
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE
default k3s-demo 1/1 1 1 42s
And get the pods:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
k3s-demo-777b9b7799-68kxg 1/1 Running 0 49s
Testing our Application Now that our application is deployed and our hosts file is set, let's test the application:
$ curl k3s-demo.example.org
Hostname: k3s-demo-777b9b7799-68kxg
And as you can see the Traefik accepted the connection and routed to the correct container.