Namespace(命名空间)
在微服务的nacos里学习过命名空间,放置不同开发环境的yaml配置文件
介绍
命名空间(Namespace)是一种资源隔离机制,将同一集群中的资源划分为相互隔离的组。
命名空间可以在多个用户之间划分集群资源(通过资源配额)。
- 例如我们可以设置开发、测试、生产等多个命名空间。
同一命名空间内的资源名称要唯一,但跨命名空间时没有这个要求。
命名空间作用域仅针对带有名字空间的对象,例如 Deployment、Service 等。
这种作用域对集群访问的对象不适用,例如 StorageClass、Node、PersistentVolume 等。
Kubernetes 会创建四个初始命名空间:
default
默认的命名空间,不可删除,未指定命名空间的对象都会被分配到default中。kube-system
Kubernetes 系统对象(控制平面和Node组件)所使用的命名空间。kube-public
自动创建的公共命名空间,所有用户(包括未经过身份验证的用户)都可以读取它。通常我们约定,将整个集群中公用的可见和可读的资源放在这个空间中。kube-node-lease
租约(Lease)对象使用的命名空间。每个节点都有一个关联的 lease 对象,lease 是一种轻量级资源。lease对象通过发送心跳,检测集群中的每个节点是否发生故障。
使用kubectl get lease -A
查看lease
对象
使用多个命名空间
- 命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额)。
- 例如我们可以设置开发、测试、生产等多个命名空间。
- 不必使用多个命名空间来分隔轻微不同的资源。
- 例如同一软件的不同版本: 应该使用标签 来区分同一命名空间中的不同资源。
- 命名空间适用于跨多个团队或项目的场景。
- 对于只有几到几十个用户的集群,可以不用创建命名空间。
- 命名空间不能相互嵌套,每个 Kubernetes 资源只能在一个命名空间中。
管理命名空间
查看命名空间
[root@k8s ~]# kubectl get namespace NAME STATUS AGE kube-system Active 44h default Active 44h kube-public Active 44h kube-node-lease Active 44h
查看pod
[root@k8s ~]# kubectl get pod -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system helm-install-traefik-crd-5zcts 0/1 Completed 0 44h kube-system helm-install-traefik-7cp57 0/1 Completed 1 44h kube-system svclb-traefik-85e2686f-xqb5n 2/2 Running 6 (3m19s ago) 44h kube-system local-path-provisioner-5b5579c644-bd9rr 1/1 Running 4 (3m19s ago) 44h kube-system coredns-75fc8f8fff-72r6k 1/1 Running 3 (3m19s ago) 44h default nginx-deploy-855866bb46-5rqh4 1/1 Running 1 (3m19s ago) 5h48m default nginx-deploy-855866bb46-8fgzg 1/1 Running 1 (3m7s ago) 5h48m kube-system svclb-traefik-85e2686f-x49zf 2/2 Running 6 (3m7s ago) 44h kube-system traefik-7d647b7597-frjxv 1/1 Running 3 (3m19s ago) 44h kube-system metrics-server-74474969b-56qk7 1/1 Running 4 (3m19s ago) 44h default nginx-deploy-855866bb46-87scw 1/1 Running 2 (47s ago) 5h48m kube-system svclb-traefik-85e2686f-l2hf6 2/2 Running 8 (47s ago) 43h
查看lease
[root@k8s ~]# kubectl get lease -A NAMESPACE NAME HOLDER AGE kube-node-lease k8s2 k8s2 43h kube-node-lease k8s k8s 44h kube-node-lease k8s3 k8s3 44h
创建命名空间,并部署节点在指定命名空间内
[root@k8s ~]# kubectl create ns develop namespace/develop created [root@k8s ~]# kubectl run nginx --image=nginx:1.22 -n=develop pod/nginx created
查看命名空间的pod
[root@k8s ~]# kubectl get pod -n=develop NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 80s
查看pod,默认是default命名空间下,可以修改默认命名空间为develop
[root@k8s ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx-deploy-855866bb46-5rqh4 1/1 Running 1 (5m38s ago) 5h51m nginx-deploy-855866bb46-8fgzg 1/1 Running 1 (5m26s ago) 5h51m nginx-deploy-855866bb46-87scw 1/1 Running 2 (3m6s ago) 5h51m [root@k8s ~]# kubectl config set-context $(kubectl config current-context) --namespace=develop Context "default" modified. [root@k8s ~]# kubectl get pod NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 2m1s
删除命名空间,会清空命名空间下所有内容
如果无法被删除,可能是命名空间下的对象资源处于被占用状态或者错误的状态,需要手动删除对象
[root@k8s ~]# kubectl get namespace NAME STATUS AGE kube-system Active 45h default Active 45h kube-public Active 45h kube-node-lease Active 45h develop Active 7m22s [root@k8s ~]# kubectl delete ns develop namespace "develop" deleted [root@k8s ~]# kubectl get namespace NAME STATUS AGE kube-system Active 45h default Active 45h kube-public Active 45h kube-node-lease Active 45h