K8Sは、CRDのサブリソースを書きます

サブリソースは、CRDコントローラK8Sを書いている時に遭遇した状況を使用する必要があります

ときに最初に書かれた文書CRDライフサブリソース

ここではサブKUBE-バッチで例えば

apiVersion:apiextensions.k8s.io/v1beta1 
種類:CustomResourceDefinitionの
メタデータ:
  名前:podgroups.scheduling.sigs.devの
仕様:
  グループ:scheduling.sigs.devの
  名前:
    種類:PodGroup 
    複数:podgroupsの
  スコープ:名前空間つきの
  検証:
    openAPIV3Schema:
      プロパティ:
        apiVersion :
          タイプ:文字列
        の種類:
          タイプ:文字列
        メタデータ:
          タイプ:オブジェクト
        仕様:
          プロパティ:
            minMember:
              フォーマット:INT32 
              タイプ:整数 
            キュー:
              タイプ:文字列
            priorityClassName:
              タイプ:文字列
          型:オブジェクトの
        状態:
          特性:
            成功:
              フォーマット:INT32 
              タイプ:整数
            失敗:
              フォーマット:INT32 
              タイプ:整数
            実行:
              フォーマット:INT32 
              タイプ:整数
          型:オブジェクト
      タイプ:オブジェクトの
  バージョン:v1alpha2 
  サブリソース:
    状態: {}

 

types.go使用

// + genclient 
// + K8S:deepcopy-GEN:インターフェイス= k8s.io / apimachinery / PKG / runtime.Object 

