[Raspberry Pi] Helm for K8s Cluster
By See Hiong
- 2 minutes read - 366 wordsWith Helm as the package manager for Kubernetes Cluster on Raspberry, you can find, share and and use software built for Kubernetes
Helm on Kubernetes Cluster
(Total Setup Time: 10 mins)
Helm is the package manager for Kubernetes. In this guide, I will install helm and setup ingress nginx controller with metallb as the layer 2 load balancer.
Installing Helm
(3 mins)
Because I am installing Helm for Kubernetes Cluster runnning on a mixture of Raspberry Pi 4 and 3, I will download the Helm linux arm64 variant:
wget https://get.helm.sh/helm-v3.3.0-rc.1-linux-arm64.tar.gz
tar -xzvf helm-v3.3.0-rc.1-linux-arm64.tar.gz
sudo mv linux-arm64/helm /usr/local/bin/helm
Afer Helm 3 is setup, you may check the version:
helm version
# Helm output
version.BuildInfo{Version:"v3.3.0-rc.1", GitCommit:"5c2dfaad847df2ac8f289d278186d048f446c70c", GitTreeState:"dirty", GoVersion:"go1.14.4"}
Installing NGINX Ingress Controller
(1 min)
For external to access our Kubernetes cluster, I will install NGINX Ingress using helm.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install my-nginx ingress-nginx/ingress-nginx
Setting up Load Balancer
(1 min)
MetallB hooks into our Kubernetes cluster and I will use it as a layer 2 network load-balancer.
sudo mkdir -p /mnt/hdd/master1k8s/app/metallb
cd /mnt/hdd/master1k8s/app/metallb
wget https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/namespace.yaml -O metallb-namespace.yaml
kubectl apply -f metallb-namespace.yaml
wget https://raw.githubusercontent.com/metallb/metallb/v0.9.3/manifests/metallb.yaml -O metallb.yaml
kubectl apply -f metallb.yaml
kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)"
This is my setting for the layer 2 configuration:
sudo vi metallb-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- 192.168.100.200-192.168.100.250
kubectl apply -f metallb-config.yaml
After the metallb is setup, I am able to get external IP addresses:
kubectl --namespace default get services -o wide -w my-nginx-ingress-nginx-controller
This is the sample result:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
my-nginx-ingress-nginx-controller LoadBalancer 10.104.36.43 192.168.100.200 80:31710/TCP,443:30063/TCP 11h app.kubernetes.io/component=controller,app.kubernetes.io/instance=my-nginx,app.kubernetes.io/name=ingress-nginx
Re-visiting Gitea setup
(5 mins)
With the metallb usage, I change my Gitea service (you may refer to the previous Gitea post) to the following:
apiVersion: v1
kind: Service
metadata:
name: gitea
annotations:
metallb.universe.tf/allow-shared-ip: home-net
spec:
ports:
- port: 3000
targetPort: 3000
name: gitea-http
- port: 2222
targetPort: 2222
nodePort: 32222
name: gitea-ssh
selector:
app: gitea
type: LoadBalancer
loadBalancerIP: 192.168.100.250
In this guide, I complete the Helm for Kubernetes Cluster setup and demonstrate how easy this package manager is, for my existing Kubernetes Cluster on Raspberry Pi.
Post a comment: