Kubernetes-Namespace

1. 简介

Kubernetes 支持多个虚拟集群,它们底层依赖于同一个物理集群。 这些虚拟集群被称为namespace

在一些文档里namespace也称为命名空间

namespace为资源提供了一个范围。

资源的名称需要在namespace内是唯一的。

namespace不能相互嵌套,每个 Kubernetes 资源只能在一个namespace中。

2. quick start

2.1 查看namespace

# kubectl get ns $ kubectl get namespaces NAME STATUS AGE default Active 11d kube-system Active 11d kube-public Active 11d

初始状态下,Kubernetes 具有三个namespace

  • defaultnamespace对象的默认namespace
  • kube-system 由 Kubernetes 系统创建的对象的namespace
  • kube-public 自动创建且被所有用户可读的namespace(包括未经身份认证的)。此namespace通常在某些资源在整个集群中可见且可公开读取时被集群使用。此namespace的公共方面只是一个约定,而不是一个必要条件。

或用下面的命令获取详细信息:

$ kubectl describe namespaces <name> Name: default Labels: <none> Annotations: <none> Status: Active No resource quota. Resource Limits Type Resource Min Max Default ---- -------- --- --- --- Container cpu - - 100m

请注意,这些详情同时显示了资源配额(如果存在)以及资源限制区间。

资源配额跟踪并聚合 Namespace 中资源的使用情况,并允许集群运营者定义 Namespace 可能消耗的 Hard 资源使用限制。

限制区间定义了单个实体在一个 Namespace 中可使用的最小/最大资源量约束。

namespace可以处于下列两个阶段中的一个:

  • Active namespace正在被使用中
  • Terminating namespace正在被删除,且不能被用于新对象。

2.2 创建namespace

说明: 避免使用前缀 kube- 创建namespace,因为它是为 Kubernetes 系统namespace保留的。

  1. 新建一个名为 my-namespace.yaml 的 YAML 文件,并写入下列内容:

    apiVersion: v1 kind: Namespace metadata: name: <insert-namespace-name-here>

    然后运行:

    $ kubectl create -f ./my-namespace.yaml
  2. 或者,你可以使用下面的命令创建namespace

    $ kubectl create namespace <insert-namespace-name-here>

2.3 删除namespace

  1. 使用资源文件删除:

    $ kubectl delete -f ./my-namespace.yaml
  2. 使用命令删除:

    kubectl delete namespaces <insert-some-namespace-name>

警告: 这会删除namespace下的 所有内容

删除是异步的,所以有一段时间你会看到namespace处于 Terminating 状态。

3. 理解使用namespace的动机

单个集群应该能满足多个用户及用户组的需求(以下称为 “用户社区”)。

Kubernetes namespace 帮助不同的项目、团队或客户去共享 Kubernetes 集群。

namespace通过以下方式实现这点:

  1. 为资源设置作用域.
  2. 为集群中的部分资源关联鉴权和策略的机制。

使用多个namespace是可选的。

每个用户社区都希望能够与其他社区隔离开展工作。

每个用户社区都有自己的:

  1. 资源(pods、服务、 副本控制器等等)
  2. 策略(谁能或不能在他们的社区里执行操作)
  3. 约束(该社区允许多少配额,等等)

集群运营者可以为每个唯一用户社区创建namespace

namespace为下列内容提供唯一的作用域:

  1. 命名资源(避免基本的命名冲突)
  2. 将管理权限委派给可信用户
  3. 限制社区资源消耗的能力

用例包括:

  1. 作为集群运营者, 我希望能在单个集群上支持多个用户社区。
  2. 作为集群运营者,我希望将集群分区的权限委派给这些社区中的受信任用户。
  3. 作为集群运营者,我希望能限定每个用户社区可使用的资源量,以限制对使用同一集群的其他用户社区的影响。
  4. 作为群集用户,我希望与我的用户社区相关的资源进行交互,而与其他用户社区在该集群上执行的操作无关。

4. 理解namespace和 DNS

当你创建服务时,Kubernetes 会创建相应的 DNS 条目。 此条目的格式为 <服务名称>.<namespace名称>.svc.cluster.local。 这意味着如果容器使用 <服务名称>,它将解析为namespace本地的服务。 这对于在多个namespace(如开发、暂存和生产)中使用相同的配置非常有用。 如果要跨namespace访问,则需要使用完全限定的域名(FQDN)。


__EOF__

本文作者张铁牛
本文链接https://www.cnblogs.com/ludangxin/p/15680661.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   张铁牛  阅读(262)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
点击右上角即可分享
微信分享提示