Aller au contenu

Kubernetes

Maintenu par OrkyvoVersion 1.0.0Inclus dans l'offre DevOps9 actions · 3 déclencheurs

Pods, Deployments, Services, journaux, mise à l'échelle, redémarrage, images et jobs, avec surveillance des changements.

Intégration maintenue par Orkyvo pour tout cluster Kubernetes conforme (EKS, GKE, AKS, k3s, RKE2, distributions sur site). Listez et lisez espaces de noms, Pods, Deployments et Services, lisez les journaux d'un pod avec limites de taille et de durée, mettez un Deployment à l'échelle, redémarrez-le progressivement, changez l'image d'un conteneur, créez un job et suivez ses événements. Déclencheurs : création, modification ou suppression de pod, changement de statut de Deployment, événements Warning. Fonctionne avec des clusters privés et une autorité de certification interne, avec un compte de service aux droits limités (aucun cluster-admin).

Opérations

OpérationTypeDescription
Lister les espaces de nomsactionEspaces de noms visibles (droit « list namespaces » au niveau du cluster).
Lister des Pods, Deployments ou ServicesactionListe filtrable par libellés et champs, pagination bornée (500 au plus).
Obtenir un Pod, Deployment ou ServiceactionLit une ressource et son état.
Lire les journaux d'un podactionDernières lignes d'un conteneur, limitées en taille (1 Mo au plus) et en durée (24 h au plus).
Mettre un Deployment à l'échelleeffet externe : demande une confirmation avant une exécution manuelleactionFixe le nombre de réplicas (valeur absolue, rejouable sans effet supplémentaire).
Redémarrer un Deploymenteffet externe : demande une confirmation avant une exécution manuelleactionRedémarrage progressif (rolling restart) par annotation du modèle de pod ; une nouvelle tentative de la même étape ne redémarre pas une seconde fois.
Mettre à jour l'image d'un conteneureffet externe : demande une confirmation avant une exécution manuelleactionChange l'image d'un conteneur du Deployment (déploiement progressif).
Créer un jobeffet externe : demande une confirmation avant une exécution manuelleactionCrée un Job (une exécution, sans relance par défaut). Nom déterministe : une nouvelle tentative renvoie le job existant au lieu d'en créer un second.
Obtenir un job et ses événementsactionÉtat du job, de ses pods et événements associés.
Pod créé, modifié ou supprimédéclencheurDémarre le workflow quand un pod est créé, change d'état (phase, disponibilité, redémarrages) ou est supprimé.
Changement de statut de DeploymentdéclencheurDémarre le workflow quand la disponibilité ou la progression d'un Deployment change (statut healthy, progressing ou degraded).
Événement WarningdéclencheurDémarre le workflow pour chaque événement Kubernetes de type Warning (ex. BackOff, FailedScheduling, Unhealthy), à chaque nouvelle occurrence.

Connexion

Jeton d'un compte de service dédié, lié à un Role limité à l'espace de noms (exemples RBAC dans la documentation). « Tester la connexion » vérifie l'identité, la version et chaque droit utilisé, sans rien modifier.

Documentation

Kubernetes

Intégration maintenue par Orkyvo (non certifiée par la CNCF ni par un fournisseur de cloud) pour tout cluster Kubernetes conforme, version 1.24 ou ultérieure : EKS, GKE, AKS, k3s, RKE2, clusters sur site.

Connexion

ChampDescription
URL de l'API serverEx. https://api.cluster.example.com:6443 (champ server du kubeconfig).
Jeton du compte de servicekubectl create token orkyvo -n production --duration=8760h, ou secret kubernetes.io/service-account-token. Chiffré et masqué partout.
Autorité de certificationPEM du cluster (certificate-authority-data du kubeconfig, décodé). Ajoutée aux autorités publiques pour cette connexion uniquement ; la vérification TLS n'est jamais désactivée.
Espace de noms par défautUtilisé quand un bloc ne précise pas d'espace de noms.

Cluster privé. L'API server d'un cluster privé (ex. 10.0.12.4:6443) est refusée par défaut ; un administrateur de la plateforme peut autoriser cette plage et ce port pour cette organisation et cette connexion (Administration → Réseaux privés). Boucle locale, lien local et métadonnées cloud restent toujours refusés ; chaque redirection est revérifiée.

« Tester la connexion » lit /version, liste un pod de l'espace de noms, puis vérifie chaque droit utilisé par le nœud avec SelfSubjectAccessReview (lecture seule : rien n'est créé ni modifié) et affiche les droits manquants.

RBAC : droits limités, sans cluster-admin

Compte de service et rôle limités à un espace de noms :

