push
This commit is contained in:
parent
92623cc1e2
commit
5453f92c69
8 changed files with 179 additions and 0 deletions
34
.github/workflows/weekly-k8s-backup.yml
vendored
Normal file
34
.github/workflows/weekly-k8s-backup.yml
vendored
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
name: Weekly K8s Storage Backup
|
||||
|
||||
on:
|
||||
schedule:
|
||||
# Sunday 02:30 UTC (quiet time, predictable)
|
||||
- cron: "30 2 * * 0"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
backup:
|
||||
name: Backup /k8s_storage → S3
|
||||
runs-on: [self-hosted, mist]
|
||||
timeout-minutes: 180
|
||||
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Sanity check mount
|
||||
run: |
|
||||
echo "Listing /k8s_storage:"
|
||||
ls -lah /k8s_storage
|
||||
|
||||
- name: Verify AWS identity
|
||||
run: aws sts get-caller-identity
|
||||
|
||||
- name: Run backup
|
||||
run: |
|
||||
bash scripts/backup_k8s_storage_to_s3.sh
|
||||
|
||||
|
||||
# example of restoring a back up
|
||||
# aws s3 cp s3://mist-backups/2025-03-09/k8s_storage_mist_2025-03-09_02-30-01.tar.gz .
|
||||
# sudo tar -xzf k8s_storage_*.tar.gz -C /home/kimjunte/k8s_storage
|
||||
20
github_runner/install/values.yaml
Normal file
20
github_runner/install/values.yaml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
runner:
|
||||
name: mist-runner
|
||||
labels:
|
||||
- mist
|
||||
- self-hosted
|
||||
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: aws-secrets
|
||||
|
||||
volumeMounts:
|
||||
- name: k8s-storage
|
||||
mountPath: /k8s_storage
|
||||
readOnly: true
|
||||
|
||||
volumes:
|
||||
- name: k8s-storage
|
||||
hostPath:
|
||||
path: /home/kimjunte/k8s_storage
|
||||
type: Directory
|
||||
8
mist_infra/README.md
Normal file
8
mist_infra/README.md
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
./scripts/bootstrap_microk8s.sh
|
||||
./mist_infra/cert_manager/install_cert_manager.sh
|
||||
./mist_infra/arc/update_arc.sh
|
||||
|
||||
|
||||
for each clusteR:
|
||||
|
||||
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.4/cert-manager.crds.yaml
|
||||
43
mist_infra/arc/update_arc.sh
Executable file
43
mist_infra/arc/update_arc.sh
Executable file
|
|
@ -0,0 +1,43 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# ==========================================================
|
||||
# Update / Install GitHub Actions Runner Controller (ARC)
|
||||
#
|
||||
# - Safe to run multiple times
|
||||
# - Applies changes from arc/values.yaml
|
||||
# - Does NOT assume fresh cluster
|
||||
#
|
||||
# ==========================================================
|
||||
|
||||
NAMESPACE="actions-runner-system"
|
||||
RELEASE_NAME="actions-runner-controller"
|
||||
CHART="actions-runner-controller/actions-runner-controller"
|
||||
VALUES_FILE="$(dirname "$0")/values.yaml"
|
||||
|
||||
echo "=== Updating ARC (GitHub Actions Runner Controller) ==="
|
||||
|
||||
echo "→ Ensuring namespace exists: $NAMESPACE"
|
||||
kubectl create namespace "$NAMESPACE" \
|
||||
--dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
echo "→ Adding Helm repo (if missing)"
|
||||
helm repo add actions-runner-controller \
|
||||
https://actions-runner-controller.github.io/actions-runner-controller \
|
||||
>/dev/null 2>&1 || true
|
||||
|
||||
helm repo update
|
||||
|
||||
echo "→ Applying Helm upgrade"
|
||||
helm upgrade --install \
|
||||
"$RELEASE_NAME" \
|
||||
"$CHART" \
|
||||
-n "$NAMESPACE" \
|
||||
-f "$VALUES_FILE"
|
||||
|
||||
echo
|
||||
echo "✅ ARC update complete"
|
||||
echo
|
||||
echo "Next steps:"
|
||||
echo "- kubectl get pods -n $NAMESPACE"
|
||||
echo "- kubectl get runners"
|
||||
19
mist_infra/arc/values.yaml
Normal file
19
mist_infra/arc/values.yaml
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
runner:
|
||||
labels:
|
||||
- mist
|
||||
- self-hosted
|
||||
|
||||
envFrom:
|
||||
- secretRef:
|
||||
name: aws-secrets
|
||||
|
||||
volumeMounts:
|
||||
- name: k8s-storage
|
||||
mountPath: /k8s_storage
|
||||
readOnly: true
|
||||
|
||||
volumes:
|
||||
- name: k8s-storage
|
||||
hostPath:
|
||||
path: /home/kimjunte/k8s_storage
|
||||
type: Directory
|
||||
13
mist_infra/cert_manager/install_cert_manager.sh
Normal file
13
mist_infra/cert_manager/install_cert_manager.sh
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.14.4/cert-manager.crds.yaml
|
||||
|
||||
helm repo add jetstack https://charts.jetstack.io >/dev/null 2>&1 || true
|
||||
helm repo update
|
||||
|
||||
kubectl create namespace cert-manager --dry-run=client -o yaml | kubectl apply -f -
|
||||
|
||||
helm upgrade --install cert-manager jetstack/cert-manager \
|
||||
--namespace cert-manager \
|
||||
--version v1.14.4
|
||||
0
mist_infra/rbac/infra-deployer-rbac.yaml
Normal file
0
mist_infra/rbac/infra-deployer-rbac.yaml
Normal file
42
mist_infra/scripts/backup_k9s_storage_to_s3.sh
Normal file
42
mist_infra/scripts/backup_k9s_storage_to_s3.sh
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# ----------------------------------------------------------
|
||||
# Weekly full backup of all Kubernetes PV data
|
||||
# ----------------------------------------------------------
|
||||
|
||||
SOURCE_DIR="/k8s_storage"
|
||||
TMP_DIR="/tmp/mist-backups"
|
||||
BUCKET="mist-backups"
|
||||
|
||||
DATE="$(date -u +%Y-%m-%d)"
|
||||
TIMESTAMP="$(date -u +%Y-%m-%d_%H-%M-%S)"
|
||||
HOST="$(hostname)"
|
||||
|
||||
ARCHIVE_NAME="k8s_storage_${HOST}_${TIMESTAMP}.tar.gz"
|
||||
ARCHIVE_PATH="${TMP_DIR}/${ARCHIVE_NAME}"
|
||||
|
||||
echo "=== Mist weekly PV backup ==="
|
||||
echo "Source: ${SOURCE_DIR}"
|
||||
echo "Archive: ${ARCHIVE_PATH}"
|
||||
echo "Bucket: s3://${BUCKET}/${DATE}/"
|
||||
|
||||
mkdir -p "${TMP_DIR}"
|
||||
|
||||
echo "→ Creating tarball"
|
||||
tar \
|
||||
--numeric-owner \
|
||||
--xattrs \
|
||||
--acls \
|
||||
-czf "${ARCHIVE_PATH}" \
|
||||
-C "${SOURCE_DIR}" .
|
||||
|
||||
echo "→ Uploading to S3"
|
||||
aws s3 cp \
|
||||
"${ARCHIVE_PATH}" \
|
||||
"s3://${BUCKET}/${DATE}/${ARCHIVE_NAME}"
|
||||
|
||||
echo "→ Cleaning up local temp"
|
||||
rm -f "${ARCHIVE_PATH}"
|
||||
|
||||
echo "✅ Backup complete"
|
||||
Loading…
Add table
Reference in a new issue