【云原生】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}'

效果如下所示

相关推荐
全栈派森27 分钟前
云存储最佳实践
后端·python·程序人生·flask
CircleMouse32 分钟前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
獨枭2 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架2 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱2 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
☞无能盖世♛逞何英雄☜2 小时前
Flask框架搭建
后端·python·flask
进击的雷神2 小时前
Perl语言深度考查:从文本处理到正则表达式的全面掌握
开发语言·后端·scala
进击的雷神2 小时前
Perl测试起步:从零到精通的完整指南
开发语言·后端·scala
豌豆花下猫3 小时前
Python 潮流周刊#102:微软裁员 Faster CPython 团队(摘要)
后端·python·ai
秋野酱4 小时前
基于javaweb的SpringBoot驾校预约学习系统设计与实现(源码+文档+部署讲解)
spring boot·后端·学习