k8s(9)Namespace(命名空间)

简介: Namespace(命名空间)

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
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
Kubernetes 容器 Perl
k8s命名空间
k8s命名空间
273 0
|
Prometheus Kubernetes 监控
Kubernetes 的 NameSpace 无法删除应该怎么办?
Kubernetes 的 NameSpace 无法删除应该怎么办?
|
Kubernetes 网络协议 数据安全/隐私保护
Kubernetes 的核心概念:Pod、Service 和 Namespace 解析
Kubernetes 的核心概念:Pod、Service 和 Namespace 解析
814 1
|
11月前
|
JSON 运维 Kubernetes
|
Kubernetes 数据安全/隐私保护 数据中心
如何在 Kubernetes 中使用命名空间
【8月更文挑战第11天】
611 0
如何在 Kubernetes 中使用命名空间
|
JSON Kubernetes 数据格式
k8s集群namespace一直处于Terminating状态不释放解决办法
k8s集群namespace一直处于Terminating状态不释放解决办法
996 0
|
Kubernetes 前端开发 API
在K8S中,在容器内如何获取pod和namespace名字?
在K8S中,在容器内如何获取pod和namespace名字?
|
JSON Kubernetes API
手把手带你,在K8S集群中删除处于 "terminating" 状态命名空间。
手把手带你,在K8S集群中删除处于 "terminating" 状态命名空间。
|
Kubernetes API 容器
在K8s中,容器内如何获取pod和namespace名?
在K8s中,容器内如何获取pod和namespace名?
|
JSON Kubernetes 数据中心
k8s--命名空间 namespaces
k8s--命名空间 namespaces

推荐镜像

更多