// PodGroupポッドの集合です。バッチワークロードのために使用。
型PodGroup構造体{ 
	metav1.TypeMeta `JSON: "インライン"` 
	//標準オブジェクトのメタデータ。
	//詳細情報:https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata 
	// +オプション
	metav1.ObjectMeta `JSON: "メタデータ、omitempty"いるProtobuf:"バイト、1、 OPT、名前=メタデータ"` 

	ポッドグループの所望の行動の//仕様。
	//詳細情報:https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status 
	// +オプション
	仕様PodGroupSpec `JSON: "スペック、omitempty"いるProtobuf:"バイト、2、OPT、

	//ステータスポッドグループに関する現在の情報を表します。
	//このデータは最新ではないかもしれません。
	// +オプションの
	ステータスPodGroupStatus `JSON: "ステータス、omitempty"いるProtobuf: "バイト、3、OPT、名前=ステータス"` 
} 

// PodGroupSpecはポッドグループのテンプレートを表します。
タイプPodGroupSpec構造体{ 
	// MinMemberポッドグループを実行するために、メンバー/タスクの最小数を定義します。
	//すべてのタスクを開始するために十分なリソースがない場合、スケジューラ
	//は誰にも開始されません。
	MinMember INT32 `JSON: "minMember、omitempty"いるProtobuf:` "1バイトOPT、名前= minMember" 

	//キューPodGroupのためのリソースを割り当てるためにキューを定義します。キューが存在しない場合は、
	// PodGroupは、スケジュールされません。
	キューの文字列`JSON: "キュー、omitempty"いるProtobuf: "バイト、2、OPT、名前=キューが"` 

	指定した場合//は、PodGroupの優先順位を示します。「クリティカルなシステム・ノード」と
	//「システム・クラスタ・クリティカルは」指示二つの特別なキーワードである
	前者は最も優先度の高いものと//最優先順位を。その他
	//名前は、その名前でPriorityClassオブジェクトを作成することによって定義する必要があります。
	指定されていない場合は何も存在しない場合、//、PodGroupの優先順位は、デフォルトまたはゼロになります
	//デフォルト。
	// +任意
	PriorityClassName文字列`JSON: "priorityClassName、omitempty"いるProtobuf: "バイト3、OPT、名前= priorityClassName"` 
} 

// PodGroupStatusはポッドグループの現在の状態を表します。
	// PodGroupの現在の段階です。
	フェーズPodGroupPhase `JSON: "フェーズ、omitempty"いるProtobuf: "バイト、1、OPT、名前=相"` 

	PodGroupの//条件。
	// +オプションの
	条件[] PodGroupCondition `JSON: "条件、omitempty"いるProtobuf: "バイト、2、OPT、名前=条件"` 

	積極的に実行しているポッドの//数。
	// +オプション
	のint32 `jsonの実行: "実行中、omitempty"いるProtobuf: "バイト、3、OPT、名前=実行中の"` 

	成功相に達しポッドの//数を。
	// +オプションの
	"成功し、omitempty"いるProtobuf:: `JSON INT32成功` "=、バイト4、OPT、名前は成功しました" 

	失敗した段階に到達したポッドの//数を。
	// +オプション
	`JSON INT32失敗しました:"、失敗しました

 

いくつかの注記がある場合。

1.ときYAML提出、リソースのデフォルトパスのアドレスが送信されるので、ステータス属性は、無駄である/のAPI / {グループ名} / {バージョン} /名前空間/ {NS} / {resourcesname}設定/ {名前}

状態は、サブリソースを設定されていないので、

例えば、私が提出します

apiVersion:scheduling.incubator.k8s.io/v1alpha1 
種類:PodGroup 
メタデータ:
  名前:QJ 1 - 
スペック:
  minMember :. 6 
#この属性は、コマンドkubectlを設定されていない 状況が 成功しました:。。1

 

CRDのsubresoucesはK8Sの定義を見て

// CustomResourceSubresourcesはCustomResourcesのステータスとスケールサブリソースを定義します。
型CustomResourceSubresources構造体{ 
	//ステータスCustomResourcesのためのステータス・サブリソースを表す
	ステータス* CustomResourceSubresourceStatus 
	// ScaleはCustomResourcesのスケールサブリソース表す
	尺度* CustomResourceSubresourceScaleを
}
// CustomResourceSubresourceStatusはCustomResourcesのステータスサブリソースを提供する方法を定義します。
//ステータスはCustomResourceの`.status` JSONパス内部で表現されます。セットは、ときに
// *カスタムリソース用/ステータスサブリソースを公開
/ステータスサブリソースに// * PUT要求は、カスタムリソースオブジェクトを取り、状況スタンザ以外のものへの変更を無視
// * PUT / POST / PATCH要求へのカスタムリソースステータススタンザへの変更は無視
タイプCustomResourceSubresourceStatus構造体{}

//をCustomResourceSubresourceScaleはCustomResourcesのスケールサブリソースを提供する方法を定義します。 // SpecReplicasPathはScale.Spec.Replicasに対応することCustomResourceのJSON路内部を画定します。
型CustomResourceSubresourceScale構造体{

//配列表記せずにのみJSONパスが許可されています。
//は.spec下にJSONのパスでなければなりません。
CustomResource内の指定されたパスの下に値がない場合は、//、/スケールサブリソースは、GETにエラーを返します。
SpecReplicasPathストリング
// StatusReplicasPathはScale.Status.Replicasに対応することCustomResourceのJSON路内部を画定します。
//配列表記せずにのみJSONパスが許可されています。
//は.status下にJSONのパスでなければなりません。
CustomResource内の指定されたパスの下に値がない場合は、//、/スケールのサブリソースのステータスレプリカ値
//は0にデフォルト設定されます。
StatusReplicasPath列
// LabelSelectorPathはScale.Status.Selectorに対応することCustomResourceのJSON路内部を画定します。 // CustomResource内の指定されたパスの下に値がない場合/スケールで、ステータスラベルセレクタ値
//配列表記せずにのみJSONパスが許可されています。
//は.statusまたは.spec下JSONのパスでなければなりません。
// HPAで動作するように設定する必要があります。
このJSON経路によって指し示さ//フィールドは、文字列フィールド(ない複雑なセレクタ構造体)でなければならない
文字列形式でシリアライズラベルセレクタを含ん//。
//詳細情報:https://kubernetes.io/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions#scale-subresource //サブリソース空の文字列にデフォルト設定されます。 // +オプション LabelSelectorPath *文字列}




 

サポート状況、スケールは2つです、

/ステータスサブリソースに// * PUT要求は、カスタムリソースオブジェクトを取り、状況スタンザ以外のものへの変更を無視
するカスタムリソースに// * PUT / POST / PATCHリクエストを状態スタンザへの変更を無視

要求がある場合には、他のフィールドのステータスは無視オブジェクトのみの状態を変更する際に/になります

つまり:あなたは、コマンドラインでステータスフィールドを変更したい場合は、/ APIを/ {グループ名} / {バージョン} /名前空間/ {NS} / {resourcesname} / {名前} /ステータス提出します

 

試験中2.手動で行うにはどのような状態を変更したい場合

制限の復帰があるので、まず現在のオブジェクトを取得しなければならない状態を変更するには、オブジェクトがそう取得するには、深刻提出されます

そして、フィールドに追加されたステータスは、オブジェクトから抜け出します

カール--cacert {ca.pen} -H "認可:ベアラ{トークン}" APISERVER / APIの/ {グループ名} / {バージョン} /名前空間/ {NS} / {resourcesname} / {名前}

結果が返された場合

{

...

"スペック":{...}

}

修正、追加ステータス

{

...

"スペック":{...}

"状態":{ "成功":1}

}

この身体への要求が続きます

 

カール--cacert {ca.pen} -H "認可:ベアラ{トークン}" -H "コンテンツタイプ:アプリケーション/ JSON" --request PUTのAPISERVER / APIの/ {グループ名} / {バージョン} /名前空間/ {NS } / {resourcesname} / {名前} /ステータス--data '上边身体

 

それはresourceVersionが検証されますよう、最新の目標を要求するために行くことを忘れないでください

  

 

おすすめ

転載: www.cnblogs.com/xuchenCN/p/12522167.html