【云原生】Kubernetes基本概念之Namespace、Label、Annotation

Kubernetes中的Namespace、Label和Annotation是三个基本概念。它们有不同的作用和用途:

  • Namespace(命名空间)是用于在一个Kubernetes集群中将资源进行逻辑上的隔离和划分的机制。通过将资源分配到不同的Namespace中,可以实现资源的逻辑分组和管理。不同的Namespace之间资源的名称可以重复,但不同Namespace之间的资源是相互隔离的。
  • Label(标签)是用于对Kubernetes中的资源进行分类或标记的标识符。Label是键值对的形式,可用于选择和过滤资源,并支持资源的动态组织。通过Label,可以对资源进行灵活的标记和分类,更方便地管理和操作资源。
  • Annotation(注释)是在Kubernetes中为资源添加的键值对信息。与Label不同,Annotation并不用于对资源进行分类或标记,而是用于提供关于资源的元数据信息,如资源的描述、注释或其他附加信息。Annotation可以用于存储对资源的描述、审计信息、工具的额外配置等。

Namespace 命名空间

  • 命名空间为K8s资源对象的名称提供了一个作用域。一方面避免了资源名称的冲突;另一方面,通过合理的分组实现科学管理,避免误操作不属于自己的资源

查看命名空间

arduino 复制代码
kubectl get ns
  • 效果如下所示。注意,当kubectl命令、Yaml配置文件均未指定命名空间。故其默认会使用名为default的命名空间

创建命名空间

  • 显然可以通过Yaml配置文件来创建命名空间资源
vbnet 复制代码
apiVersion: v1
# 资源类型: 命名空间
kind: Namespace
metadata:
  # 命名空间的名称
  name: custom-namespace-1
  • 效果如下所示
  • 还可以通过命令直接创建
bash 复制代码
# 创建指定名称的命名空间
kubectl create ns <命名空间名称>

使用命名空间

  • 前面提到,如果未指定命名空间则会默认使用名为default的命名空间。如果期望使用指定的命名空间,可通过两种方式实现。创建资源时我们可以直接在Yaml配置文件中指定命名空间的名称,如下所示
yaml 复制代码
apiVersion: v1
# 资源类型
kind: Pod
metadata:
  # Pod 名称
  name: my-bootcamp-pod-1
  # 命名空间名称
  namespace: custom-namespace-1
spec:
  # 容器信息
  containers:
  # 一个名为my-bootcamp-1的容器
  - name: my-bootcamp-1
    # 镜像信息
    image: jocatalin/kubernetes-bootcamp:v1
    # 仅用于展示容器所使用的端口
    ports:
      - containerPort: 8080
        protocol: TCP
  • 效果如下所示
  • 另外创建资源时我们也可以不在配置文件指定命名空间,而是在kubectl create命令后添加 -n <命名空间名称> 选项实现。
  • 通常,我们在管理(编辑、查看、删除等)其他命名空间中的资源时,都需要通过-n选项显式指定命名空间的名称。

效果如下所示

Label 标签

  • Label 标签是一种简单却功能强大的K8s特性,其不仅适用于Pod,也可以适用于其他的K8s资源。简单来说,Label 标签就是附加到资源上的任意键值对

添加标签

  • 可以在创建资源的Yaml文件中指定标签信息
yaml 复制代码
apiVersion: v1
# 资源类型
kind: Pod
metadata:
  # Pod 名称
  name: my-bootcamp-pod-2-label
  # Pod的标签信息
  labels:
    creation_method: manual
    env: prod
spec:
  # 容器信息
  containers:
  # 一个名为my-bootcamp-2-label的容器
  - name: my-bootcamp-2-label
    # 镜像信息
    image: jocatalin/kubernetes-bootcamp:v1
    # 仅用于展示容器所使用的端口
    ports:
      - containerPort: 8080
        protocol: TCP
  • 也可以直接对现有Pod添加标签
ini 复制代码
# 给指定Pod添加标签
kubectl label pod <Pod名称> <标签的键>=<标签的值>

# 给名为my-bootcamp-pod-2的Pod添加名为env、值为prod的标签
kubectl label pod my-bootcamp-pod-2 env=prod

修改标签

  • 修改现有Pod的标签信息,类似于添加标签的命令。只需添加--overwrite选项即可
bash 复制代码
# 将指定Pod的标签值修改为指定值
kubectl label pod <Pod名称> <标签的键>=<标签的新值> --overwrite

# 将名为my-bootcamp-pod-2的Pod的名为env的标签值修改为test
kubectl label pod my-bootcamp-pod-2 env=test --overwrite

