クライアントパッケージ@開発¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
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
がわかる。