apiVersion: v1
kind: ServiceAccount
metadata: { name: orkyvo, namespace: production }
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata: { name: orkyvo, namespace: production }
rules:
# Lecture et surveillance (actions de lecture, déclencheurs)
- apiGroups: [""]
resources: [pods, pods/log, services, events]
verbs: [get, list, watch]
- apiGroups: [apps]
resources: [deployments]
verbs: [get, list, watch]
# Écritures : retirez les règles inutiles à vos workflows
- apiGroups: [apps]
resources: [deployments]
verbs: [patch] # redémarrage, image
- apiGroups: [apps]
resources: [deployments/scale]
verbs: [patch] # mise à l'échelle
- apiGroups: [batch]
resources: [jobs]
verbs: [get, list, create]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata: { name: orkyvo, namespace: production }
subjects: [{ kind: ServiceAccount, name: orkyvo, namespace: production }]
roleRef: { kind: Role, name: orkyvo, apiGroup: rbac.authorization.k8s.io }

Lecture seule : ne gardez que le premier bloc de règles. Lister les espaces de noms et l'espace de noms * exigent un ClusterRole (ex. get, list, watch sur namespaces, pods…) : à n'accorder que si nécessaire.

Actions

ActionAPIRemarques
Lister les espaces de nomsGET /api/v1/namespacesDroit au niveau du cluster.
Lister des Pods, Deployments ou ServicesGET …/pods, /apis/apps/v1/…/deployments, …/serviceslabelSelector, fieldSelector ; pagination limit / continue, 500 au plus.
Obtenir une ressourceGET …/{nom}Vue synthétique (état, disponibilité, redémarrages, conditions) ; objet complet en option.
Lire les journaux d'un podGET …/pods/{pod}/logtailLines ≤ 5 000, limitBytes ≤ 1 Mo, sinceSeconds ≤ 24 h, conteneur précédent.
Mettre à l'échellePATCH …/deployments/{nom}/scale (merge-patch)Valeur absolue : rejouable sans effet supplémentaire.
RedémarrerPATCH …/deployments/{nom} (strategic-merge-patch)Annotation orkyvo.io/restarted-by dérivée de l'étape : une nouvelle tentative ne redémarre pas deux fois.
Mettre à jour l'imagePATCH du conteneur nomméErreur claire si le conteneur n'existe pas.
Créer un jobPOST /apis/batch/v1/…/jobsNom déterministe : une relance reçoit 409 et renvoie le job existant (existing: true).
Job et événementsJob, pods job-name=…, événements associésDiagnostic d'échec (ex. BackoffLimitExceeded).

Déclencheurs : fenêtres de watch (interrogation explicite)

Le moteur de workflows exécute les déclencheurs sous forme de passages courts et persistants ; un watch Kubernetes ouvert en continu n'est pas utilisé. Le mécanisme, explicite et documenté, est le suivant :

  1. Premier passage : liste (resourceVersion de la collection, état connu des objets) ; aucun événement émis.
  2. Passages suivants (30 s par défaut, 15 s minimum) : watch=1&resourceVersion=<curseur>&timeoutSeconds=3&allowWatchBookmarks=true. Les événements reçus pendant la fenêtre sont traités, les marque-pages font avancer le curseur.
  3. Reprise : le resourceVersion est conservé en base ; après un redémarrage, le watch reprend depuis cette version.
  4. Expiration (410 Gone) : la liste est relue et comparée à l'état connu ; créations, modifications et suppressions intervenues pendant l'interruption sont signalées, puis le watch reprend.
  5. Dédoublonnage : identifiant stable par événement (uid + resourceVersion, ou nombre d'occurrences pour les événements Warning).
DéclencheurRessource surveilléeÉmis quand
Pod créé, modifié ou supprimépodsCréation, suppression, ou changement de phase, disponibilité, redémarrages, motif d'attente.
Changement de statut de DeploymentdeploymentsRéplicas prêts / disponibles / à jour, conditions Available et Progressing ; statut healthy, progressing ou degraded.
Événement Warningevents (type=Warning)Nouvel événement ou nouvelle occurrence ; filtre par motif.

300 objets au plus sont suivis par déclencheur pour la resynchronisation : restreignez avec un espace de noms et un sélecteur de libellés.

Erreurs

401 jeton refusé ou expiré · 403 droit RBAC manquant (règle à ajouter indiquée) · 404 ressource ou espace de noms introuvable · 409 conflit / déjà existant · 410 version expirée (resynchronisation) · 429 et 5xx temporaires (lectures relancées selon Retry-After). Certificat refusé : ajoutez l'autorité du cluster.

Limites

  • Tests automatisés sur API simulées. Test réel recommandé sur un cluster jetable (kind, k3d) : voir docs/INTEGRATIONS.md.