Plateforme d'Internal Developer Platform (IDP) permettant de provisionner des VMs GCP Compute Engine en self-service via un portail web, orchestrée par GitHub Actions + ArgoCD + Crossplane.
Frontend (HTML/JS)
└─ GitHub API (workflow_dispatch)
└─ GitHub Actions (génère le Claim YAML, commit dans le repo)
└─ ArgoCD (détecte le changement, sync vers K8s)
└─ Crossplane (reconcile le Claim → crée la VM sur GCP)
| Composant | Rôle |
|---|---|
| Kind | Cluster Kubernetes local |
| Crossplane | Contrôleur Kubernetes qui gère les ressources GCP via l'API K8s |
| Provider GCP Compute | Provider Upbound pour Crossplane (Compute Engine) |
| ArgoCD | GitOps — synchronise les Claims du repo vers le cluster |
| GitHub Actions | CI/CD — génère les manifests Crossplane à partir du formulaire |
| Frontend | Portail développeur (HTML/CSS/JS vanilla) |
- kind
- kubectl
- Helm
- Un projet GCP avec un compte de service (fichier JSON) ayant le rôle
Compute Admin - Un repo GitHub (public ou privé avec deploy key)
git clone https://github.com/Shinr0/platform-project.git
cd platform-project
# Generer les credentials GCP via ADC :
gcloud auth application-default login
# Le script utilise par defaut ~/.config/gcloud/application_default_credentials.json
# Optionnel : forcer le project ID
export GCP_PROJECT_ID="your-gcp-project-id"./scripts/setup.shCe script va :
- Créer un cluster Kind
platform-eng - Installer Crossplane + le provider GCP Compute
- Configurer les credentials GCP dans Crossplane
- Appliquer la XRD et la Composition (API custom
VirtualMachine) - Installer ArgoCD
- Déployer l'Application ArgoCD qui surveille
crossplane/claims/
# Accéder à l'UI ArgoCD
kubectl port-forward svc/argo-cd-argocd-server -n argocd 8080:80
# Récupérer le mot de passe admin
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -dOuvrir http://localhost:8080 et se connecter avec admin / <mot de passe>.
Important : mettre à jour l'URL du repo dans argocd/application-claims.yaml avant d'appliquer.
# Ouvrir directement dans le navigateur
open frontend/index.html
# ou
python3 -m http.server 3000 -d frontendAu premier lancement, configurer dans Settings :
- GitHub Token : un PAT avec les scopes
repoetworkflow - Repository :
owner/platform-engineering
Remplir le formulaire et cliquer sur Create VM. Le flow :
- Le frontend trigger le workflow GitHub Actions
create-vm.yml - GitHub Actions génère un fichier
crossplane/claims/<vm-name>.yamlet le commit - ArgoCD détecte le nouveau fichier et l'applique sur le cluster
- Crossplane crée la VM sur GCP
.github/workflows/
create-vm.yml # Workflow de création de VM
delete-vm.yml # Workflow de suppression de VM
crossplane/
provider/
provider-gcp-compute.yaml # Installation du provider Upbound
provider-config.yaml # Configuration credentials GCP
compositions/
xrd-vm.yaml # API custom (CompositeResourceDefinition)
composition-vm.yaml # Mapping vers GCP Compute Instance
claims/ # Répertoire GitOps (watched by ArgoCD)
argocd/
application-claims.yaml # Application ArgoCD
frontend/
index.html # Portail développeur
scripts/
setup.sh # Script de setup complet
La XRD expose une ressource VirtualMachine avec les paramètres suivants :
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
vmName |
string | requis | Nom de l'instance Compute Engine |
machineType |
string | e2-micro |
Type de machine GCP |
zone |
string | europe-west1-b |
Zone GCP |
diskSizeGb |
integer | 20 |
Taille du disque de boot en GB |
imageFamily |
string | debian-12 |
Famille d'image OS |
Exemple de Claim :
apiVersion: compute.platform.local/v1alpha1
kind: VirtualMachine
metadata:
name: my-dev-server
namespace: default
spec:
parameters:
vmName: my-dev-server
machineType: e2-small
zone: europe-west1-b
diskSizeGb: 30
imageFamily: debian-12# Vérifier l'état de Crossplane
kubectl get providers
kubectl get providerconfigs
# Vérifier les compositions
kubectl get xrd
kubectl get compositions
# Voir les VMs gérées par Crossplane
kubectl get virtualmachines
kubectl get instance.compute.gcp.upbound.io
# Voir les syncs ArgoCD
kubectl get applications -n argocd
# Logs Crossplane
kubectl logs -n crossplane-system -l app=crossplane- Provider pas Healthy : vérifier les credentials GCP (
kubectl describe provider upbound-provider-gcp-compute) - ArgoCD ne sync pas : vérifier l'URL du repo et les credentials dans ArgoCD
- VM pas créée sur GCP : vérifier les logs du provider (
kubectl logs -n crossplane-system -l pkg.crossplane.io/revision) - Erreur 403 sur GitHub API : vérifier que le PAT a les scopes
repoetworkflow