Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018BAUeCFpDkRD6tU5wGsc1C
87 lines
3.8 KiB
Bash
Executable File
87 lines
3.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# =============================================================================
|
|
# 03 - Composants du cluster (cert-manager, namespaces, acces registre)
|
|
# =============================================================================
|
|
# A executer depuis VOTRE POSTE, kubeconfig de prod charge :
|
|
#
|
|
# export KUBECONFIG=~/.kube/xpeditis-prod.yaml
|
|
# REGISTRY_TOKEN=... bash 03-install-cluster-addons.sh
|
|
#
|
|
# cert-manager est installe depuis son manifeste statique officiel : pas de
|
|
# Helm a maintenir sur le cluster, une seule version epinglee, un seul fichier
|
|
# a relire en cas de doute.
|
|
set -euo pipefail
|
|
|
|
CERT_MANAGER_VERSION="${CERT_MANAGER_VERSION:-v1.16.2}"
|
|
REGISTRY_SERVER="${REGISTRY_SERVER:-rg.fr-par.scw.cloud}"
|
|
REGISTRY_TOKEN="${REGISTRY_TOKEN:-}"
|
|
NAMESPACE="${NAMESPACE:-xpeditis-prod}"
|
|
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
K8S_DIR="${HERE}/../k8s"
|
|
|
|
log() { printf '\n>>> %s\n' "$*"; }
|
|
|
|
kubectl version --output=yaml >/dev/null || { echo "kubectl ne joint pas le cluster." >&2; exit 1; }
|
|
|
|
# --- 1. Namespaces -----------------------------------------------------------
|
|
log "Namespaces"
|
|
kubectl apply -f "${K8S_DIR}/base/00-namespaces.yaml"
|
|
|
|
# --- 2. cert-manager ---------------------------------------------------------
|
|
if ! kubectl get ns cert-manager >/dev/null 2>&1; then
|
|
log "Installation de cert-manager ${CERT_MANAGER_VERSION}"
|
|
kubectl apply -f \
|
|
"https://github.com/cert-manager/cert-manager/releases/download/${CERT_MANAGER_VERSION}/cert-manager.yaml"
|
|
else
|
|
log "cert-manager deja present"
|
|
fi
|
|
|
|
log "Attente de cert-manager"
|
|
kubectl -n cert-manager rollout status deploy/cert-manager --timeout=180s
|
|
kubectl -n cert-manager rollout status deploy/cert-manager-webhook --timeout=180s
|
|
kubectl -n cert-manager rollout status deploy/cert-manager-cainjector --timeout=180s
|
|
|
|
# --- 3. Acces au registre Scaleway ------------------------------------------
|
|
# Le registre est prive : sans ce Secret, les pods restent en ImagePullBackOff.
|
|
if [[ -n "$REGISTRY_TOKEN" ]]; then
|
|
log "Secret d'acces au registre (${REGISTRY_SERVER})"
|
|
kubectl -n "$NAMESPACE" create secret docker-registry regcred \
|
|
--docker-server="$REGISTRY_SERVER" \
|
|
--docker-username=nologin \
|
|
--docker-password="$REGISTRY_TOKEN" \
|
|
--dry-run=client -o yaml | kubectl apply -f -
|
|
else
|
|
echo "AVERTISSEMENT: REGISTRY_TOKEN absent. Creez 'regcred' avant de deployer :"
|
|
echo " kubectl -n ${NAMESPACE} create secret docker-registry regcred \\"
|
|
echo " --docker-server=${REGISTRY_SERVER} --docker-username=nologin --docker-password=<token>"
|
|
fi
|
|
|
|
# --- 4. Emetteur ACME --------------------------------------------------------
|
|
# Le ClusterIssuer depend d'un Secret contenant le token API Cloudflare :
|
|
# il est chiffre SOPS et doit etre applique avant (secrets-apply.sh).
|
|
if kubectl -n cert-manager get secret cloudflare-api-token >/dev/null 2>&1; then
|
|
log "ClusterIssuer Let's Encrypt (DNS-01 Cloudflare)"
|
|
kubectl apply -f "${K8S_DIR}/cluster/cluster-issuer.yaml"
|
|
else
|
|
echo "AVERTISSEMENT: le Secret cert-manager/cloudflare-api-token est absent."
|
|
echo " Appliquez d'abord les secrets : bash scripts/secrets-apply.sh"
|
|
echo " puis : kubectl apply -f ${K8S_DIR}/cluster/cluster-issuer.yaml"
|
|
fi
|
|
|
|
# --- 5. Verifications --------------------------------------------------------
|
|
log "Etat"
|
|
kubectl get ns
|
|
kubectl -n cert-manager get pods
|
|
kubectl get clusterissuer 2>/dev/null || true
|
|
|
|
cat <<NEXT
|
|
|
|
=============================================================================
|
|
Composants du cluster installes.
|
|
=============================================================================
|
|
Etapes suivantes :
|
|
1. bash scripts/secrets-apply.sh # secrets SOPS -> cluster
|
|
2. bash scripts/deploy.sh <tag-image> # premier deploiement
|
|
=============================================================================
|
|
NEXT
|