私はhttps://github.com/kubernetes/client-goを使用しており、すべて正常に動作します。
公式のKubernetesダッシュボードのマニフェスト(YAML)があります:https : //raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
kubectl apply
client-goを使用して、Goコードでこのマニフェストを模倣したいと思います。
YAMLバイトをいくつかの(アン)マーシャリングして、パッケージで定義されている正しいAPIタイプに変換する必要があることを理解しています:https : //github.com/kubernetes/api
Create
クラスターに単一のAPIタイプを正常に編集しましたが、同じではないタイプのリストを含むマニフェストでこれを行うにはどうすればよいですか?kind: List*
これらのさまざまなタイプをサポートするリソースはありますか?
現在の回避策はcsplit
、区切り記号として---を使用してYAMLファイルを分割することです
csplit /path/to/recommended.yaml /---/ '{*}' --prefix='dashboard.' --suffix-format='%03d.yaml'
次に、作成された新しい(14)パーツをループし、それらのバイトを読み取り、UniversalDeserializerのデコーダーによって返されたオブジェクトのタイプを切り替え、k8sクライアントセットを使用して正しいAPIメソッドを呼び出します。
これをプログラムで実行して、ダッシュボードの新しいバージョンをクラスターに更新します。また、Metrics Serverや他の多くのリソースに対してもこれを行う必要があります。代替の(おそらくより簡単な)メソッドは、コンテナーイメージにインストールされたkubectlを使用してコードを出荷し、直接呼び出すことkubectl apply -f -
です。しかし、それは、kubectlがそれを使用できるように、kube構成をディスクに書き込むか、インラインで渡す必要があることも意味します。
この問題が役立つことがわかりました:https : //github.com/kubernetes/client-go/issues/193 デコーダーはここにあります:https : //github.com/kubernetes/apimachinery/tree/master/pkg/runtime/シリアライザ
ここでclient-goに公開されています:https : //github.com/kubernetes/client-go/blob/master/kubernetes/scheme/register.go#L69
私はまた、kubectlで使用されているRunConvert方法を見て撮影した:https://github.com/kubernetes/kubernetes/blob/master/pkg/kubectl/cmd/convert/convert.go#L139をし、そのIを想定します独自のgenericclioptions.IOStreamsを提供して出力を取得できますか?
[client-go]とタグ付けされた他の質問も調べましたが、ほとんどの場合、古い例を使用するか、単一のkind
定義が含まれているYAMLファイルを使用しています。その後、APIが変更されました。
編集:複数のクラスターに対してこれを行う必要があり、プログラムでクラスターを作成しているため(AWS EKS API + CloudFormation / eksctl)、ServiceAccount
多くのAWSアカウントにわたって、多くのクラスターコンテキストにわたってsを作成するオーバーヘッドを最小限に抑えたいと思います。理想的には、クライアントセットの作成に関連する唯一の認証手順は、aws-iam-authenticatorを使用して、クラスターデータ(名前、地域、CA証明書など)を使用してトークンを取得することです。aws-iam-authenticatorはしばらくリリースされていませんが、その内容でmaster
は、サードパーティの役割のクロスアカウントの役割と外部IDを使用して渡すことができます。IMO、これはServiceAccount
(およびIRSA)アプリケーション(アドオンを作成してこれらのクラスターに適用するバックエンドAPI)が対話する必要がある他のAWSサービスがあるため。
編集:私は最近https://github.com/ericchiang/k8sを見つけました。高レベルでのclient-goよりも使い方は間違いなく簡単ですが、この動作はサポートされていません。
^---$
コードで分割しないのはなぜですか?