目次
バックグラウンド
client-go
対応するclientset
合計は、 k8s 組み込みリソースごとに提供されますinformer
。カスタム リソース オブジェクトを監視および操作する必要がある場合、2 つの方法があります —
client-go
提供されているカスタム リソース オブジェクトを操作するために使用しますdynamicClient
。もちろん、dynamicClient
これは実装に基づいているため、同じ目的を達成するためにRESTClient
使用できます。RESTClient
- クライアント コードを生成するために使用します
conde-generator
。これにより、client-go
k8s 組み込みリソース オブジェクトに提供されているのと同じ方法でカスタム リソースを監視および操作できます。
プロジェクトアドレス: 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 のカスタム リソースを監視および操作する方法が完成しました。