Kubernetes 中注释值的语法是什么?

Tho*_*mas 3 kubernetes

根据 Kubernetes 文档

注释中的元数据可以小或大、结构化或非结构化,并且可以包含标签不允许的字符。

注释与标签一样,是键/值映射

然后是对注解键的语法的详细解释。但它没有提到价值部分。

在哪里可以找到有关 Kubernetes 中注释值允许的长度和字符集的更多信息?

whi*_*s11 7

在这里您可以找到验证当前 master 中注释的代码:

func ValidateAnnotations(annotations map[string]string, fldPath *field.Path) field.ErrorList {
    allErrs := field.ErrorList{}
    for k := range annotations {
        for _, msg := range validation.IsQualifiedName(strings.ToLower(k)) {
            allErrs = append(allErrs, field.Invalid(fldPath, k, msg))
        }
    }
    if err := ValidateAnnotationsSize(annotations); err != nil {
        allErrs = append(allErrs, field.TooLong(fldPath, "", TotalAnnotationSizeLimitB))
    }
    return allErrs
}
Run Code Online (Sandbox Code Playgroud)

keys根据您提到的规则进行验证。应用于值的唯一验证是所有注释的总长度(键的大小 + 所有注释的值的大小),不能超过 256 kB。

const TotalAnnotationSizeLimitB int = 256 * (1 << 10) // 256 kB

...

func ValidateAnnotationsSize(annotations map[string]string) error {
    var totalSize int64
    for k, v := range annotations {
        totalSize += (int64)(len(k)) + (int64)(len(v))
    }
    if totalSize > (int64)(TotalAnnotationSizeLimitB) {
        return fmt.Errorf("annotations size %d is larger than limit %d", totalSize, TotalAnnotationSizeLimitB)
    }
    return nil
}
Run Code Online (Sandbox Code Playgroud)