Install K3s
If you haven't installed K3s yet, you can install it by running the following command:
curl -sfL https://get.k3s.io | sh -
You can verify the K3s installation by checking the node status:
kubectl get nodes
Install MetalLB
a. Create a Namespace for MetalLB
It’s a good practice to create a separate namespace for MetalLB:
kubectl create namespace metallb-system
b. Apply the MetalLB Manifest
Run the following command to deploy MetalLB using its official manifest:
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.14.8/config/manifests/metallb-native.yaml
Make sure to check for the latest version of MetalLB on the MetalLB GitHub Releases page.
c. Check MetalLB Pods
Verify that the MetalLB components are running:
kubectl get pods -n metallb-system
You should see controller
and speaker
pods running.
Configure MetalLB
MetalLB needs a configuration to specify which IP address range to use for load balancing. You can create a ConfigMap with the configuration.
a. Define the IP Address Range
Create a YAML file named metallb-config.yaml
with the following content, adjusting the ipAddressPool
to match your network setup. For example:
apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | layer2: addresses: - 192.168.114.101-192.168.114.101 # machine where K3S is installed - 192.168.114.200-192.168.114.210
Make sure the IP range specified is within your local network range and does not conflict with existing devices.
b. Apply the ConfigMap
Apply the configuration:
kubectl apply -f metallb-config.yaml
c. Advertise choosen addresses
Create a YAML file named metallb-advertise.yaml
:
apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: example namespace: metallb-system spec: ipAddressPools: - first-pool
kubectl apply -f
metallb-advertise.yaml
d. Check ingress (traefik) gets loadbalancer address of the machine
kubectl get services -A
Install ArgoCD
Before installing ArgoCD, create a namespace where ArgoCD resources will live:
kubectl create namespace argocd
Install ArgoCD Using the Official Manifests
ArgoCD is installed by applying a YAML manifest. The official manifest deploys all necessary ArgoCD components, such as the API server, controller, and UI.
Run the following command to install ArgoCD:
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
This command will install ArgoCD into the argocd
namespace.
Check the ArgoCD Pods
After applying the manifest, you can check if the ArgoCD pods are running:
kubectl get pods -n argocd
You should see several pods, including argocd-server
, argocd-repo-server
, argocd-application-controller
, and others.
Wait for everything ready.
Expose the ArgoCD Server
By default, the ArgoCD API server is only accessible inside the cluster. To access it externally, you can expose it using either a NodePort
or LoadBalancer
service. For a minimal installation like K3s, NodePort
is typically used.
a. Expose ArgoCD with a NodePort:
Run this command to patch the argocd-server
service to be of type NodePort
:
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
To retrieve the NodePort, run the following command:
kubectl get svc -n argocd argocd-server
Look for the NodePort
value under the PORT(S)
column. You can now access the ArgoCD web UI at
http://<Node_IP>:<NodePort>
.
https://<Node_IP>:<NodePort>
Node_IP
= address/dns of the machine where is installed k3s