Kubernetes
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ération | Type | Description |
|---|---|---|
| Lister les espaces de noms | action | Espaces de noms visibles (droit « list namespaces » au niveau du cluster). |
| Lister des Pods, Deployments ou Services | action | Liste filtrable par libellés et champs, pagination bornée (500 au plus). |
| Obtenir un Pod, Deployment ou Service | action | Lit une ressource et son état. |
| Lire les journaux d'un pod | action | Derniè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 manuelle | action | Fixe le nombre de réplicas (valeur absolue, rejouable sans effet supplémentaire). |
| Redémarrer un Deploymenteffet externe : demande une confirmation avant une exécution manuelle | action | Redé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 manuelle | action | Change l'image d'un conteneur du Deployment (déploiement progressif). |
| Créer un jobeffet externe : demande une confirmation avant une exécution manuelle | action | Cré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énements | action | État du job, de ses pods et événements associés. |
| Pod créé, modifié ou supprimé | déclencheur | Démarre le workflow quand un pod est créé, change d'état (phase, disponibilité, redémarrages) ou est supprimé. |
| Changement de statut de Deployment | déclencheur | Démarre le workflow quand la disponibilité ou la progression d'un Deployment change (statut healthy, progressing ou degraded). |
| Événement Warning | déclencheur | Dé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
| Champ | Description |
|---|---|
| URL de l'API server | Ex. https://api.cluster.example.com:6443 (champ server du kubeconfig). |
| Jeton du compte de service | kubectl create token orkyvo -n production --duration=8760h, ou secret kubernetes.io/service-account-token. Chiffré et masqué partout. |
| Autorité de certification | PEM 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éfaut | Utilisé 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: v1kind: ServiceAccountmetadata: { name: orkyvo, namespace: production }---apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata: { 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/v1kind: RoleBindingmetadata: { 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
| Action | API | Remarques |
|---|---|---|
| Lister les espaces de noms | GET /api/v1/namespaces | Droit au niveau du cluster. |
| Lister des Pods, Deployments ou Services | GET …/pods, /apis/apps/v1/…/deployments, …/services | labelSelector, fieldSelector ; pagination limit / continue, 500 au plus. |
| Obtenir une ressource | GET …/{nom} | Vue synthétique (état, disponibilité, redémarrages, conditions) ; objet complet en option. |
| Lire les journaux d'un pod | GET …/pods/{pod}/log | tailLines ≤ 5 000, limitBytes ≤ 1 Mo, sinceSeconds ≤ 24 h, conteneur précédent. |
| Mettre à l'échelle | PATCH …/deployments/{nom}/scale (merge-patch) | Valeur absolue : rejouable sans effet supplémentaire. |
| Redémarrer | PATCH …/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'image | PATCH du conteneur nommé | Erreur claire si le conteneur n'existe pas. |
| Créer un job | POST /apis/batch/v1/…/jobs | Nom déterministe : une relance reçoit 409 et renvoie le job existant (existing: true). |
| Job et événements | Job, pods job-name=…, événements associés | Diagnostic 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 :
- Premier passage : liste (
resourceVersionde la collection, état connu des objets) ; aucun événement émis. - 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. - Reprise : le
resourceVersionest conservé en base ; après un redémarrage, le watch reprend depuis cette version. - 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. - Dédoublonnage : identifiant stable par événement (
uid+resourceVersion, ou nombre d'occurrences pour les événements Warning).
| Déclencheur | Ressource surveillée | Émis quand |
|---|---|---|
| Pod créé, modifié ou supprimé | pods | Création, suppression, ou changement de phase, disponibilité, redémarrages, motif d'attente. |
| Changement de statut de Deployment | deployments | Réplicas prêts / disponibles / à jour, conditions Available et Progressing ; statut healthy, progressing ou degraded. |
| Événement Warning | events (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.