コンテンツにスキップ

クライアントパッケージ@開発

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. client-go

client-goとは

Kubernetesのkube-apiserverと通信できるパッケージ。

使用できるAPIの型を拡張するために、k8s.io/apiパッケージやk8s.io/apimachineryパッケージも必要になる。


セットアップ

kube-apiserverの認証/認可を通過するために、kubeconfigファイルをコンテナにマウントする必要がある。


client-goパッケージとkube-apiserverのバージョン整合性

▼ client-goパッケージとkube-apiserverの間

kubectlコマンドとkube-apiserverのバージョンの整合性と同様にして、client-goパッケージにもkube-apiserverのバージョンと整合性がある。

例えば、client-goパッケージの0.20.4は、kube-apiserverのv1.20.4に対応している。

We recommend using the v0.x.y tags for Kubernetes releases >= v1.17.0 and kubernetes-1.x.y tags for Kubernetes releases < v1.17.0.

kube-apiserverとクライアント側のバージョン差は、前方/後方の1個のマイナーバージョン以内に収めることが推奨されており、client-goパッケージにもこのポリシーが適用される。

そのため、client-goパッケージを定期的にアップグレードする必要がある。

▼ client-goパッケージとマニフェストの間

Kubernetesのマニフェストには.apiVersionキーが定義されている。

kube-apiserverのバージョンに応じて、公式リポジトリが用意するマニフェストにて、.apiVersionキーがv1からv2になることがある。

この場合、client-goパッケージがこの.apiVersionキーに対応していないと、kube-apiserverにそのマニフェストを送信できない。

反対に、マニフェストですでに廃止済みの.apiVersionキーが指定されていて、client-goパッケージでもこれが廃止されていても、同様のことが起こる。

そのため、client-goパッケージを定期的にアップグレードする必要がある。

▼ 調査例

ArgoCDの2.3.0では、client-goパッケージのバージョンが0.23.1であった。

このことから、ArgoCDは2.3.0がKubernetesの1.23.1で稼働できることがわかる。

なお、デプロイ先のClusterとしていずれのバージョンに対応しているかは、gitops-engineパッケージを確認する必要がある。

Kubernetesの1.23.1が対応しているAPIグループのバージョンから、マニフェストで使用できる.apiVersionがわかる。