devops/ships/overlays/rancher.yaml

79 lines
2.4 KiB
YAML

# rancher-overlay.yaml - Universal Rancher overlay
variant: flatcar
version: 1.0.0
storage:
files:
- path: /etc/hostname
mode: 0644
overwrite: true
contents:
inline: rancher-server
- path: /opt/setup-rancher.sh
mode: 0755
contents:
inline: |
#!/bin/bash
# Detect k8s distribution and set paths
if [ -d "/var/lib/rancher/rke2" ]; then
KUBECONFIG="/etc/rancher/rke2/rke2.yaml"
# Ensure RKE2 is started
systemctl start rke2-server.service
elif [ -d "/var/lib/rancher/k3s" ]; then
KUBECONFIG="/etc/rancher/k3s/k3s.yaml"
# Ensure K3s is started
systemctl start k3s
else
echo "No supported kubernetes distribution found"
exit 1
fi
# Export kubeconfig for helm and kubectl
export KUBECONFIG
# Export helm_install_dir for helm
export HELM_INSTALL_DIR=/opt/bin
# Wait for cluster to be ready
while ! kubectl get nodes; do sleep 5; done
# Install Helm if not present
if ! command -v helm &> /dev/null; then
curl -sfL https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | sh -
fi
# Install cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.3/cert-manager.yaml
# Wait for cert-manager
kubectl -n cert-manager wait --for=condition=ready pod -l app=cert-manager --timeout=60s
# Install Rancher
helm repo add rancher-stable https://releases.rancher.com/server-charts/stable
helm repo update
kubectl create namespace cattle-system
helm install rancher rancher-stable/rancher \
--namespace cattle-system \
--set hostname=$(hostname | cut -d' ' -f1).sslip.io \
--set bootstrapPassword=adminadmin \
--set replicas=1
systemd:
units:
- name: rancher-setup.service
enabled: true
contents: |
[Unit]
Description=Rancher Setup
After=network-online.target
# Generic condition to wait for either k3s or rke2
After=k3s.service rke2-server.service
Requires=network-online.target
[Service]
Type=oneshot
ExecStart=/opt/setup-rancher.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target