DEV Community

rohit20001221
rohit20001221

Posted on

Deploying Flask app to raspberry kubernetes cluster Part - 1 (Environment Setup)

recently i have bought two raspberry pi's and taught of converting it into a server to host backend code for free 😉
yaa you heard it right you can host you website or the backend api for free on raspberry pi

i will walk you through the steps required in this process

first you need a raspberry pi i have two but you can even use one for this guide and it is completely fine, and you need to install the raspberry pi debian OS i would suggest you to install the raspberry pi light 64bit os we dont need desktop verison it could create unessary load

you can find this video helpful to install raspberrypi os

now lets get into the main part !!

1. Setting up K3s in RaspberryPi

k3s is a lightweight kubernetes which can run on low end devices
with two raspberry pi's we can configure one raspberry pi as master node and other as worker node

Configuring the Master Node

  1. SSH into raspberry pi and edit the /boot/cmdline.txt and add the following line at the end of the file
# /boot/cmdline.txt # (append this to the end of file don't replace) cgroup_memory=1 cgroup_enable=memory 
Enter fullscreen mode Exit fullscreen mode
  1. Reboot your raspberry pi using
sudo reboot 
Enter fullscreen mode Exit fullscreen mode
  1. once the raspberry pi is rebooted SSH into it again now its time to install k3s

start installing k3s using the following commands we will be using docker backend for k3s

Install docker

curl https://releases.rancher.com/install-docker/20.10.sh | sh 
Enter fullscreen mode Exit fullscreen mode

Install k3s with --docker option

curl -sfL https://get.k3s.io | sh -s - --docker 
Enter fullscreen mode Exit fullscreen mode

you can verify the k3s installation using sudo docker ps
you will get the following output

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3e4d34729602 897ce3c5fc8f "entry" About a minute ago Up About a minute k8s_lb-port-443_svclb-traefik-jbmvl_kube-system_d46f10c6-073f-4c7e-8d7a-8e7ac18f9cb0_0 bffdc9d7a65f rancher/klipper-lb "entry" About a minute ago Up About a minute k8s_lb-port-80_svclb-traefik-jbmvl_kube-system_d46f10c6-073f-4c7e-8d7a-8e7ac18f9cb0_0 436b85c5e38d rancher/library-traefik "/traefik --configfi…" About a minute ago Up About a minute k8s_traefik_traefik-758cd5fc85-2wz97_kube-system_07abe831-ffd6-4206-bfa1-7c9ca4fb39e7_0 de8fded06188 rancher/pause:3.1 "/pause" About a minute ago Up About a minute k8s_POD_svclb-traefik-jbmvl_kube-system_d46f10c6-073f-4c7e-8d7a-8e7ac18f9cb0_0 7c6a30aeeb2f rancher/pause:3.1 "/pause" About a minute ago Up About a minute k8s_POD_traefik-758cd5fc85-2wz97_kube-system_07abe831-ffd6-4206-bfa1-7c9ca4fb39e7_0 ae6c58cab4a7 9d12f9848b99 "local-path-provisio…" About a minute ago Up About a minute k8s_local-path-provisioner_local-path-provisioner-6d59f47c7-lncxn_kube-system_2dbd22bf-6ad9-4bea-a73d-620c90a6c1c1_0 be1450e1a11e 9dd718864ce6 "/metrics-server" About a minute ago Up About a minute k8s_metrics-server_metrics-server-7566d596c8-9tnck_kube-system_031e74b5-e9ef-47ef-a88d-fbf3f726cbc6_0 4454d14e4d3f c4d3d16fe508 "/coredns -conf /etc…" About a minute ago Up About a minute k8s_coredns_coredns-8655855d6-rtbnb_kube-system_d05725df-4fb1-410a-8e82-2b1c8278a6a1_0 c3675b87f96c rancher/pause:3.1 "/pause" About a minute ago Up About a minute k8s_POD_coredns-8655855d6-rtbnb_kube-system_d05725df-4fb1-410a-8e82-2b1c8278a6a1_0 4b1fddbe6ca6 rancher/pause:3.1 "/pause" About a minute ago Up About a minute k8s_POD_local-path-provisioner-6d59f47c7-lncxn_kube-system_2dbd22bf-6ad9-4bea-a73d-620c90a6c1c1_0 64d3517d4a95 rancher/pause:3.1 "/pause" 
Enter fullscreen mode Exit fullscreen mode

now type the following command to get the master node's token we will need this to configure the other raspberry pi as worker node

sudo cat /var/lib/rancher/k3s/server/node-token # [out]: K106e6f015b9399c74bab39bf6be3b53bf9661fbc64d6da8ab713544843399418cb::server:04cf766c678cf022a6f80d296b4125c8 
Enter fullscreen mode Exit fullscreen mode

**

  1. now lets SSH into our other raspberry pi and configure it as the worker node

you need to follow the above step of editing the /boot/cmdline.txt even for this node and reboot the Pi

once you have done editing the /boot/cmdline.txt just install the docker with the command

curl https://releases.rancher.com/install-docker/20.10.sh | sh 
Enter fullscreen mode Exit fullscreen mode

2. Worker node setup

after installing the docker we will configure the worker node

curl -sfL https://get.k3s.io | K3S_URL=http://<IP_OF_MASTER_NODE>:6443 sh -s - agent --token <masternodes token> --docker 
Enter fullscreen mode Exit fullscreen mode

you are done with the setup process of the master and worker nodes

you can verify the setup using sudo kubectl get nodes inside the master node

now we will copy the maters node kubectl config file so that we can access it from our local machine

type the following command

sudo cat /etc/rancher/k3s/k3s.yaml

apiVersion: v1 clusters: - cluster: certificate-authority-data: ... server: https://127.0.0.1:6443 # <-- replace this with local ip name: default contexts: - context: cluster: default user: default name: default current-context: default kind: Config preferences: {} users: - name: default user: client-certificate-data: ... client-key-data: ... 
Enter fullscreen mode Exit fullscreen mode

replace 127.0.0.1 with the local ip of the pi in my case it is 192.168.1.10 you can get it by typing following command ip a

now copy the config into ~/.kube/config in your local system

note: you need to install kubectl in you local system

you can follow this guide to install kubectl
https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

we are done with the setup now in part 2 we will deploy a flask application to kubernetes

part 2
https://dev.to/rohit20001221/deploying-flask-app-to-raspberry-kubernetes-cluster-part-2-3bld

Top comments (0)