一、前言

本文主要以下几方面介绍k8s中的标签-label:

  • 什么是标签
  • 标签的语法
  • 标签的作用是什么
  • 标签如何使用
  • 标签如何结合标签选择器使用

本文主要以下几方面介绍k8s中的亲和力-Affinity:

  • 什么是亲和力
  • 亲和力出现背景
  • 亲和力分类
  • 亲和力使用场景
  • 亲和力配置详解
  • 拓扑域TopologyKey详解

二、什么是标签

标签(Labels) 是附加到 Kubernetes对象(比如 Pod)上的键值对。 标签旨在用于指定对用户有意义且相关的对象的标识属性,但不直接对核心系统有语义含义。 标签可以用于组织和选择对象的子集。标签可以在创建时附加到对象,随后可以随时添加和修改。 每个对象都可以定义一组键/值标签。每个键对于给定对象必须是唯一的。

三、标签的语法

标签是键值对。有效的标签键有两个段:可选的前缀和名称,用斜杠(/)分隔。 名称段是必需的,必须小于等于 63 个字符,以字母数字字符([a-z0-9A-Z])开头和结尾, 带有破折号(-),下划线(_),点( .)和之间的字母数字。 前缀是可选的。如果指定,前缀必须是 DNS 子域:由点(.)分隔的一系列 DNS 标签,总共不超过 253 个字符, 后跟斜杠(/)。

如果省略前缀,则假定标签键对用户是私有的。 向最终用户对象添加标签的自动系统组件(例如 kube-schedulerkube-controller-managerkube-apiserverkubectl 或其他第三方自动化工具)必须指定前缀。

kubernetes.io/k8s.io/ 前缀是为 Kubernetes 核心组件保留的。

有效标签值:

  • 必须为 63 个字符或更少(可以为空)
  • 除非标签值为空,必须以字母数字字符([a-z0-9A-Z])开头和结尾
  • 包含破折号(-)、下划线(_)、点(.)和字母或数字

例如,以下是一个清单 (manifest),适用于具有 environment: productionapp: nginx 这两个标签的 Pod:

apiVersion: v1
kind: Pod
metadata:
  name: label-demo
  labels:
    environment: production
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

四、标签的作用是什么

标签就是为了节点标明属性,用于区分不同的节点。