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
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
7月前
|
Kubernetes 容器 Perl
k8s命名空间
k8s命名空间
|
7月前
|
Prometheus Kubernetes 监控
Kubernetes 的 NameSpace 无法删除应该怎么办?
Kubernetes 的 NameSpace 无法删除应该怎么办?
|
Kubernetes 网络协议 数据安全/隐私保护
Kubernetes 的核心概念:Pod、Service 和 Namespace 解析
Kubernetes 的核心概念:Pod、Service 和 Namespace 解析
369 1
|
2月前
|
JSON 运维 Kubernetes
|
4月前
|
Kubernetes 数据安全/隐私保护 数据中心
如何在 Kubernetes 中使用命名空间
【8月更文挑战第11天】
190 0
如何在 Kubernetes 中使用命名空间
|
4月前
|
Kubernetes 前端开发 API
在K8S中,在容器内如何获取pod和namespace名字?
在K8S中,在容器内如何获取pod和namespace名字?
|
4月前
|
JSON Kubernetes API
手把手带你,在K8S集群中删除处于 "terminating" 状态命名空间。
手把手带你,在K8S集群中删除处于 "terminating" 状态命名空间。
|
4月前
|
Kubernetes API 容器
在K8s中,容器内如何获取pod和namespace名?
在K8s中,容器内如何获取pod和namespace名?
|
7月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践深入理解PHP的命名空间与自动加载机制
【5月更文挑战第30天】 在容器化和微服务架构日益普及的背景下,Kubernetes 已成为众多企业的首选容器编排工具。然而,随之而来的挑战是集群的监控与日志管理。本文将深入探讨 Kubernetes 集群监控的最佳实践,包括节点资源使用情况、Pods 健康状态以及网络流量分析等关键指标的监控方法。同时,我们也将讨论日志聚合、存储和查询策略,以确保快速定位问题并优化系统性能。文中将介绍常用的开源工具如 Prometheus 和 Fluentd,并分享如何结合这些工具构建高效、可靠的监控和日志管理系统。
|
7月前
|
Kubernetes Cloud Native PHP
构建高效云原生应用:基于Kubernetes的微服务治理实践深入理解PHP中的命名空间
【5月更文挑战第28天】 在当今数字化转型的浪潮中,云原生技术以其独特的弹性、可扩展性和敏捷性成为了企业IT架构的重要选择。本文深入探讨了如何在云平台之上,利用Kubernetes这一容器编排工具,实现微服务架构的有效治理。通过分析微服务设计原则与Kubernetes特性的融合,提出了一套系统的微服务部署、监控和管理策略。文章不仅阐述了关键技术点,还提供了具体实施步骤和最佳实践,以期帮助企业构建出既高效又稳定的云原生应用。 【5月更文挑战第28天】在PHP的编程世界中,命名空间是管理代码和避免名称冲突的强大工具。本文将探讨PHP命名空间的核心概念、实现方式及其在现代PHP开发中的应用。通过深
下一篇
DataWorks