名前空間が必要な理由
ラベルは良いのですが、ラベルだけを使うとラベルがたくさんあり、オーバーラップすることもあり、クエリやその他のアクションごとにたくさんのラベルを持ってくるのは非常に不便です。Kubernetesは、リソースの編成と分割のためのネームスペースを提供します。複数のネームスペースを使用すると、多くのコンポーネントを含むシステムをさまざまなグループに分割できます。ネームスペースはマルチテナント分割にも使用できるため、複数のチームがクラスターを共有でき、使用されるリソースはネームスペースによって分割されます。
異なるネームスペースに同じ名前を付けることができます。Kubernetesのほとんどのリソースはネームスペースで分割できますが、一部のリソースはそうではありません。グローバルリソースに属し、ネームスペースに属していないため、後で徐々に公開されます。
次のコマンドを使用して、現在のクラスターの下の名前空間を照会できます。
$ kubectl get ns
NAME STATUS AGE
default Active 36m
kube-node-realease Active 36m
kube-public Active 36m
kube-system Active 36m
これまでのところ、すべてデフォルトの名前空間で動作しています。名前空間を指定せずにkubectl getを使用すると、デフォルトの名前空間がデフォルトになります。
kube-systemの下にあるものを見てください。
$ kubectl get po --namespace=kube-system
NAME READY STATUS RESTARTS AGE
coredns-7689f8bdf-295rk 1/1 Running 0 9m11s
coredns-7689f8bdf-h7n68 1/1 Running 0 11m
everest-csi-controller-6d796fb9c5-v22df 2/2 Running 0 9m11s
everest-csi-driver-snzrr 1/1 Running 0 12m
everest-csi-driver-ttj28 1/1 Running 0 12m
everest-csi-driver-wtrk6 1/1 Running 0 12m
icagent-2kz8g 1/1 Running 0 12m
icagent-hjz4h 1/1 Running 0 12m
icagent-m4bbl 1/1 Running 0 12m
kube-systemには多くのポッドがあり、その中にはcorednsがサービス検出に使用され、everest-csiがHuaweiクラウドストレージサービスとのドッキングに使用され、icagentがHuaweiクラウド監視システムとのドッキングに使用されていることがわかります。
これらの一般的で必要なアプリケーションはkube-system名前付けに配置され、他のポッドから分離できます。kube-system名前付け内のものは他の名前付けでは表示されず、影響を受けません。 。
名前空間を作成する
次の方法を使用して、名前空間を定義します。
apiVersion: v1
kind: Namespace
metadata:
name: custom-namespace
kubectlコマンドを使用して作成します。
$ kubectl create -f custom-namespace.yaml
namespace/custom-namespace created
kubectl createnamespaceコマンドを使用して作成することもできます。
$ kubectl create namespace custom-namespace
namespace/custom-namespace created
指定された名前空間の下にリソースを作成します。
$ kubectl create -f nginx.yaml -n custom-namespace
pod/nginx created
このように、デフォルトおよびカスタムネームスペースの下にnginxという名前のポッドがあります。
名前空間の分離手順
名前空間は組織にのみ分割でき、実行中のオブジェクトに対して完全に分離することはできません。たとえば、名前空間の下にある2つのポッドが互いのIPを知っていて、Kubernetesが依存する基盤となるネットワークが名前空間間のネットワーク分離を提供しない場合、2つのポッドは互いにアクセスできます。