Add Harbor/Ceph runbooks and align single-node Ceph docs with abr deployment.
Document registry ingress split, image mirroring, loop OSD setup, and platform integration paths.
This commit is contained in:
+52
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env bash
|
||||
# Install Rook-Ceph operator + cluster + CloudHost bucket extras.
|
||||
# Usage: ./scripts/install.sh [single-node|multi-node]
|
||||
set -euo pipefail
|
||||
|
||||
PROFILE="${1:-single-node}"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
CHART_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
ROOK_NS="rook-ceph"
|
||||
EXTRAS_NS="cloudhost-builds"
|
||||
CLUSTER_VALUES="${CHART_DIR}/values-rook-cluster-${PROFILE}.yaml"
|
||||
|
||||
if [[ ! -f "${CLUSTER_VALUES}" ]]; then
|
||||
echo "Unknown profile: ${PROFILE} (missing ${CLUSTER_VALUES})" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "==> Profile: ${PROFILE}"
|
||||
echo "==> Adding rook-release helm repo"
|
||||
helm repo add rook-release https://charts.rook.io/release 2>/dev/null || true
|
||||
helm repo update rook-release
|
||||
|
||||
echo "==> [1/4] Installing Rook operator in ${ROOK_NS}"
|
||||
helm upgrade --install rook-ceph rook-release/rook-ceph \
|
||||
--namespace "${ROOK_NS}" \
|
||||
--create-namespace \
|
||||
--wait \
|
||||
--timeout 10m
|
||||
|
||||
echo "==> [2/4] Waiting for Rook operator deployment"
|
||||
kubectl -n "${ROOK_NS}" rollout status deploy/rook-ceph-operator --timeout=300s
|
||||
|
||||
echo "==> [3/4] Installing Ceph cluster (${CLUSTER_VALUES})"
|
||||
helm upgrade --install rook-ceph-cluster rook-release/rook-ceph-cluster \
|
||||
--namespace "${ROOK_NS}" \
|
||||
-f "${CLUSTER_VALUES}" \
|
||||
--wait \
|
||||
--timeout 25m
|
||||
|
||||
echo "==> Waiting for CephCluster phase = Ready (up to 20 min)"
|
||||
"${SCRIPT_DIR}/wait-ceph-ready.sh" 1200
|
||||
|
||||
echo "==> [4/4] Installing CloudHost Ceph extras (ObjectBucketClaim) in ${EXTRAS_NS}"
|
||||
kubectl create namespace "${EXTRAS_NS}" 2>/dev/null || true
|
||||
helm upgrade --install cloudhost-ceph "${CHART_DIR}" \
|
||||
--namespace "${EXTRAS_NS}" \
|
||||
-f "${CHART_DIR}/values.yaml" \
|
||||
--wait \
|
||||
--timeout 15m
|
||||
|
||||
echo ""
|
||||
echo "==> Done. Run ./scripts/verify.sh to confirm health and print integration hints."
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# Remove CloudHost extras + Rook cluster + operator (DATA LOSS).
|
||||
set -euo pipefail
|
||||
|
||||
read -r -p "This deletes ALL Ceph data. Type 'delete-ceph' to continue: " CONFIRM
|
||||
if [[ "${CONFIRM}" != "delete-ceph" ]]; then
|
||||
echo "Aborted."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
helm uninstall cloudhost-ceph -n cloudhost-builds 2>/dev/null || true
|
||||
helm uninstall rook-ceph-cluster -n rook-ceph 2>/dev/null || true
|
||||
helm uninstall rook-ceph -n rook-ceph 2>/dev/null || true
|
||||
|
||||
echo "Waiting for Rook resources to terminate..."
|
||||
sleep 15
|
||||
kubectl -n rook-ceph get pods 2>/dev/null || true
|
||||
|
||||
cat <<'EOF'
|
||||
|
||||
IMPORTANT: On each node, wipe Rook state before reinstalling:
|
||||
sudo rm -rf /var/lib/rook
|
||||
sudo rm -rf /var/lib/rook/osd
|
||||
|
||||
For raw-disk OSDs also zap disks (see RUNBOOK-CEPH.fa.md).
|
||||
EOF
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOK_NS="rook-ceph"
|
||||
EXTRAS_NS="cloudhost-builds"
|
||||
|
||||
echo "=== StorageClasses ==="
|
||||
kubectl get storageclass | grep -E 'NAME|rook-ceph' || true
|
||||
|
||||
echo ""
|
||||
echo "=== Ceph status ==="
|
||||
kubectl -n "${ROOK_NS}" exec deploy/rook-ceph-tools -- ceph status 2>/dev/null || echo "(tools pod not ready yet)"
|
||||
|
||||
echo ""
|
||||
echo "=== OSD / MON pods ==="
|
||||
kubectl -n "${ROOK_NS}" get pods -l app=rook-ceph-osd 2>/dev/null || kubectl -n "${ROOK_NS}" get pods | grep -E 'osd|mon|mgr|rgw' || true
|
||||
|
||||
echo ""
|
||||
echo "=== Object bucket claim ==="
|
||||
kubectl -n "${EXTRAS_NS}" get obc,app-sources 2>/dev/null || kubectl -n "${EXTRAS_NS}" get obc 2>/dev/null || true
|
||||
|
||||
echo ""
|
||||
echo "=== Platform credentials secret ==="
|
||||
if kubectl -n "${EXTRAS_NS}" get secret ceph-app-sources-credentials >/dev/null 2>&1; then
|
||||
echo "Secret ceph-app-sources-credentials exists"
|
||||
kubectl -n "${EXTRAS_NS}" get secret ceph-app-sources-credentials -o jsonpath='{.data.SOURCE_STORAGE_BUCKET}' | base64 -d
|
||||
echo ""
|
||||
else
|
||||
echo "Secret ceph-app-sources-credentials not ready — check bucket sync job:"
|
||||
kubectl -n "${EXTRAS_NS}" get jobs,pods | grep bucket-sync || true
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "=== Suggested backend env ==="
|
||||
kubectl -n "${EXTRAS_NS}" get configmap cloudhost-ceph-integration -o yaml 2>/dev/null | sed -n '/PLATFORM_/p;/SOURCE_STORAGE_ENDPOINT/p' || true
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
#!/usr/bin/env bash
|
||||
# Wait until Ceph reports HEALTH_OK or HEALTH_WARN (single-node often stays WARN).
|
||||
set -euo pipefail
|
||||
|
||||
TIMEOUT="${1:-900}"
|
||||
ROOK_NS="rook-ceph"
|
||||
START=$(date +%s)
|
||||
|
||||
echo "Waiting for rook-ceph-tools deployment..."
|
||||
for _ in $(seq 1 60); do
|
||||
if kubectl -n "${ROOK_NS}" get deploy rook-ceph-tools >/dev/null 2>&1; then
|
||||
if kubectl -n "${ROOK_NS}" rollout status deploy/rook-ceph-tools --timeout=120s 2>/dev/null; then
|
||||
break
|
||||
fi
|
||||
fi
|
||||
sleep 5
|
||||
done
|
||||
|
||||
while true; do
|
||||
NOW=$(date +%s)
|
||||
if (( NOW - START > TIMEOUT )); then
|
||||
echo "Timed out after ${TIMEOUT}s waiting for Ceph health" >&2
|
||||
kubectl -n "${ROOK_NS}" get cephcluster,pod -o wide || true
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if kubectl -n "${ROOK_NS}" get deploy rook-ceph-tools >/dev/null 2>&1; then
|
||||
HEALTH=$(kubectl -n "${ROOK_NS}" exec deploy/rook-ceph-tools -- ceph health 2>/dev/null || echo "unknown")
|
||||
echo "Ceph health: ${HEALTH}"
|
||||
if [[ "${HEALTH}" == "HEALTH_OK" || "${HEALTH}" == HEALTH_WARN* ]]; then
|
||||
PHASE=$(kubectl -n "${ROOK_NS}" get cephcluster rook-ceph -o jsonpath='{.status.phase}' 2>/dev/null || echo "")
|
||||
echo "CephCluster phase: ${PHASE}"
|
||||
if [[ "${PHASE}" == "Ready" ]]; then
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
sleep 15
|
||||
done
|
||||
Reference in New Issue
Block a user