コードジェネレーターの紹介 - CRD クライアント生成ツール

目次

バックグラウンド

枠組みの構築

コードインジェクション

テスト


バックグラウンド

client-go対応するclientset合計は、 k8s 組み込みリソースごとに提供されますinformerカスタム リソース オブジェクトを監視および操作する必要がある場合、2 つの方法があります —

  • client-go提供されているカスタム リソース オブジェクトを操作するために使用しますdynamicClient。もちろん、dynamicClientこれは実装に基づいているため、同じ目的を達成するためにRESTClient使用できます。RESTClient
  • クライアント コードを生成するために使用しますconde-generator。これにより、client-gok8s 組み込みリソース オブジェクトに提供されているのと同じ方法でカスタム リソースを監視および操作できます。

プロジェクトアドレス: https://github.com/kubernetes/code-generator

枠組みの構築

最初にクライアント コード全体を生成するには、まずフレームワークを構築する必要があります。

Red Hat からのブログ投稿—

Kubernetes の詳細: CustomResources のコード生成

操作の便宜のため、環境変数 $GOPATH ディレクトリの下にプロジェクトを作成し、go.mod で github リポジトリ アドレスとして pkg を宣言しました。 

モジュール github.com/octoboy233/ops-operator

これは Operator であるため、最初に依存関係を導入する必要もあります

go get -u sigs.k8s.io/controller-runtime

コードhttps://github.com/kubernetes/code-generator/tree/master/examples/crd/apis/example/v1をコピーし、ops-operator/pkg/extensions/operation/v1 の下に置きます。ops-operator はプロジェクト名、extensions は GVK グループのヘッダー、operation は CRD の名前、v1 は GVK のバージョンです。

次に、CRD の宣言フィールドに従っていくつかのカスタマイズされた変更を行う必要があります。ここでのコードは主に、コントローラーによる client-go の呼び出しプロセス中のオブジェクトに対するいくつかの逆シリアル化操作、および登録されている公開された関数とメソッドに使用されます。マネージャーのスキームに。

コードインジェクション

https://github.com/kubernetes/code-generator/releases/tag/v0.22.18-rc.0を $GOPATH にコピーします。コードを生成するには、ソース コード内のスクリプトを使用する必要があります。

最後に、スクリプトを介して特定のパラメーターが渡され、コマンドが実行されます。

$GOPATH/src/k8s.io/code-generator/generate-groups.sh all  github.com/octoboy233/ops-operator/pkg/client github.com/octoboy233/ops-operator/pkg/extensions operation:v1

本文中のいくつかの変数パラメータは上で言及されています。

テスト

クラスター環境には既にストック オブジェクトが存在するため、その構造化データを取得するためのテスト コードを記述します。

% kubectl get ops
NAME    AGE
myops   45m

脳無ゲットは終わりました~

package main

import (
	"context"
	"fmt"
	v1 "github.com/octoboy233/ops-operator/pkg/client/clientset/versioned/typed/operation/v1"
	"github.com/octoboy233/ops-operator/pkg/kube"
	v12 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func main() {
	cli, _ := v1.NewForConfig(kube.InitConfig())
	r, _ := cli.Operations("default").Get(context.Background(), "myops", v12.GetOptions{})
	fmt.Println(r)
}

また、生成されたコードディレクトリを見ると、Clientset以外のinformerやlisterの拡張にも対応しています。

ここまでで、コード生成ツールを使用して、オペレーターで CRD のカスタム リソースを監視および操作する方法が完成しました。

おすすめ

転載: blog.csdn.net/kingu_crimson/article/details/129382388