はじめに
タイトルの通りです
1つのKubectlから別のVMにある複数のクラスタを操作したいと思ったので,設定を行いました.
1.Configファイルを用意する
始めに.kube/configからコンフィグファイルを取ってきます.
apiVersion: v1
kind: Config
preferences: {}
current-context: <my-context>
clusters:
- cluster:
certificate-authority-data: <>
server: https://<IPアドレス>:6443
name: <my-cluster>
users:
- name: <my-user>
user:
client-certificate-data: <>
client-key-data: <>
contexts:
- context:
cluster: <my-cluster>
namespace: default
user: <my-user>
name: <my-context>
<>の部分は隠してある内容なので適宜読み替えてください.
このconfigファイルをまとめて扱いたい複数のクラスタからとってきてください.
構造
先に構造を解説します.
この設定は3段階に分かれています.
clusters
1つ目はclusters
です
cluster
の設定を書くことで複数のクラスタの内容を書けます(後述).
certificate-authority-data
は認証用の文字列になっておりクラスタごとに設定されます.
server
はクラスタのIPアドレスになります.初期のものをそのまま取ってくると127.0.0.1(localhost)になっているはずなので,Kubectlコマンドを配置しているサーバから見えるIPアドレスに書き換えてください.
name
はこのファイル上でのクラスタの名前です.
クラスタの設定に依存しているものではないため任意で分かりやすい名前を付けてください.
users
2つ目はusers
です.
user
の設定を書くことで複数のユーザの内容を書けます(後述).
client-certificate-data
,client-key-data
はユーザの認証用の文字列です.
name
はこのファイル上でのユーザの名前です.
ユーザの設定に依存しているものではないため任意で分かりやすい名前を付けてください.
contexts
最後にcontexts
です.
コンテキストはクラスタにどうやってアクセスするかを定義したファイルです.
context
の設定を書くことで複数のコンテキストを書けます(後述)
cluster
には1つ目のcluster内でnameに記述した名前を書くことで,このコンテキストで使用するクラスタを指定できます.
namespace
を指定することで-nオプションを使用しなかったときにデフォルトで参照されるネームスペースを指定できます.
user
に2つ目のuser内でnameに記述した名前を書くことで,このコンテキストで使用するユーザを指定できます.
name
はコンテキストの名前です.
kubectlからコンテキストを参照する時はこの名前を使用します.分かりやすい名前を付けてください.
current-context
には現在使用しているコンテキストが書かれています.
2.configファイルを統合する
複数のクラスタから上記のファイルを取得した後は構造で示したそれぞれの項目について,名前等の重複が無いように入れていくだけです.
以下に例を示します.
apiVersion: v1
kind: Config
preferences: {}
current-context: cluster1-context
clusters:
- cluster:
certificate-authority-data: <>
server: https://<IPアドレス1>:6443
name: my-cluster1
- cluster:
certificate-authority-data: <>
server: https://<IPアドレス2>:6443
name: my-cluster2
- cluster:
certificate-authority-data: <>
server: https://<IPアドレス3>:6443
name: my-cluster3
users:
- name: my-user1
user:
client-certificate-data: <>
client-key-data: <>
- name: my-user2
user:
client-certificate-data: <>
client-key-data: <>
- name: my-user3
user:
client-certificate-data: <>
client-key-data: <>
contexts:
- context:
cluster: my-cluster1
namespace: default
user: my-user1
name: cluster1-context
- context:
cluster: my-cluster2
namespace: default
user: my-user2
name: cluster2-context
- context:
cluster: my-cluster3
namespace: default
user: my-user3
name: cluster3-context
この例では3つのクラスタ情報をコンテキストに設定しています.
clustersの中にクラスタの設定を,usersの中にユーザの設定を入れて,それらの組み合わせをcontextで指定する感じです.
それぞれの項目が指定されているのが分かると思います.
3. コンテキストを使用する
最後にコンテキストを使用する方法です
使用できるコンテキストの確認
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* cluster1-context my-cluster1 my-user1 default
cluster2-context my-cluster2 my-user2 default
cluster3-context my-cluster3 my-user3 default
今使用しているコンテキストの確認
$ kubectl config current-context
cluster1-context
コンテキストの切り替え
$ kubectl config use-context cluster2-context
Switched to context "cluster2-context".