🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Namespace 在很多情况下<mark>用于实现多用户的资源隔离</mark>,通过将集群内部的资源对象分配到不同的 Namespace 中, 形成逻辑上的分组,便于不同的分组在共享使用整个集群的资源同时还能被分别管理。 <br/> Kubernetes 集群在启动后,会创建一个名为`default`的 Namespace, 如果不特别指明 Namespace,则用户创建的 Pod,RC,Service 都将被系统创建到这个默认的`default` 的 Namespace 中。 <br/> node、persistent volume、namespace 等资源不属于任何 namespace。 <br/> **1. 创建 Namespace** ```shell 【1】获取 yaml 模板 # kubectl create namespace my-ns --dry-run=client -o yaml > my-ns.yaml # cat my-ns.yaml apiVersion: v1 kind: Namespace metadata: name: my-ns 【2】创建名为 my-ns 的命名空间 # kubectl apply -f my-ns.yaml 【3】查看集群中目前已有的所有命名空间 # kubectl get ns NAME STATUS AGE default Active 3d11h ingress-nginx Active 2d11h kube-flannel Active 3d11h kube-node-lease Active 3d11h kube-public Active 3d11h kube-system Active 3d11h my-ns Active 7s ``` >[info]命名空间名称满足正则表达式 `[a-z0-9]([-a-z0-9]*[a-z0-9])?`, 最大长度为 63 位。 <br/> **2. 查看集群中目前已有的所有 Namespace** ```shell /* 也可以使用 kubectl get ns */ # kubectl get namespaces NAME STATUS AGE default Active 3d11h ingress-nginx Active 2d11h kube-flannel Active 3d11h kube-node-lease Active 3d11h kube-public Active 3d11h kube-system Active 3d11h my-ns Active 5m44s ``` >[info]namespace 包含两种状态,`Active` 和`Terminating`。在 namespace 删除过程中,namespace 状态被设置成`Terminating`。 **3. 命名空间的使用** ```shell 【1】部署一个 tomcat6,它归属于命名空间 my-ns # kubectl create deployment tomcat6-dep03 \ --image=tomcat:6.0.53-jre8 \ --namespace=my-ns \ --dry-run=client -o yaml > tomcat6-dep03.yaml # cat tomcat6-dep03.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: tomcat6-dep03 name: tomcat6-dep03 namespace: my-ns #指定的命名空间为my-ns spec: replicas: 1 selector: matchLabels: app: tomcat6-dep03 template: metadata: labels: app: tomcat6-dep03 spec: containers: - image: tomcat:6.0.53-jre8 name: tomcat 【2】部署 tomcat6 # kubectl apply -f tomcat6-dep03.yaml 【3】查看命名空间 my-ns 的资源 # kubectl get all -n my-ns NAME READY STATUS RESTARTS AGE pod/tomcat6-dep03-597c5d764c-s49g9 1/1 Running 0 16s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/tomcat6-dep03 1/1 1 1 16s NAME DESIRED CURRENT READY AGE replicaset.apps/tomcat6-dep03-597c5d764c 1 1 1 16s ``` <br/> **4. 删除 Namespace** ```shell /* 删除命名空间 */ # kubectl delete namespace my-ns /* 删除命名空间后,该命名空间下的所有资源都会被删除 */ # kubectl get all -n my-ns No resources found in my-ns namespace. ``` >[info]1. 删除一个 namespace 会自动删除所有属于该 namespace 的资源。 >2. default 和 kube-system 命名空间不可删除。 >3. PersistentVolume 是不属于任何 namespace 的,但 PersistentVolumeClaim 是属于某个特定 namespace 的。 >4. Event 是否属于 namespace 取决于产生 event 的对象。 >5. v1.7 版本增加了 kube-public 命名空间,该命名空间用来存放公共的信息,一般以 ConfigMap 的形式存放。 **** 参考文档:https://feisky.xyz/kubernetes-handbook/concepts/namespace.html