14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

k8s便利コマンド Namespaceを恒久的に変更する方法

Last updated at Posted at 2018-04-25

一つのk8sクラスタに、複数のネームスペース(名前空間)を作って、例えば、Development(開発)環境 と Production(本番)環境 を共存できるので、幾つも環境を作らなくても良くなり、構築や維持のオーバーヘッドを減らし、ハードウェアやクラウドのコストを節約できるので、たいへん有用と言えます。
しかし、毎回 kubectl コマンドのオプションとして、ネームスペースを指定したのでは、操作上の間違いを誘発して危険です。 そこで、ネームスペースを恒久的に変更する方法についてのメモです。

kubectlコマンドのコンフィグ

kubectlコマンドの設定ファイルは、$HOME/.kube/config または、環境変数 $KUBECONFIG の指す場所にあります。 この中に kubectlコマンドがアクセスするべき、デフォルトのネームスペースが保存されています。 しかし、直接このファイルを変更する事は適切では無いので、コマンドを使って切り替える方法を確認していきます。

ネームスペース、ユーザー、クラスタの組み合わせの環境に名前をつけて、その名前を指定して切り替えられる様になります。

現状を確認

現在のコンフィグを表示するには、kubectl config viewを利用します。 以下の例で、contextscluster:user: の値フィールドを利用するので、メモ帳などにコピペしておきます。

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://172.42.42.11:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

ネームスペースのリスト

切り替え先として設定するべき、ネームスペースを調べるために、kubectl get nsでリストします。

$ kubectl get ns
NAME                 STATUS    AGE
default              Active    10d
ingress-controller   Active    1d
ingress-nginx        Active    14h
kube-public          Active    10d
kube-system          Active    10d

ネームスペースを設定

ネームスペースを含む環境設定に名前を指摘して切り替える様にするため、次のコマンドで、設定名を登録します。ネームスペース名、クラスタ名、ユーザー名は、前述の方法で取得して指定します。 「設定名」は、コンテキスト名であり、自分にとって解りやすい文字列、または、プロジェクトで決めた文字列を利用します。

kubectl config set-context <設定名> --namespace=<ネームスペース名> --cluster=<クラスタ名> --user=<ユーザー名>

具体例を以下に挙げます. ここで設定したコンテキスト名 ingress-nginxを指定する事で、ネームスペースを恒久的にスイッチできる様になります。

$ kubectl config set-context ingress-nginx --namespace=ingress-nginx --cluster=kubernetes --user=kubernetes-adminContext "ingress-nginx" created.

次のコマンドで登録したコンテキスト名のリストを表示できます。

$ kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
          ingress-nginx                 kubernetes   kubernetes-admin   ingress-nginx
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   

ネームスペースの切り替え

ネームスペースをスイッチするには、kubectl config use-context <コンテキスト名> を利用します。 以下に具体例を挙げます。

$ kubectl config use-context ingress-nginx
Switched to context "ingress-nginx".

切り替えた結果の確認です。 CURRENTの欄に、* がついている行が、現在有効な設定です。

$ kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
*         ingress-nginx                 kubernetes   kubernetes-admin   ingress-nginx
          kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   

元に戻す方法

次の様に、元のコンテキスト名を指定する事で、初期状態に戻せます。

$ kubectl config use-context kubernetes-admin@kubernetes
Switched to context "kubernetes-admin@kubernetes".

$ kubectl config get-contexts
CURRENT   NAME                          CLUSTER      AUTHINFO           NAMESPACE
          ingress-nginx                 kubernetes   kubernetes-admin   ingress-nginx
*         kubernetes-admin@kubernetes   kubernetes   kubernetes-admin   

参考資料

「Share a Cluster with Namespaces」, < https://kubernetes.io/docs/tasks/administer-cluster/namespaces/>, 2018/4/26
「Overview of kubectl」, < https://kubernetes.io/docs/reference/kubectl/overview/ >, 2018/4/25

14
10
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?