k8s概念之Namespace和Lable和Selector

本文围绕Kubernetes的Namespace展开,介绍其概念,即在集群中创建多个可隔离的“虚拟集群”。阐述了实际应用场景,如按项目属性划分。还说明了查看、创建、删除Namespace的命令,以及细分Namespace的作用,包括创建资源、设置请求空间等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Namespace 命名空间

1.1 概念

在一个Kubernetes集群中可以使用namespace创建多个“虚拟集群”,这些namespace之间可以完全隔离,也可以通过某种方式,让一个namespace中的service可以访问到其他的namespace中的服务,我们在CentOS中部署kubernetes1.6集群的时候就用到了好几个跨越namespace的服务,比如Traefik ingress和kube-systemnamespace下的service就可以为整个集群提供服务,这些都需要通过RBAC定义集群级别的角色来实现。

2.1 Namespaece实际应用场景

因为namespace可以提供独立的命名空间,因此可以实现部分的环境隔离。当你的项目和人员众多的时候可以考虑根据项目属性,例如生产、测试、开发划分不同的namespace。

3.1 namespace命令说明

3.1.1 查看Namespace

kubectl get namespace

NAME          STATUS    AGE
default       Active    1d
kube-system   Active    1d
kube-public   Active    1d

Kubernetes以三个初始名称空间开头:

  • default 没有其他命名空间的对象的默认命名空间.
  • kube-systemKubernetes系统创建的对象的命名空间.
  • kube-public此命名空间是自动创建的,并且可供所有用户(包括未经过身份验证的用户)读取.此命名空间主要用于集群使用,关联的一些资源在集群中是可见的并且可以公开读取。此命名空间的公共方面知识一个约定,但不是非要这么要求。

获取特定的Namespace信息:

kubectl get namespaces <name>

获取特定的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

命名空间可以分为两个阶段:

  • Active 当前命名空间正在被使用。
  • Terminating 这个Namespace正在被删除,并且不能用于新对象。

3.2.1 创建Namespace

  1. 创建一个名为my-namespace.yaml的新YAML文件,其中包含以下内容:

    vim my-namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
    # <insert-namespace-name-here>
      name: test
    # 通过kubectl命令根据yaml创建namespace
    kubectl create -f ./my-namespace.yaml  
    
  2. 直接通过命令创建

kubectl create namespace <create-name> 

3.3.1 删除Namespace

  1. 删除Namespace命令
kubectl delete namespaces <insert-some-namespace-name>

4.1 细分Namespace的作用

4.1.1 理解default命名空间。

默认情况下,k8s集群在配置集群以保存默认的Pod集时,将实例化默认命名空间和集群使用的部署。

4.1.2 创建Namespace并设置对应的lable.

vim namespace-dev.json
{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "development",
    "labels": {
      "name": "development"
    }
  }
}

vim namespace-pro.json
{
  "apiVersion": "v1",
  "kind": "Namespace",
  "metadata": {
    "name": "production",
    "labels": {
      "name": "production"
    }
  }
}
# 创建两个namespacenamespace-dev.json
kubectl create -f namespace-dev.json && kubectl create -f namespace-dev.json

查看namespace对应的lables

kubectl get namespace --show-lables
NAME          STATUS    AGE       LABELS
default       Active    32m       <none>
development   Active    29s       name=development
production    Active    23s       name=production

4.1.3 为每个Namespace创建一个pod

一个Namespace为集群中的Pods,Services,and Deployments提供了范围。

每一个Namespace创建的资源(pod,services,deployment)对于另一个Namespace都是隐藏的。

参考文档:

https://kubernetes.io/docs/tasks/administer-cluster/namespaces/#subdividing-your-cluster-using-kubernetes-namespaces

4.1.4 了解每一个Namespace的动机

  • 重点: 大多数Kubernetes资源(例如,pod,服务,复制控制器等)都在某些名称空间中。但是,命名空间资源本身并不在命名空间中。一些低级资源,例如(nodes and persistentVolumes)则不存在任何的命名空间中.

4.1.5 设置命名的请求空间

参考文档: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/#setting-the-namespace-for-a-request

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值