ベストプラクティス第二弾です
こんにちは、jackです。
Kubernetesベストプラクティスの第二弾です。前回の第一弾に引き続き、こちらのGoogle公式ブログから大事なことをざっくりまとめていきます。
Kubernetes best practices: Organizing with Namespaces
TL;DR
- namespace(名前空間)を有効活用せよ
- namespaceを使うことで開発スピードがあがる
- デフォルトのnamespaceは3つ
- default
- kube-system
- kube-public
kubens
、kubectx
を駆使せよ
もう少し詳しく
namespace作成方法
namespaceを作るのはkubectl
コマンド一発でできます。
❯ kubectl create namespace test
YAMLを使ってapplyすることでも可能です。
kind: Namespace
apiVersion: v1
metadata:
name: test
labels:
name: test
❯ kubectl apply -f test.yml
namespacesの取得
❯ kubectl get namespace
NAME STATUS AGE
default Active 1y
kube-public Active 1y
kube-system Active 1y
test Active 1m
このようにdefault
、kube-public
、kube-system
と先ほど作成したtest
namespaceが確認できます。
namespace上にリソースを作成する方法
apiVersion: v1
kind: Pod
metadata:
name: mypod
labels:
name: mypod
spec:
containers:
- name: mypod
image: nginx
例えばこんなpod.yml
があったとします。
YAMLファイルに特にnamespaceの記載がない場合は下のようにnamespaceを指定してあげます。
❯ kubectl apply -f pod.yml --namespace=test
ただこれだと、declarative(宣言)的なやり方ではないので別の方法もあります。
先程のYAMLファイルのmetadata
部分にnamespaceを追加することで、特定のnamespaceに立ち上げることができます。
(また、この方法用いると--namespace
オプションを渡せなくなります。)
apiVersion: v1
kind: Pod
metadata:
name: mypod
namespace: test
labels:
name: mypod
spec:
containers:
- name: mypod
image: nginx
namespace上のリソースの確認する方法
kubectl get pods
はアクティブなnamespace上のリソースのみにしか問い合わせてくれません。
他のnamespace上のリソースを確認するにはアクティブなnamespaceを変更するか、--namespace
オプションを渡して上げる必要があります。
❯ kubectl config set-context $(kubectl config current-context) --namespace=test
もしくは
❯ kubectl get pods --namespace=test
毎度このようにnamespaceを移動するのが大変なことが想定されますよね。そこでkubensの出番です。
Kubensでnamespaceの切り替え
https://github.com/ahmetb/kubectxというOSSを使います。
使い方はいたって簡単!
# namespacesの取得
❯ kubens
default
kube-public
kube-system
test
# namespaceの切り替え
❯ kubens test
Context "minikube" modified.
Active namespace is "test".
これでnamespaceの切り替えがものすごく楽になりました。
まとめ
いかがでしたか?
とにかくkubens
、kubectx
がものすごく便利なのが伝わったかと思います。
毎回のことですが、公式ブログではこのまとめでは省いている情報が乗っていますのでそちらもどうぞ。
Kubernetes best practices: Organizing with Namespaces
それでは、また次回。