Client Delphi pour l'API Kubernetes depuis OpenAPI

Chaque cluster Kubernetes publie son API sous forme OpenAPI — la même description que kubectl et chaque client de langage officiel consomment. Pointez sgcOpenAPI sur la spec et émettez une unité Delphi typée qui permet à une application Pascal de lister des pods, scaler des deployments, observer des événements et appliquer des manifests sur l'API HTTPS habituelle.

Kubernetes + sgcOpenAPI

Le serveur d'API Kubernetes expose son propre document OpenAPI 2.0 à /openapi/v2 et un document OpenAPI 3 à /openapi/v3. sgcOpenAPI accepte les deux et les convertit en un modèle interne commun.

Spec source

GET https://<cluster>/openapi/v3

Auth

Bearer token / certificat client / kubeconfig

Unité générée

sgcOpenAPI_Kubernetes

Plateformes

Windows, macOS, Linux, iOS, Android

Télécharger la spec depuis le cluster et générer

Chaque cluster sert sa propre spec, ce qui signifie que le client généré est exactement synchronisé avec les versions d'API, les CRD et les API agrégées installées sur ce cluster. Regénérez contre un autre cluster pour supporter une autre version.

uses
  sgcOpenAPI_Parser, sgcOpenAPI_Generator;

var
  vParser: TsgcOpenAPIParser;
  vGen: TsgcOpenAPIGenerator;
begin
  vParser := TsgcOpenAPIParser.Create(nil);
  try
    // Load directly from the cluster (mTLS or bearer)
    vParser.LoadFromURL('https://10.0.0.1:6443/openapi/v3',
      ['Authorization: Bearer ' + vToken]);

    Memo1.Lines.Add(Format('k8s spec: %d paths, %d schemas',
      [vParser.Paths.Count, vParser.Schemas.Count]));

    vGen := TsgcOpenAPIGenerator.Create(nil);
    try
      vGen.Parser := vParser;
      vGen.OutputUnit := 'sgcOpenAPI_Kubernetes';
      vGen.OutputFolder := 'C:\Generated\k8s';
      vGen.GroupBy := gbTag;
      vGen.Generate;
    finally
      vGen.Free;
    end;
  finally
    vParser.Free;
  end;
end;

Le générateur émet une classe par groupe/version d'API Kubernetes — TsgcK8s_CoreV1, TsgcK8s_AppsV1, TsgcK8s_BatchV1, TsgcK8s_NetworkingV1, TsgcK8s_StorageV1, TsgcK8s_RbacV1 et ainsi de suite — plus une façade top-level TsgcKubernetes.

Lister les pods dans un namespace

Trois lignes une fois l'authentification configurée. Le résultat est un TsgcK8sPodList typé dont les éléments exposent chaque conteneur, condition et champ de statut de la référence d'API officielle.

uses sgcOpenAPI_Kubernetes;

var
  vK8s: TsgcKubernetes;
  vPods: TsgcK8sPodList;
  vPod: TsgcK8sPod;
begin
  vK8s := TsgcKubernetes.Create(nil);
  try
    vK8s.Server := 'https://10.0.0.1:6443';
    vK8s.Token := vToken;
    vK8s.ClientCertFile := 'C:\kube\client.crt';
    vK8s.ClientKeyFile := 'C:\kube\client.key';
    vK8s.CACertFile := 'C:\kube\ca.crt';

    vPods := vK8s.CoreV1.ListNamespacedPod(
      Namespace := 'production',
      LabelSelector := 'app=api,tier=backend');
    try
      for vPod in vPods.Items do
        Memo1.Lines.Add(Format('%-30s  %s  node=%s',
          [vPod.Metadata.Name, vPod.Status.Phase, vPod.Spec.NodeName]));
    finally
      vPods.Free;
    end;
  finally
    vK8s.Free;
  end;
end;

Scaler un deployment et observer les événements

Scaler un Deployment est un PATCH contre la sous-ressource /scale. Observer les événements est un GET HTTP/1.1 chunked longue durée que le client généré expose comme un enumerable typé.

