diff --git a/k3sup-script.sh b/k3sup-script.sh new file mode 100755 index 0000000..f3a3266 --- /dev/null +++ b/k3sup-script.sh @@ -0,0 +1,154 @@ +#!/bin/bash + +rm ~/.kube/config # comment this out if you have more than one cluster + +# ____________________ EDIT VARIABLES __________________________ +export NODES=( + "sandy" # "192.168.1.14" + "gary" # "192.168.1.13" + "sheldon" # "192.168.1.16" + "pearl" # "192.168.1.19" +) # In this script you can replace --host and --server-host with --ip and --server-ip if you don't have DNS names +export USER="pleb" +export SSH_KEY="/home/pleb/.ssh/bikiniBottom" +export CLUSTER_NAME="bikinibottom" +export K3SVer="0.13.11" +export VIPIP="192.168.1.21" # Virtual IP address that the master nodes will share +export VIPHostname="bikinibotton" +export NETWORKSuffix="lan" +export EXTRAArgs="--disable traefik --disable servicelb" +export MetalLB_IPRange="192.168.1.21" # Range for MetalLB to use +# _______________________ END OF VARIABLES ______________________ + +GREEN='\033[32m' +RED='\033[0;31m' +ENDCOLOR='\033[0m' + +for index in "${!NODES[@]}"; do + echo -e "${GREEN}------- Installing on ${NODES[$index]} -------${ENDCOLOR}" + + # The first server starts the cluster + if [[ $index -eq 0 ]]; then + k3sup install \ + --cluster \ + --user $USER \ + --host ${NODES[$index]} \ + --ssh-key $SSH_KEY \ + --k3s-version $K3SVer \ + --local-path $HOME/.kube/config \ + --context $CLUSTER_NAME \ + --merge \ + --tls-san $VIPIP --tls-san $VIPHostname --tls-san $VIPHostname.$NETWORKSuffix \ + --k3s-extra-args "${EXTRAArgs}" + elif [[ $index -eq 1 || $index -eq 2 ]]; then + # The second and third nodes join as master nodes + k3sup join \ + --server \ + --host ${NODES[$index]} \ + --user $USER \ + --server-user $USER \ + --server-host ${NODES[0]} \ + --ssh-key $SSH_KEY \ + --k3s-version $K3SVer \ + --k3s-extra-args "${EXTRAArgs}" + else + # The rest of the nodes join as worker nodes + k3sup join \ + --host ${NODES[$index]} \ + --server-user $USER \ + --server-host ${NODES[0]} \ + --user $USER \ + --ssh-key $SSH_KEY \ + --k3s-version $K3SVer + fi +done + +echo -e "${GREEN}------- k3s installed, moving to backend apps -------${ENDCOLOR}" + +# MetalLB Installation +echo -e "${GREEN}------- Installing MetalLB Load Balancer -------${ENDCOLOR}" +kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.3/manifests/namespace.yaml +kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.3/manifests/metallb.yaml +cat < /tmp/traefik-values.yaml +helm upgrade --install traefik traefik/traefik --create-namespace --namespace traefik --values /tmp/traefik-values.yaml +cat < /dev/null; then + open "http://${external_ip}:80" + elif command -v xdg-open &> /dev/null; then + xdg-open "http://${external_ip}:80" + elif command -v google-chrome &> /dev/null; then + google-chrome "http://${external_ip}:80" + else + echo -e "${RED}Failed to open web browser. Please manually open a web browser and navigate to http://${external_ip}:80.${ENDCOLOR}" + fi +else + echo -e "${RED}LoadBalancer is still pending, may not be functional yet${ENDCOLOR}" +fi + +# Print Traefik External IP +echo -e "${GREEN}------- Print Traefik Ingress Point -------${ENDCOLOR}" +kubectl get svc -n traefik +external_ip=$(kubectl get service traefik -n traefik -o jsonpath='{.status.loadBalancer.ingress[0].ip}') +echo -e "\nOn your router, ${GREEN}Port forward${ENDCOLOR} ports 80 and 443 to ${GREEN}$external_ip${ENDCOLOR}" + + +echo -e "\n${GREEN}------- Setup Complete -------${ENDCOLOR}\n" diff --git a/k3sup.md b/k3sup.md new file mode 100644 index 0000000..da422fd --- /dev/null +++ b/k3sup.md @@ -0,0 +1,379 @@ +Kubernetes (K3Sup) +=== + +### Installation de kubectl ? + +```bash +sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg +sudo mkdir -p -m 755 /etc/apt/keyrings +curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg +sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg +echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.33/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list +sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list +sudo apt-get update +sudo apt-get install -y kubectl +``` + +### Installation de k3sup : + +```bash +# Avec curl +curl -sLS https://get.k3sup.dev | sh +sudo install k3sup /usr/local/bin/ + +# Ou téléchargement direct depuis GitHub +wget https://github.com/alexellis/k3sup/releases/download/0.13.11/k3sup +chmod +x k3sup +sudo mv k3sup /usr/local/bin/ +``` + +#### Premier déploiement : + +```bash +# Installation du master node +k3sup install --ip 192.168.1.14 --user pleb --ssh-key $HOME/.ssh/bikiniBottom + +# Ajout des worker nodes +k3sup join --ip 192.168.1.13 --server-ip 192.168.1.14 --user pleb --ssh-key $HOME/.ssh/bikiniBottom +k3sup join --ip 192.168.1.16 --server-ip 192.168.1.14 --user pleb --ssh-key $HOME/.ssh/bikiniBottom +k3sup join --ip 192.168.1.19 --server-ip 192.168.1.14 --user pleb --ssh-key $HOME/.ssh/bikiniBottom +``` + +#### Vérification du cluster : + +```bash +# Export du kubeconfig +export KUBECONFIG=~/delmar.bzh/kubernetes/kubeconfig + +# Vérification des nœuds +kubectl get nodes -o wide + +# Check des pods système +kubectl get pods -n kube-system +``` + +#### Setting labels: + +```bash +# sudo k3s kubectl label nodes xxx kubernetes.io/role=worker +kubectl label nodes gary kubernetes.io/role=worker +kubectl label nodes sheldon kubernetes.io/role=worker +kubectl label nodes pearl kubernetes.io/role=worker + +# sudo k3s kubectl label nodes sandy node-type=worker +kubectl label nodes gary node-type=worker +kubectl label nodes sheldon node-type=worker +kubectl label nodes pearl node-type=worker +``` + +```bash +kubectl get nodes +``` + +``` +NAME STATUS ROLES AGE VERSION +gary Ready worker 82m v1.35.5+k3s1 +pearl Ready worker 81m v1.35.5+k3s1 +sandy Ready control-plane 84m v1.35.5+k3s1 +sheldon Ready worker 82m v1.35.5+k3s1 +``` + +### Helm + +> On sandy + +```bash +curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 +chmod 700 get_helm.sh +./get_helm.sh +helm version +``` + +#### [Headlamp](https://headlamp.dev/docs/latest/) + +```bash +# first add our custom repo to your local helm repositories +helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/ + +# now you should be able to install headlamp via helm +helm install bb-headlamp headlamp/headlamp --namespace kube-system +``` + +``` +NAME: bb-headlamp +LAST DEPLOYED: Tue Feb 17 17:17:03 2026 +NAMESPACE: kube-system +STATUS: deployed +REVISION: 1 +TEST SUITE: None +NOTES: +``` + +1. Get the application URL by running these commands: +```bash +export POD_NAME=$(kubectl get pods --namespace kube-system -l "app.kubernetes.io/name=headlamp,app.kubernetes.io/instance=bb-headlamp" -o jsonpath="{.items[0].metadata.name}") +export CONTAINER_PORT=$(kubectl get pod --namespace kube-system $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") +echo "Visit http://127.0.0.1:8080 to use your application" +kubectl --namespace kube-system port-forward $POD_NAME 8080:$CONTAINER_PORT +``` + +2. Get the token using +```bash +kubectl create token bb-headlamp --namespace kube-system +``` + +#### metallb + +```bash +# Add MetalLB repository to Helm +helm repo add metallb https://metallb.github.io/metallb + +# Check the added repository +helm search repo metallb + +helm upgrade --install metallb metallb/metallb --create-namespace \ +--namespace metallb-system --wait +``` +```bash +Release "metallb" does not exist. Installing it now. +NAME: metallb +LAST DEPLOYED: Wed Feb 18 11:46:03 2026 +NAMESPACE: metallb-system +STATUS: deployed +REVISION: 1 +TEST SUITE: None +NOTES: +MetalLB is now running in the cluster. + +Now you can configure it via its CRs. Please refer to the metallb official docs +on how to use the CRs. +``` +```bash +vim metallb-config.yaml + +--- +apiVersion: metallb.io/v1beta1 +kind: IPAddressPool +metadata: + name: default-pool + namespace: metallb-system +spec: + addresses: + - 192.168.1.21-192.168.1.30 + +--- +apiVersion: metallb.io/v1beta1 +kind: L2Advertisement +metadata: + name: default + namespace: metallb-system +spec: + ipAddressPools: + - default-pool +``` + +```bash +kubectl -n metallb-system apply -f metallb/metallb-config.yaml +``` + +#### traefik + +```bash +vim traefik-ingress.yml +``` + +``` +--- +apiVersion: v1 +kind: Secret +metadata: + name: traefik-basic-auth-secret + namespace: kube-system +data: + users: |2 + YWRtaW46JGFwcjEkMmp5TzMwYmskRE5IV0VEQW1VQXFVajVGOHNvdXNVMAoK + +--- +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: traefik-basic-auth-middleware +spec: + basicAuth: + secret: traefik-basic-auth-secret + realm: "Traefik Dashboard" + +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: traefik-ingress + namespace: kube-system + annotations: + spec.ingressClassName: traefik + traefik.ingress.kubernetes.io/router.middlewares: kube-system-traefik-basic-auth-middleware@kubernetescrd +spec: + serviceAccountName: traefik-ingress + env: + name: OVH_ENDPOINT + value: ovh-eu + name: OVH_APPLICATION_KEY + value: 3f8bdfed17f848d8 + name: OVH_APPLICATION_SECRET + value: 6946758d7515ecef108aeb286bf3c7d0 + name: OVH_CONSUMER_KEY + value: 94b2ddf482d36421a33aa6b3aa51595 + args: + - --configFile=/config/traefik.toml + volumeMounts: + - name: traefik-config + mountPath: /config/ + - name: traefik-custom + mountPath: /custom/ + - name: traefik-certs + mountPath: /certs/ + ports: + name: http + containerPort: 80 + name: https + containerPort: 443 + name: dashboard + containerPort: 8080 + volumes: + - name: traefik-config + configMap: + - name: traefik-config + - name: traefik-custom + - name: traefik-certs + persistentVolumeClaim: + claimName: traefik-certsrules: + - http: + paths: + - pathType: Prefix + path: "/" + backend: + service: + name: traefik-dashboard + port: + number: 8080 + +--- +apiVersion: v1 +kind: Service +metadata: + name: traefik-dashboard +spec: + ports: + - name: http + port: 8080 + targetPort: 8080 + selector: + app: traefik-dashboard + type: LoadBalancer + +``` + +```bash +sudo k3s kubectl -n kube-system apply -f traefik-ingress.yml +``` + +#### [longhorn](https://longhorn.io) + +```bash +helm repo add longhorn https://charts.longhorn.io +helm repo update +kubectl create namespace longhorn-system +helm install longhorn longhorn/longhorn --namespace longhorn-system + +USER=admin; PASSWORD=v5bB4OQRDfY5tFJ1; echo "${USER}:$(openssl passwd -stdin -apr1 <<< ${PASSWORD})" >> auth + +kubectl -n longhorn-system create secret generic basic-auth --from-file=auth + +vim longhorn/longhorn-middelwares.yaml +```` + +``` +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: longhorn-auth + namespace: longhorn-system +spec: + basicAuth: + secret: basic-auth +--- +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: longhorn-buffering + namespace: longhorn-system +spec: + buffering: + # Allows backing image uploads up to 10,000MB + maxRequestBodyBytes: 10485760000 +``` + +```bash +kubectl apply -f longhorn-middlewares.yml +``` + +```bash +vim longhorn/longhorn-ingress.yaml +``` + +``` +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: longhorn-ingress + namespace: longhorn-system + annotations: + # Connect the middlewares defined in step 2 + traefik.ingress.kubernetes.io/router.middlewares: + longhorn-system-longhorn-auth@kubernetescrd, + longhorn-system-longhorn-buffering@kubernetescrd +spec: + ingressClassName: traefik + rules: + - http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: longhorn-frontend + port: + number: 80 +``` + +```bash +kubectl -n longhorn-system get pod + +kubectl get storageclass +``` + +``` +NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE +local-path (default) rancher.io/local-path Delete WaitForFirstConsumer false 93m +longhorn (default) driver.longhorn.io Delete Immediate true 59m +longhorn-static driver.longhorn.io Delete Immediate true 59m +``` + +##### Unset default for "local-path" (emmc) + +```bash +kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}' +``` + +##### Mark longhorn as "default" + +```bash +kubectl patch storageclass longhorn -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' +``` + +##### Apply ingress +```bash +kubectl -n longhorn-system apply -f longhorn/longhorn-ingress.yaml + +kubectl -n longhorn-system get ingress +``` diff --git a/kubeconfig b/kubeconfig index 9b494c0..f001607 100644 --- a/kubeconfig +++ b/kubeconfig @@ -1,7 +1,7 @@ apiVersion: v1 clusters: - cluster: - certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzT0RRMU16RTJNRFl3SGhjTk1qWXdOekl3TURZeE16STJXaGNOTXpZd056RTNNRFl4TXpJMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzT0RRMU16RTJNRFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFScTR4U1VlL1hSQTg4Nk5JakF1cERyTy9nRmVZbW5rRnB6TWZLU091WisKY3NJT2VRZHV4TFRkSy9CR1RDaFd5bjNiejYwQXRmT2wwWnhwMzdnTCtoUEpvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWc0WUpvQTRjTGJvQ1JHb2F1c1JOCkxBUHEvdkV3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQU5uSGxXL0RrU1kvSzNYTHVXZU41TUx6WnprbnA3ZWkKblJyam1EeE1tczU5QWlFQXJseCszWGVhNmswT0pQbEt4R1UvMlFJNUpjeGZBUmdmL1dkTGM2QXpoMFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzT0RRMU16WTVNekV3SGhjTk1qWXdOekl3TURjME1qRXhXaGNOTXpZd056RTNNRGMwTWpFeApXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzT0RRMU16WTVNekV3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFUUklldnhzVGxHY2xkbVMra09taG9DRlY3d2dVUnBaRkRTalJDZ1lzM0MKbW5lZW5Hd1l0UjhCYko1djM0eERXTHV2QnVYVm45NTBxNjRWVFpDaXY5OHVvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVVNuTFI4NmhzQWg3VXhyc1RFZDVYCjZyWERiY0l3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUtYdjNQOUYvWnd3bWxjRSs5N1RzN2ZSaVpCaFYzS2EKTEtWWUdLU0F0WHpWQWlCclg2OUlKWjVpWFpWcWw3Y050MTlCZVliYVJ1a0N5LzlZcTQrVGlxZFkzQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K server: https://192.168.1.14:6443 name: default contexts: @@ -14,5 +14,5 @@ kind: Config users: - name: default user: - client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrRENDQVRlZ0F3SUJBZ0lJVWsvYm53cms2UnN3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemcwTlRNeE5qQTJNQjRYRFRJMk1EY3lNREEyTVRNeU5sb1hEVEkzTURjeQpNREEyTVRNeU5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcFdNMUkwdXl2RWlNMVEKUFN4RlNHMTgzVmZGSU4yKzAzeHNWM2hHbkQ4c3BhOGVrcUIyemtLTmNNKzhOTHVyTE9lZmp3bm9lb1dXQVU2egpDTndlZnVhalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCU1MwWnZ5T0RYNlhSd3JvQUIvTmhLcDFyalhtREFLQmdncWhrak9QUVFEQWdOSEFEQkUKQWlBNDEyTnhIODhvNGcrUXpNOUdZUlk1TUlzQW5DOUFPS2xGQk1KKzk4b2ZuUUlnS292U2pFdlRIZHlPR0NEYQoyYU12eEUzS2NpUENoazZaYnQvMkMxYVZPVXc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzT0RRMU16RTJNRFl3SGhjTk1qWXdOekl3TURZeE16STJXaGNOTXpZd056RTNNRFl4TXpJMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzT0RRMU16RTJNRFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRcVVKcXlDZk9aYjdBLzgxZUc4V1pNNU1Ca3FkZDZSbnFRVmRtem4zYloKYlA4Sk5hY0pNeTVPWHlRWlo0amx4VFN5ZmtzeDZBSG5Wc3IyblRmSmFPRFRvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWt0R2I4amcxK2wwY0s2QUFmellTCnFkYTQxNWd3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU04M0tlM1hxeTF0UmlFVlc0RkZzRzRIZmRsekJXa2wKelZwNDRjbnd3bFdtQWlBb3JVN0Q2MVlQU2YyTGViSVZzbEJCOHkrQzVGMHNGQkRSVzlHMjkrUHRjZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K - client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUUxNFhIc3NoY0FNUEU5czJ5bDI0azRSL0E3ZHNSdE05VFREK0pFTWlXMEhvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFeWxZelVqUzdLOFNJelZBOUxFVkliWHpkVjhVZzNiN1RmR3hYZUVhY1B5eWxyeDZTb0hiTwpRbzF3ejd3MHU2c3M1NStQQ2VoNmhaWUJUck1JM0I1KzVnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrVENDQVRlZ0F3SUJBZ0lJTy9TcFRDc0k4QWt3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemcwTlRNMk9UTXhNQjRYRFRJMk1EY3lNREEzTkRJeE1Wb1hEVEkzTURjeQpNREEzTkRJeE1Wb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJDVnZob3ZsS0VnWlpLMTQKS1lKWHdPMGtGNjM1eHJYeFJnZGVOU25pRWlIM1IzUWRreDZFUUNKdldhRzVEM3ZncXkrUnFucURXbDBjd2JxLwpsRlRRSWxtalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCUXhrcTUvSGdFdVFCSUJpSFNUU1liOW5aNEZ2akFLQmdncWhrak9QUVFEQWdOSUFEQkYKQWlCQVpHWi8zaGIrZTNLcFBuS0ExbzVLQnhUaGZUYzJ0N3RUUWkzNnJ6bi96Z0loQUtCNUdBMkUzZEVaUHhhWgpkVzU1Vkw4Z2VueDYyQUlnbStqcVQzckdQUFBaCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzT0RRMU16WTVNekV3SGhjTk1qWXdOekl3TURjME1qRXhXaGNOTXpZd056RTNNRGMwTWpFeApXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzT0RRMU16WTVNekV3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRejhWSzgzaUp5V28raHBEMHBvc3AzTEczOUJINTRBd0h0dVgzQldkM3QKN2NMc1ZOVXRlMHc4bFNtZlFmd2xFanNFdWFpc1kwd3FwdmVTMElrZGp1M0hvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVU1aS3VmeDRCTGtBU0FZaDBrMG1HCi9aMmVCYjR3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUlnUG02T2J6djRRS2JrUXZEajNtNzM3Rm40cnFLRC9iamQKQTFNelNHaExpaXNDSVFEaEdnNWxiRGdidzdKMFQ4LzMzTlltMVIxRzd6YWdSVFhxeUNCQXFBcHJiQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUdRRFlyaGRIQWIvM0hXVFBqNTFvZHNTNVRZQng3UklRdkQ3NmtiZDR4S0VvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFSlcrR2krVW9TQmxrclhncGdsZkE3U1FYcmZuR3RmRkdCMTQxS2VJU0lmZEhkQjJUSG9SQQpJbTlab2JrUGUrQ3JMNUdxZW9OYVhSekJ1citVVk5BaVdRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= diff --git a/kubeconfig.sav b/kubeconfig.sav new file mode 100644 index 0000000..9b494c0 --- /dev/null +++ b/kubeconfig.sav @@ -0,0 +1,18 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJlRENDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdGMyVnkKZG1WeUxXTmhRREUzT0RRMU16RTJNRFl3SGhjTk1qWXdOekl3TURZeE16STJXaGNOTXpZd056RTNNRFl4TXpJMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRjMlZ5ZG1WeUxXTmhRREUzT0RRMU16RTJNRFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFScTR4U1VlL1hSQTg4Nk5JakF1cERyTy9nRmVZbW5rRnB6TWZLU091WisKY3NJT2VRZHV4TFRkSy9CR1RDaFd5bjNiejYwQXRmT2wwWnhwMzdnTCtoUEpvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWc0WUpvQTRjTGJvQ1JHb2F1c1JOCkxBUHEvdkV3Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loQU5uSGxXL0RrU1kvSzNYTHVXZU41TUx6WnprbnA3ZWkKblJyam1EeE1tczU5QWlFQXJseCszWGVhNmswT0pQbEt4R1UvMlFJNUpjeGZBUmdmL1dkTGM2QXpoMFk9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + server: https://192.168.1.14:6443 + name: default +contexts: +- context: + cluster: default + user: default + name: default +current-context: default +kind: Config +users: +- name: default + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJrRENDQVRlZ0F3SUJBZ0lJVWsvYm53cms2UnN3Q2dZSUtvWkl6ajBFQXdJd0l6RWhNQjhHQTFVRUF3d1kKYXpOekxXTnNhV1Z1ZEMxallVQXhOemcwTlRNeE5qQTJNQjRYRFRJMk1EY3lNREEyTVRNeU5sb1hEVEkzTURjeQpNREEyTVRNeU5sb3dNREVYTUJVR0ExVUVDaE1PYzNsemRHVnRPbTFoYzNSbGNuTXhGVEFUQmdOVkJBTVRESE41CmMzUmxiVHBoWkcxcGJqQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VIQTBJQUJNcFdNMUkwdXl2RWlNMVEKUFN4RlNHMTgzVmZGSU4yKzAzeHNWM2hHbkQ4c3BhOGVrcUIyemtLTmNNKzhOTHVyTE9lZmp3bm9lb1dXQVU2egpDTndlZnVhalNEQkdNQTRHQTFVZER3RUIvd1FFQXdJRm9EQVRCZ05WSFNVRUREQUtCZ2dyQmdFRkJRY0RBakFmCkJnTlZIU01FR0RBV2dCU1MwWnZ5T0RYNlhSd3JvQUIvTmhLcDFyalhtREFLQmdncWhrak9QUVFEQWdOSEFEQkUKQWlBNDEyTnhIODhvNGcrUXpNOUdZUlk1TUlzQW5DOUFPS2xGQk1KKzk4b2ZuUUlnS292U2pFdlRIZHlPR0NEYQoyYU12eEUzS2NpUENoazZaYnQvMkMxYVZPVXc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJkekNDQVIyZ0F3SUJBZ0lCQURBS0JnZ3Foa2pPUFFRREFqQWpNU0V3SHdZRFZRUUREQmhyTTNNdFkyeHAKWlc1MExXTmhRREUzT0RRMU16RTJNRFl3SGhjTk1qWXdOekl3TURZeE16STJXaGNOTXpZd056RTNNRFl4TXpJMgpXakFqTVNFd0h3WURWUVFEREJock0zTXRZMnhwWlc1MExXTmhRREUzT0RRMU16RTJNRFl3V1RBVEJnY3Foa2pPClBRSUJCZ2dxaGtqT1BRTUJCd05DQUFRcVVKcXlDZk9aYjdBLzgxZUc4V1pNNU1Ca3FkZDZSbnFRVmRtem4zYloKYlA4Sk5hY0pNeTVPWHlRWlo0amx4VFN5ZmtzeDZBSG5Wc3IyblRmSmFPRFRvMEl3UURBT0JnTlZIUThCQWY4RQpCQU1DQXFRd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFRmdRVWt0R2I4amcxK2wwY0s2QUFmellTCnFkYTQxNWd3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU04M0tlM1hxeTF0UmlFVlc0RkZzRzRIZmRsekJXa2wKelZwNDRjbnd3bFdtQWlBb3JVN0Q2MVlQU2YyTGViSVZzbEJCOHkrQzVGMHNGQkRSVzlHMjkrUHRjZz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + client-key-data: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUUxNFhIc3NoY0FNUEU5czJ5bDI0azRSL0E3ZHNSdE05VFREK0pFTWlXMEhvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFeWxZelVqUzdLOFNJelZBOUxFVkliWHpkVjhVZzNiN1RmR3hYZUVhY1B5eWxyeDZTb0hiTwpRbzF3ejd3MHU2c3M1NStQQ2VoNmhaWUJUck1JM0I1KzVnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= diff --git a/longhorn/longhorn-middelwares.yaml b/longhorn/longhorn-middelwares.yaml new file mode 100644 index 0000000..d94602c --- /dev/null +++ b/longhorn/longhorn-middelwares.yaml @@ -0,0 +1,18 @@ +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: longhorn-auth + namespace: longhorn-system +spec: + basicAuth: + secret: basic-auth +--- +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: longhorn-buffering + namespace: longhorn-system +spec: + buffering: + # Allows backing image uploads up to 10,000MB + maxRequestBodyBytes: 10485760000 diff --git a/metallb/metallb-config.yaml b/metallb/metallb-config.yaml index 0d53e47..8818ad3 100644 --- a/metallb/metallb-config.yaml +++ b/metallb/metallb-config.yaml @@ -6,7 +6,7 @@ metadata: namespace: metallb-system spec: addresses: - - 192.168.1.21 + - 192.168.1.21-192.168.1.30 --- apiVersion: metallb.io/v1beta1 diff --git a/traefik/traefik-ingress.yaml b/traefik/traefik-ingress.yaml index 5659eaa..6a23bf0 100644 --- a/traefik/traefik-ingress.yaml +++ b/traefik/traefik-ingress.yaml @@ -8,7 +8,40 @@ metadata: spec.ingressClassName: traefik traefik.ingress.kubernetes.io/router.middlewares: kube-system-traefik-basic-auth-middleware@kubernetescrd spec: - rules: + serviceAccountName: traefik-ingress + env: + name: OVH_ENDPOINT + value: ovh-eu + name: OVH_APPLICATION_KEY + value: 3f8bdfed17f848d8 + name: OVH_APPLICATION_SECRET + value: 6946758d7515ecef108aeb286bf3c7d0 + name: OVH_CONSUMER_KEY + value: 94b2ddf482d36421a33aa6b3aa51595 + args: + - --configFile=/config/traefik.toml + volumeMounts: + - name: traefik-config + mountPath: /config/ + - name: traefik-custom + mountPath: /custom/ + - name: traefik-certs + mountPath: /certs/ + ports: + name: http + containerPort: 80 + name: https + containerPort: 443 + name: dashboard + containerPort: 8080 + volumes: + - name: traefik-config + configMap: + - name: traefik-config + - name: traefik-custom + - name: traefik-certs + persistentVolumeClaim: + claimName: traefik-certsrules: - http: paths: - pathType: Prefix @@ -18,3 +51,18 @@ spec: name: traefik-dashboard port: number: 8080 + +--- +apiVersion: v1 +kind: Service +metadata: + name: traefik-dashboard +spec: + ports: + - name: http + port: 8080 + targetPort: 8080 + selector: + app: traefik-dashboard + type: LoadBalancer +