✂️

大きなkubeconfigファイルを分割するツールを作った

2023/06/01に公開

はじめに

こんにちは。
日頃大きなkubeconfigファイルに悩まされているといった大変稀有な方に朗報です。
kubeconfigファイルを分割するツールを作りました!
おそらく大半の人が必要としないツールでしょう。

https://github.com/jnytnai0613/kubeconfig-splitter.git

使い方

早速ですが、以下使い方です。

  1. このリポジトリをクローンします。
  2. 分割したいkubeconfigファイルをリポジトリに配置します。
  3. ツールをビルドして実行します。
go build main.go
./main
  1. 分割されたkubeconfigファイルは、/tmpディレクトリにコンテキストの数だけ作成されます。
    その際、OSの一時ディレクトリにkubeconfigNという連番形式でファイルが作成されます。

使用例

まず、分割対象ファイルを見てみましょう。
3つのcontextからなるkubeconfigファイルであることが分かりますね。

$ ls -l config
-rw-r--r-- 1 stuff stuff 16631 Jun  1 05:17 config
$ export KUBECONFIG=./config
$ kubectl config get-contexts 
CURRENT   NAME         CLUSTER         AUTHINFO            NAMESPACE
*         primary      v1270-cluster   kubernetes-admin1   
          secondary1   v1262-cluster   kubernetes-admin2   
          secondary2   v1252-cluster   kubernetes-admin3   

次に本ツールでファイルを分割します。

$ go run main.go 
$ ls -l /tmp/kubeconfig*
-rw------- 1 stuff stuff 5602 Jun  1 05:18 /tmp/kubeconfig0
-rw------- 1 stuff stuff 5601 Jun  1 05:18 /tmp/kubeconfig1
-rw------- 1 stuff stuff 5605 Jun  1 05:18 /tmp/kubeconfig2

早速確認してみましょう。
まずそれぞれのファイルのcontextを見てみます。
問題なく分割できてますね。

$ kubectl --kubeconfig /tmp/kubeconfig0 config get-contexts 
CURRENT   NAME      CLUSTER         AUTHINFO            NAMESPACE
          primary   v1270-cluster   kubernetes-admin1   

$ kubectl --kubeconfig /tmp/kubeconfig1 config get-contexts 
CURRENT   NAME         CLUSTER         AUTHINFO            NAMESPACE
          secondary1   v1262-cluster   kubernetes-admin2   

$ kubectl --kubeconfig /tmp/kubeconfig2 config get-contexts 
CURRENT   NAME         CLUSTER         AUTHINFO            NAMESPACE
          secondary2   v1252-cluster   kubernetes-admin3   

次にきちんと各Clusterにアクセスできるのかを確認します。
うん、うん、問題ないですね!

$ kubectl --kubeconfig /tmp/kubeconfig0 --context primary get node
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   49d   v1.27.0
k8s-worker   Ready    <none>          49d   v1.27.0

$ kubectl --kubeconfig /tmp/kubeconfig1 --context secondary1 get node
NAME         STATUS   ROLES           AGE    VERSION
cks-master   Ready    control-plane   256d   v1.26.2
cks-worker   Ready    <none>          256d   v1.26.2

$ kubectl --kubeconfig /tmp/kubeconfig2 --context secondary2 get node
NAME           STATUS   ROLES           AGE    VERSION
v1252-master   Ready    control-plane   245d   v1.25.2
v1252-worker   Ready    <none>          245d   v1.25.2

さいごに

kubeconfigファイルを分割したいなあといった滅多にない要望があれば、是非使ってみてください!

株式会社エーピーコミュニケーションズ

Discussion