Aller au contenu principal

Installation Helm (Kubernetes)

Déploiement du mode client sur Kubernetes via Helm Chart.

Prérequis​

  • Kubernetes 1.25+
  • Helm 3.10+
  • kubectl configuré
  • Ingress Controller (nginx recommandé)
  • StorageClass disponible
# Vérifier les versions
kubectl version --client
helm version

Installation​

Étape 1 : Cloner le dépôt​

git clone https://github.com/MyElectricalData/myelectricaldata_new.git
cd myelectricaldata_new/helm

Étape 2 : Télécharger les dépendances​

helm dependency build ./myelectricaldata-client

Étape 3 : Créer un fichier de valeurs​

cat > my-values.yaml << EOF
secrets:
med:
apiUrl: "https://www.v2.myelectricaldata.fr/api"
clientId:
value: "cli_xxxxxxxxxxxxxxxxxxxxxxxxx"
clientSecret:
value: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Base SQLite sur le volume du backend (recommandé pour une nouvelle installation).
# Pour PostgreSQL, voir « Base de données » plus bas.
postgres:
enabled: false

ingress:
enabled: true
hosts:
- host: myelectricaldata.local
paths:
- path: /
pathType: Prefix
service: frontend
- path: /api
pathType: Prefix
service: backend
EOF

Étape 4 : Installer​

helm install myelectricaldata ./myelectricaldata-client -f my-values.yaml

Étape 5 : Vérifier​

# Statut
helm status myelectricaldata

# Pods
kubectl get pods -l app.kubernetes.io/instance=myelectricaldata

Architecture déployée​

┌────────────────────────────────────────────────────────┐
│ Kubernetes Cluster │
├────────────────────────────────────────────────────────┤
│ ┌─────────────┐ │
│ │ Ingress │ ◄─── myelectricaldata.local │
│ └──────┬──────┘ │
│ │ │
│ ┌────┴────┐ │
│ │ │ │
│ ┌─▼───────┐ ┌─▼───────┐ │
│ │Frontend │ │ Backend │ ────► API MED │
│ └─────────┘ └────┬────┘ │
│ │ │
│ ┌─────────┼─────────┐ │
│ │ │ │ │
│ ┌──────▼───┐ ┌───▼────────┐ │
│ │ SQLite / │ │VictoriaM. │ │
│ │PostgreSQL│ │ │ │
│ └──────────┘ └────────────┘ │
└────────────────────────────────────────────────────────┘

Configuration​

Secrets API MyElectricalData​

secrets:
med:
apiUrl: "https://www.v2.myelectricaldata.fr/api"
clientId:
value: "cli_xxx"
# Ou avec un secret existant :
# existingSecretRef:
# name: "med-credentials"
# key: "client-id"
clientSecret:
value: "xxx"

Base de données​

Trois choix, selon postgres.enabled et externalDatabase :

ValeursBaseRemarques
postgres.enabled: false, externalDatabase videSQLite dans /app/data (PVC du backend)Recommandé pour une nouvelle installation : pas de pod de base de données
postgres.enabled: true (défaut du chart)PostgreSQL 16 embarqué (sous-chart)Mot de passe requis
postgres.enabled: false, externalDatabase.host renseignéServeur PostgreSQL existantMot de passe ou existingSecret requis

Changer de base ne déplace pas les données : la nouvelle repart vide et se resynchronise depuis la passerelle.

SQLite​

postgres:
enabled: false

backend:
replicaCount: 1 # SQLite n'accepte qu'un seul pod écrivain
persistence:
enabled: true # la base vit sur ce volume
size: 5Gi

Le chart passe alors le déploiement du backend en stratégie Recreate (l'ancien pod s'arrête avant que le nouveau démarre, le volume étant en ReadWriteOnce) et refuse le rendu avec plusieurs réplicas, l'autoscaling, ou sans persistance.

Désinstallation

En mode SQLite, le PVC du backend porte helm.sh/resource-policy: keep, comme celui de PostgreSQL : helm uninstall le laisse en place et une réinstallation sous le même nom de release le reprend. Pour effacer les données, supprimez-le à la main (kubectl delete pvc <release>-myelectricaldata-client-backend). Sauvegarde : voir Sauvegarde SQLite, commandes à passer par kubectl exec et kubectl cp.

PostgreSQL embarqué​

postgres:
enabled: true
auth:
database: myelectricaldata_client
username: myelectricaldata
password: "" # Requis
# Ou secret existant :
# existingSecret: "postgres-credentials"
persistence:
enabled: true
size: 10Gi

VictoriaMetrics​

victoriametrics:
enabled: true
server:
retentionPeriod: "365d"
persistentVolume:
enabled: true
size: 10Gi

Exports domotique​

exports:
homeAssistant:
enabled: false
url: "http://homeassistant.local:8123"
token: ""

mqtt:
enabled: false
host: "mqtt.local"
port: 1883
topic: "myelectricaldata"

Ingress​

ingress:
enabled: true
className: "nginx"
hosts:
- host: myelectricaldata.local
paths:
- path: /
pathType: Prefix
service: frontend
- path: /api
pathType: Prefix
service: backend
tls: []
# - secretName: myelectricaldata-tls
# hosts:
# - myelectricaldata.local

Commandes utiles​

# Statut
helm status myelectricaldata

# Valeurs actuelles
helm get values myelectricaldata

# Mise à jour
helm upgrade myelectricaldata ./myelectricaldata-client -f my-values.yaml

# Désinstaller
helm uninstall myelectricaldata

# Logs backend
kubectl logs -l app.kubernetes.io/name=myelectricaldata-backend -f

Dépannage​

Pods en erreur​

# Événements
kubectl describe pod -l app.kubernetes.io/name=myelectricaldata-backend

# Logs
kubectl logs -l app.kubernetes.io/name=myelectricaldata-backend

Ingress non fonctionnel​

# Vérifier l'Ingress
kubectl describe ingress myelectricaldata

# Vérifier les Services
kubectl get svc -l app.kubernetes.io/instance=myelectricaldata

PVC en attente​

# Vérifier les PVC
kubectl get pvc -l app.kubernetes.io/instance=myelectricaldata

# Vérifier la StorageClass
kubectl get storageclass

Désinstallation​

# Supprimer le déploiement
helm uninstall myelectricaldata

# Supprimer les PVC (données)
kubectl delete pvc -l app.kubernetes.io/instance=myelectricaldata