Namespace

概述

1、在 Kubernetes 中,命名空间(Namespace)提供一种机制,将同一集群中的资源划分为相互隔离的组

2、同一命名空间内的资源名称要唯一,但跨命名空间时没有这个要求

3、命名空间作用域仅针对带有命名空间的对象,例如 Deployment、Service 等, 这种作用域对集群访问的对象不适用,例如 StorageClass、Node、PersistentVolume 等

 

何时使用多个命名空间

1、命名空间适用于存在很多跨多个团队或项目的用户的场景

(1)对于只有几到几十个用户的集群,根本不需要创建或考虑命名空间

(2)当需要命名空间提供的功能时,请开始使用它们

2、命名空间为名称提供了一个范围

(1)资源的名称需要在命名空间内是唯一的,但不能跨命名空间

(2)命名空间不能相互嵌套,每个 Kubernetes 资源只能在一个命名空间中

3、命名空间是在多个用户之间划分集群资源的一种方法(通过资源配额)

4、不必使用多个命名空间来分隔仅仅轻微不同的资源,例如同一软件的不同版本:应该使用 Labels 来区分同一命名空间中的不同资源

5、说明:对于生产集群,请考虑不要使用 default 命名空间,而是创建其他命名空间来使用

 

 

Kubernetes 启动时会创建四个初始命名空间

1、default:Kubernetes 包含这个命名空间,以便于你无需创建新的命名空间即可开始使用新集群

2、kube-node-lease

(1)该命名空间包含用于与各个节点关联的 Lease(租约)对象

(2)节点租约允许 kubelet 发送心跳,由此控制面能够检测到节点故障

3、kube-public

(1)所有的客户端(包括未经身份验证的客户端)都可以读取该命名空间

(2)该命名空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读

(3)该命名空间的公共属性只是一种约定而非要求

4、kube-system:该命名空间用于 Kubernetes 系统创建的对象

 

使用命名空间

1、创建命名空间

(1)说明: 避免使用前缀 kube- 创建命名空间,因为它是为 Kubernetes 系统命名空间保留的

(2)根据 yaml 文件创建命名空间

apiVersion: v1
kind: Namespace
metadata:
  name: <insert-namespace-name-here>
kubectl create -f <insert-yaml-directory-here>

(3)直接创建指定名称的命名空间

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

(4)请注意,命名空间的名称必须是一个合法的 DNS 标签

(5)可选字段 finalizers 允许观察者们在命名空间被删除时清除资源,如果指定了一个不存在的终结器,命名空间仍会被创建,但如果用户试图删除它,它将陷入 Terminating 状态

2、删除命名空间

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

(1)这会删除命名空间下的所有内容

(2)删除是异步的,所以有一段时间会看到命名空间处于 Terminating 状态

3、查看命名空间

(1)列出集群中现有的命名空间

kubectl get namespaces

(2)获取特定命名空间的摘要

kubectl get namespaces <name>

(3)获取详细信息

kubectl describe namespaces <name>

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

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

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

(7)命名空间可以处于下列两个阶段中的一个

(8)Active 命名空间正在被使用中

(9)Terminating 命名空间正在被删除,且不能被用于新对象

 

命名空间和 DNS

1、当创建一个服务时, Kubernetes 会创建一个相应的 DNS 条目

2、该条目的形式是 <服务名称>.<命名空间名称>.svc.cluster.local,这意味着如果容器只使用 <服务名称>,它将被解析到本地命名空间的服务。这对于跨多个命名空间(如开发、测试、生产) 使用相同的配置非常有用。如果希望跨命名空间访问,则需要使用完全限定域名(FQDN)

3、因此,所有的命名空间名称都必须是合法的 RFC 1123 DNS 标签

 

并非所有对象都在命名空间中

1、大多数 kubernetes 资源(例如 Pod、Service、副本控制器等)都位于某些命名空间中

2、但是命名空间资源本身并不在命名空间中。而且底层资源, 例如:节点和持久化卷不属于任何命名空间

3、查看哪些 Kubernetes 资源在命名空间中,哪些不在命名空间中

(1)位于命名空间中的资源

kubectl api-resources --namespaced=true

(2)不在命名空间中的资源

kubectl api-resources --namespaced=false

 

自动打标签

1、特性状态: Kubernetes 1.21 [beta]

2、Kubernetes 控制面会为所有命名空间设置一个不可变更的标签 kubernetes.io/metadata.name,只要 NamespaceDefaultLabelName 这一特性门控被启用。 标签的值是命名空间的名称

posted @   半条咸鱼  阅读(94)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示