K8S名字空间

K8S   2025-07-08 10:54   15   0  

名字空间提供一种机制,将同一集群中的资源划分为互相隔离的组。同一名字空间内的资源名称要唯一,但跨名字空间时没有这个要求。名字空间作用域仅针对带有命令空间的对象,这种作用域对集群范围的对象不适用。何时使用多个名字空间名字空间适用于存在跨多个团队或项目的用户场景。 名字空间为名称提供了一个范围。资源的名称需要在名字空间内唯一,但不能跨名字空间。名字空间不能互相嵌套,每个K8S资源只能在一个名字空间中。 名字空间是在多个用户之间划分集群资源的一种方法(通过资源配额) 同一软件的不同版本,应该使用标签来区分同一名字空间中的不同资源。对于生产集群,不要使用default名字空间,而是创建其他名字空间来使用初始名字空间K8S启动时会创建四个初始名字空间

  • • default K8S包含这个名字空间,以便于你无需创建新的名字空间即可开始使用新的集群

  • • kube-node-lease 该名字空间包含用于各个节点关联的Lease(租约)对象。节点租约允许kubelet发送心跳,由此控制面能够检测到节点故障

  • • kube-public所有的客户端(包括未经身份验证的客户端)都可以读取该名字空间。该名字空间主要预留为集群使用,以便某些资源需要在整个集群中可见可读。该名字空间的公共属性只是一种约定而非要求

  • • kube-system 该名字空间用于K8S系统创建的对象

使用名字空间避免使用kube-创建名字空间,它是K8Ss系统名字空间保留的查看名字空间使用以下命令列出集群中现有的名字空间kubectl get namespace

NAME    STATUS AGE
default    Active 1d
kube-node-lease  Active 1d
kube-publec   Active 1d
kube-system   Active 1d

为请求设置名字空间要为当前请求设置名字空间,使用--namespace参数

kubectl run nginx --image=nginx --namespace=<名字空间名称>
kubectl get pods --namespace=<名字空间名称>

设置名字空间偏好可以永久保存名字空间,用于对应上下文中所有后续kubectl命令

kubectl config set-context --current --namespace=<名字空间名称>
# 验证
kubectl config view --minify | grep namespace:

名字空间和DNS创建一个服务时,K8S会创建一个相应的DNS条目。 该条目的形式是<服务名称>.<名字空间名称>.svc.cluster.local,这意味着如果容器只使用<服务名称>,它将被解析到本地名字空间的服务。对于跨多个名字空间(开发、测试和生产)使用相同的配置非常有用,跨名字空间访问,则需要使用完全限定域名(FQDN)。警告通过创建与公共顶级域名同名的名字空间,这些名字空间中的服务可以拥有与公共DNS记录重叠的、较短的DNS名称。所有名字空间中的负载在执行DNS查找时,如果查找的名称没有尾部句点,就会被重定向到这些服务上,因此呈现出比公共DNS更高的优先级。 为了缓解这类问题,需要将创建名字空间的权限授予可信的用户,如果需要,可以额外部署第三方的安全控制机制,如webhook,阻止用户创建于公共TLD同名的名字空间。并非所有对象都在名字空间中大多数K8S资源(如Pod、Servic、副本控制器等)都位于某些名字空间中。但是名字空间资源本身并不在名字空间中。而且底层资源,如节点和持久化卷不属于任何名字空间。 查看名字空间中有哪些K8S资源,那些不在

# 位于名字空间中的资源
kubectl api-resources --namespaced=true
# 不在名字空间中的资源
kubectl api-resources --namespaced=false

自动打标签K8S控制面会为所有名字空间设置一个不可变更的标签kubernetes.io/metadata.name。标签的值时名字空间的名称。


博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。