Kubernetes API Delphi-client uit OpenAPI

Elke Kubernetes-cluster publiceert zijn API in OpenAPI-vorm — dezelfde beschrijving die kubectl en elke officiele taal-client consumeert. Wijs sgcOpenAPI op de spec en lever een typed Delphi-unit op die een Pascal-applicatie laat pods opsommen, deployments schalen, events bekijken en manifests toepassen via de gewone HTTPS-API.

Kubernetes + sgcOpenAPI

De Kubernetes-API-server stelt zijn eigen OpenAPI 2.0-document bloot op /openapi/v2 en een OpenAPI 3-document op /openapi/v3. sgcOpenAPI accepteert beide en converteert ze naar een gemeenschappelijk intern model.

Bron-spec

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

Auth

Bearer-token / client-certificaat / kubeconfig

Gegenereerde unit

sgcOpenAPI_Kubernetes

Platforms

Windows, macOS, Linux, iOS, Android

Download de spec uit het cluster en genereer

Elk cluster serveert zijn eigen spec, wat betekent dat de gegenereerde client exact in sync is met de API-versies, CRD’s en aggregated APIs die op dat cluster zijn geinstalleerd. Genereer opnieuw tegen een ander cluster om een andere versie te ondersteunen.

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;

De generator levert een klasse per Kubernetes-API-group/versie op — TsgcK8s_CoreV1, TsgcK8s_AppsV1, TsgcK8s_BatchV1, TsgcK8s_NetworkingV1, TsgcK8s_StorageV1, TsgcK8s_RbacV1 enzovoort — plus een top-level TsgcKubernetes-facade.

Lijst pods op in een namespace

Drie regels zodra authenticatie is opgezet. Het resultaat is een typed TsgcK8sPodList wiens items elk container-, condition- en status-veld uit de officiele API-referentie blootstellen.

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;

Schaal een deployment en bekijk events

Een Deployment schalen is een PATCH tegen de /scale-subresource. Events bekijken is een langlevende HTTP/1.1 chunked GET die de gegenereerde client als een typed enumerable blootstelt.

// 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;

Wat de gegenereerde unit je geeft

Omdat de spec uit het cluster wordt gehaald, belandt elke API-groep, versie en CRD die in dat cluster is geinstalleerd in de Delphi-unit.

Workloads

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

Services & networking

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

Storage

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

RBAC & policy

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

Custom resources

CRD’s die in je cluster zijn geinstalleerd verschijnen automatisch. Argo Rollouts, Cert Manager Certificates, Istio VirtualServices — als de operator een OpenAPI-schema heeft geregistreerd, genereert sgcOpenAPI er een typed klasse voor.

Watch- + log-streams

Langlopende endpoints (watch=true, container log follow=true) worden blootgesteld als enumerables die typed events opleveren zodra de server ze flusht.

Drie dingen om op te letten

Self-signed CA-certificaten

De meeste clusters gebruiken een self-signed cluster-CA. Lever de CA-bundle uit ~/.kube/config via CACertFile of schakel verificatie volledig uit met InsecureSkipTLSVerify := True — nuttig voor development-clusters maar nooit voor productie.

Token-expiry op ServiceAccount-tokens

Bound ServiceAccount-tokens (de standaard sinds Kubernetes 1.21) verlopen na een uur. Vernieuw het token door /var/run/secrets/kubernetes.io/serviceaccount/token opnieuw te lezen van binnen het cluster, of door de TokenRequest-API van buiten aan te roepen.

Server-Side Apply versus PATCH

Moderne controllers geven de voorkeur aan Server-Side Apply met Content-Type: application/apply-patch+yaml. De generator levert beide helpers — gebruik PatchNamespacedDeployment voor traditionele strategic-merge patches en de expliciete Apply-methode voor SSA.

Vanuit de blog

OpenAPI Delphi-parser

Hoe de parser real-world OpenAPI-specificaties afhandelt — inclusief de Kubernetes-stijl aggregated APIs.

Lees post →

OpenAPI-client + parser

Bijbehorende post die zowel de client-wrapper als de parser-internals introduceert.

Lees post →

sgcOpenAPI 2026.6

Nieuwste release-notes voor sgcOpenAPI — nieuwe generator-opties en parser-verbeteringen.

Lees post →

Stuur Kubernetes vandaag nog vanuit Delphi aan

sgcOpenAPI bevat de parser, code-generator, OpenAPI-server en de Amazon-, Google-, Microsoft- en Azure-SDK-bundels — een product, drie tiers.