删除标签

  • 删除现有Pod的标签信息,只需指定欲删除标签的名称,并在后面添加一个减号即可
css 复制代码
# 对指定Pod,删除指定的标签
kubectl label pod <Pod名称> <标签的键>-

# 对名为my-bootcamp-pod-2-label的Pod, 删除名为creation_method的标签
kubectl label pod my-bootcamp-pod-2-label creation_method-

查看标签

  • 查看资源时,可通过--show-labels选项实现查看所有标签信息
csharp 复制代码
# 查看所有Pod资源, 同时展示所有标签信息
kubectl get pod --show-labels
  • 查看资源时,可通过-L选项实现查看感兴趣的标签信息
xml 复制代码
# 查看所有Pod资源, 同时展示指定标签名的标签信息
kubectl get pod -L <标签名1>,<标签名2>,<标签名3>

Annotation 注解

  • Annotation注解和标签很类似,其同样是一个键值对。但目的是将非标识性的元数据附加到K8s资源对象上,以便客户端程序(例如工具和库)能够获取这些元数据信息。故在注解中不存在所谓的注解选择器

添加注解

  • 可以在创建资源的Yaml文件中指定注解信息
yaml 复制代码
apiVersion: v1
# 资源类型
kind: Pod
metadata:
  # Pod 名称
  name: my-bootcamp-pod-2-annotation
  # Pod的注解信息
  annotations:
    my.Author: "Aaron Zhu"
    my.Age: "18"
spec:
  # 容器信息
  containers:
  # 一个名为my-bootcamp-2-annotation的容器
  - name: my-bootcamp-2-annotation
    # 镜像信息
    image: jocatalin/kubernetes-bootcamp:v1
    # 仅用于展示容器所使用的端口
    ports:
      - containerPort: 8080
        protocol: TCP
  • 也可以直接对现有Pod添加注解
ini 复制代码
# 给指定Pod添加注解
kubectl annotate pod <Pod名称> <注解的键>=<注解的值>

# 给名为my-bootcamp-pod-2的Pod添加名为name、值为hello的注解
kubectl annotate pod my-bootcamp-pod-2 name=hello

修改注解

  • 修改现有Pod的注解信息,类似于添加注解的命令。只需添加--overwrite选项即可
ini 复制代码
# 将指定Pod的注解值修改为指定值
kubectl annotate pod <Pod名称> <注解的键>=<注解的新值> --overwrite

# 将名为my-bootcamp-pod-2的Pod的名为name的注解值修改为hi
kubectl annotate pod my-bootcamp-pod-2 name=hi --overwrite

删除注解

  • 删除现有Pod的注解信息,只需指定欲删除注解的名称,并在后面添加一个减号即可
perl 复制代码
# 对指定Pod,删除指定的注解
kubectl annotate pod <Pod名称> <注解的键>-

# 对名为my-bootcamp-pod-2的Pod, 删除名为name的注解
kubectl annotate pod my-bootcamp-pod-2 name-

查看注解

  • 可借助于kubectl describe命令查看注解信息
sql 复制代码
kubectl describe <Pod名称>
  • 而如果使用kubectl get命令查看Json形式的Pod信息,我们会发现注解信息位于.metadata.annotations项中。故我们还可以使用-o jsonpath选项指定注解的路径来直接查看
ini 复制代码
# 查看指定Pod的注解信息
kubectl get pod <Pod名称> -o jsonpath='{.metadata.annotations}'
kubectl get pod my-bootcamp-pod-2-annotation -o jsonpath='{.metadata.annotations}'

效果如下所示

相关推荐
智慧老师4 分钟前
Spring基础分析13-Spring Security框架
java·后端·spring
搬码后生仔1 小时前
asp.net core webapi项目中 在生产环境中 进不去swagger
chrome·后端·asp.net
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
Lx3522 小时前
Pandas数据重命名:列名与索引为标题
后端·python·pandas
小池先生2 小时前
springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
java·spring boot·后端
百罹鸟2 小时前
【vue高频面试题—场景篇】:实现一个实时更新的倒计时组件,如何确保倒计时在页面切换时能够正常暂停和恢复?
vue.js·后端·面试
小蜗牛慢慢爬行3 小时前
如何在 Spring Boot 微服务中设置和管理多个数据库
java·数据库·spring boot·后端·微服务·架构·hibernate
wm10434 小时前
java web springboot
java·spring boot·后端
龙少95436 小时前
【深入理解@EnableCaching】
java·后端·spring
溟洵8 小时前
Linux下学【MySQL】表中插入和查询的进阶操作(配实操图和SQL语句通俗易懂)
linux·运维·数据库·后端·sql·mysql