OpenAPI'den Kubernetes API Delphi İstemcisi

Her Kubernetes kümesi API'sini OpenAPI biçiminde yayınlar — kubectl ve her resmi dil istemcisinin tükettiği aynı açıklama. sgcOpenAPI'yi spesifikasyona yönlendirin ve bir Pascal uygulamasının olağan HTTPS API üzerinden pod'ları listelemesine, dağıtımları ölçeklendirmesine, olayları izlemesine ve manifest'leri uygulamasına olanak tanıyan tipli bir Delphi birimi üretin.

Kubernetes + sgcOpenAPI

Kubernetes API sunucusu kendi OpenAPI 2.0 belgesini /openapi/v2 adresinde ve bir OpenAPI 3 belgesini /openapi/v3 adresinde sunar. sgcOpenAPI her ikisini de kabul eder ve bunları ortak bir dahili modele dönüştürür.

Kaynak spesifikasyonu

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

Kimlik doğrulama

Bearer belirteci / istemci sertifikası / kubeconfig

Üretilen birim

sgcOpenAPI_Kubernetes

Platformlar

Windows, macOS, Linux, iOS, Android

Spesifikasyonu kümeden indirin ve üretin

Her küme kendi spesifikasyonunu sunar, bu da üretilen istemcinin o kümeye yüklü API sürümleri, CRD'ler ve toplanmış API'lerle tam olarak senkronize olduğu anlamına gelir. Farklı bir sürümü desteklemek için farklı bir kümeye karşı yeniden üretin.

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;

Üretici, her Kubernetes API grubu/sürümü için bir sınıf üretir — TsgcK8s_CoreV1, TsgcK8s_AppsV1, TsgcK8s_BatchV1, TsgcK8s_NetworkingV1, TsgcK8s_StorageV1, TsgcK8s_RbacV1 vb. — ayrıca üst düzey bir TsgcKubernetes cephesi.

Bir ad alanındaki pod'ları listeleyin

Kimlik doğrulama ayarlandıktan sonra üç satır. Sonuç, öğeleri resmi API referansından her konteyner, koşul ve durum alanını sunan tipli bir TsgcK8sPodList nesnesidir.

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;

Bir dağıtımı ölçeklendirin ve olayları izleyin

Bir Deployment'ı ölçeklendirmek, /scale alt kaynağına karşı bir PATCH işlemidir. Olayları izlemek, üretilen istemcinin tipli bir numaralandırılabilir olarak sunduğu uzun ömürlü, parçalı bir HTTP/1.1 GET işlemidir.

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

Üretilen birim size ne sağlar

Spesifikasyon kümeden getirildiği için, o kümeye yüklü her API grubu, sürümü ve CRD'si Delphi biriminde yer alır.

İş yükleri

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

Hizmetler ve ağ

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

Depolama

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

RBAC ve politika

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

Özel kaynaklar

Kümenize yüklü CRD'ler otomatik olarak görünür. Argo Rollouts, Cert Manager Certificates, Istio VirtualServices — operatör bir OpenAPI şeması kaydettiyse, sgcOpenAPI bunun için tipli bir sınıf üretir.

İzleme + günlük akışları

Uzun süre çalışan uç noktalar (watch=true, konteyner günlüğü follow=true), sunucu bunları boşaltır boşaltmaz tipli olaylar üreten numaralandırılabilirler olarak sunulur.

Dikkat edilmesi gereken üç şey

Kendinden imzalı CA sertifikaları

Çoğu küme kendinden imzalı bir küme CA'sı kullanır. CA paketini ~/.kube/config dosyasından CACertFile aracılığıyla sağlayın veya InsecureSkipTLSVerify := True ile doğrulamayı tamamen devre dışı bırakın — geliştirme kümeleri için yararlıdır ancak üretim için asla.

ServiceAccount belirteçlerinde belirteç süresinin dolması

Bağlı ServiceAccount belirteçleri (Kubernetes 1.21'den bu yana varsayılan) bir saat sonra süreleri dolar. Belirteci, küme içinden /var/run/secrets/kubernetes.io/serviceaccount/token dosyasını yeniden okuyarak veya dışarıdan TokenRequest API'sini çağırarak yenileyin.

Server-Side Apply ile PATCH karşılaştırması

Modern denetleyiciler Content-Type: application/apply-patch+yaml ile Server-Side Apply yöntemini tercih eder. Üretici her iki yardımcıyı da üretir — geleneksel strategic-merge yamaları için PatchNamespacedDeployment ve SSA için açık Apply metodunu kullanın.

Blogdan

OpenAPI Delphi ayrıştırıcısı

Ayrıştırıcının gerçek dünya OpenAPI spesifikasyonlarını nasıl işlediği — Kubernetes tarzı toplanmış API'ler dahil.

Yazıyı okuyun →

OpenAPI istemcisi + ayrıştırıcı

Hem istemci sarmalayıcısını hem de ayrıştırıcının iç işleyişini tanıtan tamamlayıcı yazı.

Yazıyı okuyun →

sgcOpenAPI 2026.6

sgcOpenAPI için en son sürüm notları — yeni üretici seçenekleri ve ayrıştırıcı iyileştirmeleri.

Yazıyı okuyun →

Kubernetes'i bugün Delphi'den yönetin

sgcOpenAPI; ayrıştırıcıyı, kod üreticisini, OpenAPI sunucusunu ve Amazon, Google, Microsoft ile Azure SDK paketlerini sunar — tek ürün, üç kademe.