OpenAPI から Kubernetes API Delphi クライアント

すべての Kubernetes クラスタは API を OpenAPI 形式で公開します — kubectl とすべての公式言語クライアントが消費するのと同じ記述。sgcOpenAPI をその仕様に向け、Pascal アプリケーションが通常の HTTPS API 経由で Pod を一覧表示し、Deployment をスケーリングし、イベントを監視し、マニフェストを適用できる型付き Delphi ユニットを出力してください。

Kubernetes + sgcOpenAPI

Kubernetes API サーバーは /openapi/v2 で独自の OpenAPI 2.0 ドキュメントを、/openapi/v3 で OpenAPI 3 ドキュメントを公開します。sgcOpenAPI は両方を受け入れ、共通の内部モデルに変換します。

ソース仕様

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

認証

ベアラートークン/クライアント証明書/kubeconfig

生成ユニット

sgcOpenAPI_Kubernetes

プラットフォーム

Windows、macOS、Linux、iOS、Android

クラスタから仕様をダウンロードして生成

すべてのクラスタは独自の仕様を提供します。つまり生成されたクライアントは、そのクラスタにインストールされた API バージョン、CRD、集約 API と正確に同期しています。異なるバージョンをサポートするには異なるクラスタに対して再生成してください。

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;

ジェネレーターは Kubernetes API グループ/バージョンごとに 1 つのクラス — TsgcK8s_CoreV1TsgcK8s_AppsV1TsgcK8s_BatchV1TsgcK8s_NetworkingV1TsgcK8s_StorageV1TsgcK8s_RbacV1 など — に加えてトップレベルの TsgcKubernetes ファサードを出力します。

名前空間内の Pod を一覧表示

認証設定後、3 行で完了。結果は型付きの TsgcK8sPodList で、その項目は公式 API リファレンスからのすべてのコンテナ、条件、ステータスフィールドを公開します。

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;

Deployment をスケーリングしイベントを監視

Deployment のスケーリングは /scale サブリソースに対する PATCH です。イベントの監視は長寿命の HTTP/1.1 チャンク GET で、生成クライアントはこれを型付き列挙可能として公開します。

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

生成ユニットが提供するもの

仕様はクラスタから取得されるため、そのクラスタにインストールされたすべての API グループ、バージョン、CRD が Delphi ユニットに収まります。

ワークロード

AppsV1 — Deployments、StatefulSets、DaemonSets、ReplicaSets。BatchV1 — Jobs、CronJobs。CoreV1 — Pods、ReplicationControllers。

サービスとネットワーキング

CoreV1 — Services、Endpoints、ConfigMaps、Secrets。NetworkingV1 — Ingress、IngressClass、NetworkPolicy。DiscoveryV1 — EndpointSlices。

ストレージ

StorageV1 — StorageClasses、VolumeAttachments、CSIDrivers、CSINodes。CoreV1 — PersistentVolumes、PersistentVolumeClaims。

RBAC とポリシー

RbacV1 — Roles、RoleBindings、ClusterRoles、ClusterRoleBindings。PolicyV1 — PodDisruptionBudgets。AdmissionRegistrationV1 — ValidatingWebhookConfigurations。

カスタムリソース

クラスタにインストールされた CRD が自動的に表示されます。Argo Rollouts、Cert Manager Certificates、Istio VirtualServices — オペレーターが OpenAPI スキーマを登録していれば、sgcOpenAPI はそれに対する型付きクラスを生成します。

監視 + ログストリーム

長時間実行エンドポイント(watch=true、コンテナログ follow=true)は、サーバーがフラッシュするとすぐに型付きイベントを生成する列挙可能として公開されます。

注意すべき 3 点

自己署名 CA 証明書

ほとんどのクラスタは自己署名クラスタ CA を使用します。CACertFile 経由で ~/.kube/config から CA バンドルを提供するか、InsecureSkipTLSVerify := True で検証を完全に無効化してください — 開発クラスタには便利ですが本番では決して使用しないでください。

ServiceAccount トークンの期限切れ

バインドされた ServiceAccount トークン(Kubernetes 1.21 以降のデフォルト)は 1 時間後に期限切れになります。クラスタ内から /var/run/secrets/kubernetes.io/serviceaccount/token を再読み取りするか、外部から TokenRequest API を呼び出してトークンを更新してください。

Server-Side Apply vs PATCH

モダンなコントローラーは Content-Type: application/apply-patch+yaml での Server-Side Apply を好みます。ジェネレーターは両方のヘルパーを出力します — 従来の strategic-merge パッチには PatchNamespacedDeployment を、SSA には明示的な Apply メソッドを使用してください。

ブログから

OpenAPI Delphi パーサー

パーサーが Kubernetes スタイルの集約 API を含む実世界の OpenAPI 仕様をどう扱うか。

投稿を読む →

OpenAPI クライアント + パーサー

クライアントラッパーとパーサー内部の両方を紹介する姉妹投稿。

投稿を読む →

sgcOpenAPI 2026.6

sgcOpenAPI の最新リリースノート — 新しいジェネレーターオプションとパーサーの改善。

投稿を読む →

今日 Delphi から Kubernetes を駆動

sgcOpenAPI には、パーサー、コードジェネレーター、OpenAPI サーバー、Amazon、Google、Microsoft、Azure SDK バンドルが同梱されています — 1 製品、3 ティア。