// Scale "api" Deployment in "production" to 5 replicas
var
  vScale: TsgcK8sScale;
begin
  vScale := vK8s.AppsV1.ReadNamespacedDeploymentScale(
    Name := 'api', Namespace := 'production');
  try
    vScale.Spec.Replicas := 5;
    vK8s.AppsV1.ReplaceNamespacedDeploymentScale(
      Name := 'api', Namespace := 'production',
      Body := vScale);
  finally
    vScale.Free;
  end;

  // Watch events on Pods in the same namespace
  for vEvent in vK8s.CoreV1.WatchNamespacedPodList(
    Namespace := 'production',
    ResourceVersion := vPods.Metadata.ResourceVersion,
    TimeoutSeconds := 600) do
  begin
    Memo1.Lines.Add(Format('[%s] %s — %s',
      [vEvent.EventType, vEvent.&Object.Metadata.Name,
       vEvent.&Object.Status.Phase]));
  end;
end;

Ce que l'unité générée vous donne

Parce que la spec est récupérée depuis le cluster, chaque groupe d'API, version et CRD installé dans ce cluster se retrouve dans l'unité Delphi.

Charges de travail

AppsV1 — Deployments, StatefulSets, DaemonSets, ReplicaSets. BatchV1 — Jobs, CronJobs. CoreV1 — Pods, ReplicationControllers.

Services et réseau

CoreV1 — Services, Endpoints, ConfigMaps, Secrets. NetworkingV1 — Ingress, IngressClass, NetworkPolicy. DiscoveryV1 — EndpointSlices.

Stockage

StorageV1 — StorageClasses, VolumeAttachments, CSIDrivers, CSINodes. CoreV1 — PersistentVolumes, PersistentVolumeClaims.

RBAC et politique

RbacV1 — Roles, RoleBindings, ClusterRoles, ClusterRoleBindings. PolicyV1 — PodDisruptionBudgets. AdmissionRegistrationV1 — ValidatingWebhookConfigurations.

Ressources personnalisées

Les CRD installées dans votre cluster apparaissent automatiquement. Argo Rollouts, Certificates Cert Manager, VirtualServices Istio — si l'opérateur a enregistré un schéma OpenAPI, sgcOpenAPI génère une classe typée pour lui.

Watch et flux de logs

Les endpoints longue durée (watch=true, log de conteneur follow=true) sont exposés comme des enumerables qui yieldent des événements typés dès que le serveur les flush.

Trois choses à surveiller

Certificats CA auto-signés

La plupart des clusters utilisent une CA de cluster auto-signée. Fournissez le bundle CA depuis ~/.kube/config via CACertFile ou désactivez la vérification entièrement avec InsecureSkipTLSVerify := True — utile pour les clusters de développement mais jamais pour la production.

Expiration des tokens ServiceAccount

Les tokens ServiceAccount bound (le défaut depuis Kubernetes 1.21) expirent après une heure. Rafraîchissez le token en relisant /var/run/secrets/kubernetes.io/serviceaccount/token depuis l'intérieur du cluster, ou en appelant l'API TokenRequest depuis l'extérieur.

Server-Side Apply versus PATCH

Les contrôleurs modernes préfèrent Server-Side Apply avec Content-Type: application/apply-patch+yaml. Le générateur émet les deux helpers — utilisez PatchNamespacedDeployment pour les patches strategic-merge traditionnels et la méthode Apply explicite pour SSA.

Depuis le blog

Parseur OpenAPI Delphi

Comment le parseur gère les spécifications OpenAPI du monde réel — y compris les API agrégées style Kubernetes.

Lire le billet →

Client OpenAPI + parseur

Billet compagnon qui présente à la fois le wrapper client et les internes du parseur.

Lire le billet →

sgcOpenAPI 2026.6

Dernières notes de release pour sgcOpenAPI — nouvelles options de générateur et améliorations du parseur.

Lire le billet →

Pilotez Kubernetes depuis Delphi aujourd'hui

sgcOpenAPI livre le parseur, le générateur de code, le serveur OpenAPI et les bundles SDK Amazon, Google, Microsoft et Azure — un produit, trois niveaux.