Kubernetesの新しいクラスターを追加したので、kubectl
コマンドで切り替えられるように設定しました。
一度設定してしまうといじることはなく、このままだとやり方忘れてしまうので、自分用に設定方法をメモしておきます。
仕組み
Kubernetesを操作するにはkubectlコマンドを使うのですが、kubectlはKubernetesを構築したプラットフォームに非依存で、 Kubernetesをオンプレで作ろうが、GCPで作ろうが、AWSで作ろうが、1つのkubectlコマンドで全てのKubernetesにアクセスできます。
kubectlからクラスターにアクセスするには、アクセス先の「クラスター」とその「ユーザー」の情報が必要です。
kubectlでは、その「クラスター」と「ユーザー」(と「ネームスペース」)を、1つの「コンテキスト」というものでまとめています。
そして、kubectlでコマンドを実行する際、「コンテキスト」からアクセス先の情報を得て、目的のKubernetesにアクセスできるようになります。
さらに、「コンテキスト」は複数作成することができ、「コンテキスト」を切り替えることにより、1つのkubectlで様々なKubernetesクラスターにアクセスできるようになります。
ちなみに、「ネームスペース」は必須ではなく、省略した場合「default」ネームスペースにアクセスします。「ネームスペース」を設定すると、 同じクラスターでも「ネームスペース」を分けた「コンテキスト」を作成することができます。
クラスター・ユーザー情報設定
新しいKukbernetesにアクセスする場合、クラスター・ユーザー情報をkubectlのコンテキストに設定する必要があるのですが、 設定方法はクラスターを構築したプラットフォーム依存です。
例えばGoogle Cloud Platformの場合、下記のようなコマンドで設定します。
gcloud container clusters get-credentials \ [クラスター名] \ --project [GCPプロジェクト名] \ --zone [GCPゾーン名]
コンテキスト一覧を取得するコマンドkubectl config get-contexts
を実行してみます。
CURRENT NAME CLUSTER AHTHINFO NAMESPACE *[context_name] [cluster_name] [user_name]
と、新しい「コンテキスト」が作成され、それに「クラスター」と「ユーザー」も自動で設定されています。
クラスター接続テストは下記で行います。
kubectl cluster-info
kubectlコンテキスト関連コマンド
クラスターへのアクセスに必要な設定がコンテキストにされたので、後は使いやすいようにコンテキストを編集していきます。
コンテキスト関連でよく使うコマンドを記載します。
コンテキスト一覧を表示
kubectl config get-contexts
現在のコンテキストを表示
kubectl config current-context
指定したコンテキストをアクティブにする
kubectl config set-context [コンテキスト名]
ネームスペース設定を設定する
設定したいコンテキストをアクティブにしてから下記を実行
kubectl config set-context --current --namespace=[ネームスペース名]
コンテキスト設定ファイルを直接編集する
コンテキストの設定は~/.kube/config
ファイルに記載されています。
apiVersion: v1 clusters: - cluster: certificate-authority-data: name: [クラスター1] - cluster: certificate-authority-data: name: [クラスター2] contexts: - context: cluster: [クラスター1] user: [ユーザー1] name: [コンテキスト1] - context: cluster: [クラスター2] namespace: [ネームスペース1] user: [ユーザー2] name: [コンテキスト2] current-context: [コンテキスト1] kind: Config preferences: {} users: - name: [ユーザー1] user: auth-provider: - name: [ユーザー2] user: auth-provider:
見れば何となく分かるのですが、「クラスター」と「ユーザー」の定義があって、「コンテキスト」がその「クラスター」と「ユーザー」(および「ネームスペース」)を参照しています。
「コンテキスト」を使いやすいように、色々設定したいところなのですが、kubectlのコンテキスト関連のコマンドはあまり機能豊富ではなく、kubectlコマンドだけでやろうとすると出来ないことが多いです。
幸い、コンテキスト設定ファイルの内容はシンプルなので、コンテキスト設定ファイルを直接編集しました。
注意点
プラットフォームからコンテキストを設定する際、同じ名前の既存の「コンテキスト」「クラスター」「ユーザー」は上書きされてしまいます。
なので、自分で設定ファイルを編集する際は、それらの情報をコピーして、新しい名前で登録して上書きされないようにしておきます。
感想など
コマンドあればそれを使おうと、色々コマンド探したんですけどね。
GCPでコンテキストを追加すると、「コンテキスト」「クラスター」「ユーザー」の名前が長いので短くしたかったのですが、コマンドだけではできず、直接設定ファイルを編集しました。
同じコンテキストのネームスペース違いを作りたかったのですが、ファイルを直接編集すればコピペでできてしまいます。
まぁ、複雑でもないし、直接ファイルを編集するのがお勧めです。