示例场景假设你有一个 Nginx Deployment需要通过annotations传递自定义参数比如日志级别、备份策略、告警阈值用一个简单的脚本读取这些参数执行对应的运维操作比如根据日志级别调整配置。第一步在 Deployment.yaml 中定义注解传递参数这里的annotations就是用来传递自定义参数的载体键名可以自定义建议加前缀避免冲突值可以是字符串、简单 JSON 等yamlapiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy # 核心通过 annotations 传递自定义参数 annotations: # 自定义参数1日志级别字符串类型 ops/config/log-level: info # 自定义参数2是否开启自动备份布尔型字符串形式 ops/backup/enable: true # 自定义参数3备份保留天数数值型字符串形式 ops/backup/retention-days: 7 # 自定义参数4告警CPU阈值JSON格式存复杂参数 ops/alert/cpu-threshold: {warning: 80, critical: 95} spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25 ports: - containerPort: 80第二步读取注解中的参数脚本实现写一个简单的 Shell 脚本也可以用 Python/Go通过kubectl读取 Deployment 的annotations解析并使用这些参数bash运行#!/bin/bash # 脚本名read-annotations-params.sh # 功能读取 Deployment 的 annotations 参数并执行对应逻辑 # 定义要读取的 Deployment 名称 DEPLOYMENT_NAMEnginx-deploy NAMESPACEdefault # 1. 读取单个简单参数日志级别 LOG_LEVEL$(kubectl get deploy $DEPLOYMENT_NAME -n $NAMESPACE -o jsonpath{.metadata.annotations.ops/config/log-level}) # 2. 读取备份开关参数 BACKUP_ENABLE$(kubectl get deploy $DEPLOYMENT_NAME -n $NAMESPACE -o jsonpath{.metadata.annotations.ops/backup/enable}) # 3. 读取备份保留天数 RETENTION_DAYS$(kubectl get deploy $DEPLOYMENT_NAME -n $NAMESPACE -o jsonpath{.metadata.annotations.ops/backup/retention-days}) # 4. 读取复杂JSON参数需要 jq 解析 CPU_THRESHOLD_JSON$(kubectl get deploy $DEPLOYMENT_NAME -n $NAMESPACE -o jsonpath{.metadata.annotations.ops/alert/cpu-threshold}) # 解析JSON中的 warning 阈值 CPU_WARNING$(echo $CPU_THRESHOLD_JSON | jq -r .warning) # 打印读取到的参数模拟使用参数 echo 从 annotations 读取的参数 echo 日志级别$LOG_LEVEL echo 是否开启备份$BACKUP_ENABLE echo 备份保留天数$RETENTION_DAYS echo CPU告警警告阈值$CPU_WARNING% # 根据参数执行逻辑示例 if [ $BACKUP_ENABLE true ]; then echo ✅ 执行备份操作保留 $RETENTION_DAYS 天备份... # 这里可以写实际的备份命令比如备份Nginx配置 # cp /etc/nginx/nginx.conf /backup/nginx-$(date %Y%m%d).conf fi if [ $LOG_LEVEL debug ]; then echo 调整Nginx日志级别为debug... # 实际场景中可以修改Nginx配置并重启 fi第三步运行脚本验证效果先部署上面的 Deploymentbash运行kubectl apply -f deployment.yaml给脚本加执行权限并运行bash运行chmod x read-annotations-params.sh ./read-annotations-params.sh输出结果参数成功读取并使用plaintext 从 annotations 读取的参数 日志级别info 是否开启备份true 备份保留天数7 CPU告警警告阈值80% ✅ 执行备份操作保留 7 天备份...进阶场景控制器读取注解参数除了脚本K8s 自定义控制器比如 Operator也会通过注解读取参数比如yaml# 示例给 Deployment 加注解让自定义Ingress控制器读取转发规则 annotations: # 自定义参数Ingress域名 custom-ingress/domain: nginx.example.com # 自定义参数是否开启HTTPS custom-ingress/https-enable: true # 自定义参数证书名称 custom-ingress/tls-secret: nginx-tls-secret控制器会监听 Deployment 的注解变化自动创建对应的 Ingress 资源无需手动配置 —— 这就是注解传递参数的典型生产场景。一、Ingress 相关插件最常用Ingress 插件是读取注解做动态配置的典型代表几乎所有 Ingress 控制器都依赖注解实现自定义规则。1. Ingress-NGINX官方主流 Ingress 控制器通过注解可以动态配置路由规则、超时时间、SSL、限流等无需修改 Ingress 核心配置yamlapiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx-ingress annotations: # 动态设置连接超时时间核心参数 nginx.ingress.kubernetes.io/proxy-connect-timeout: 30s # 动态设置响应超时时间 nginx.ingress.kubernetes.io/proxy-read-timeout: 60s # 动态开启HTTPS重定向 nginx.ingress.kubernetes.io/ssl-redirect: true # 动态配置限流每秒10个请求 nginx.ingress.kubernetes.io/limit-rps: 10 # 动态设置跨域CORS nginx.ingress.kubernetes.io/enable-cors: true nginx.ingress.kubernetes.io/cors-allow-origin: * spec: rules: - host: example.com http: paths: - path: / pathType: Prefix backend: service: name: nginx-service port: number: 802. Traefik轻量级 Ingress 控制器同样通过注解动态配置路由、负载均衡、健康检查等yamlmetadata: annotations: # 动态设置路由优先级 traefik.ingress.kubernetes.io/priority: 10 # 动态开启健康检查 traefik.ingress.kubernetes.io/service.healthcheck.path: /health traefik.ingress.kubernetes.io/service.healthcheck.interval: 10s # 动态配置负载均衡策略轮询/IP哈希 traefik.ingress.kubernetes.io/service.sticky.cookie: true二、监控 / 可观测性插件这类插件通过注解动态控制监控采集规则无需修改监控服务器配置。1. Prometheus监控采集通过注解动态决定是否采集 Pod/Deployment 的指标、采集端口 / 路径等yamlapiVersion: apps/v1 kind: Deployment metadata: name: app-deploy annotations: # 动态开启指标采集核心开关 prometheus.io/scrape: true # 动态指定采集端口 prometheus.io/port: 8080 # 动态指定采集路径 prometheus.io/path: /metrics # 动态添加采集标签用于分类 prometheus.io/label: appmyapp2. Grafana Agent轻量级监控采集类似 Prometheus通过注解动态配置采集规则yamlannotations: # 动态开启采集 grafana.com/scrape: true # 动态指定采集间隔 grafana.com/scrape-interval: 15s三、服务网格插件以 Istio 为代表通过注解动态配置流量治理规则。Istio服务网格通过注解动态控制流量路由、熔断、重试、镜像等yamlapiVersion: v1 kind: Service metadata: name: app-service annotations: # 动态开启流量镜像把10%流量镜像到测试服务 traffic.sidecar.istio.io/mirror: app-service-test traffic.sidecar.istio.io/mirror-percent: 10 # 动态配置重试策略最多重试3次间隔2秒 retries.istio.io/attempts: 3 retries.istio.io/perTryTimeout: 2s # 动态关闭Sidecar注入针对特定服务 sidecar.istio.io/inject: false四、调度 / 资源管理插件这类插件通过注解动态调整 Pod 调度、资源限制等规则。1. Kubernetes Descheduler重新调度插件通过注解动态标记 Pod 是否允许被重新调度yamlapiVersion: v1 kind: Pod metadata: annotations: # 动态禁止Descheduler删除该Pod descheduler.alpha.kubernetes.io/evict: false2. Vertical Pod Autoscaler (VPA)垂直扩缩容通过注解动态调整 VPA 策略yamlannotations: # 动态设置VPA更新策略立即更新/重启时更新 vpa-update-policy: immediate # 动态忽略某些容器的资源调整 vpa.exclude-containers: sidecar五、备份 / 存储插件VeleroK8s 备份工具通过注解动态控制备份策略yamlapiVersion: apps/v1 kind: Deployment metadata: name: app-deploy annotations: # 动态排除该资源不参与备份 velero.io/exclude-from-backup: true # 动态指定备份时的标签 velero.io/backup-label: envprod六、安全 / 权限插件PodSecurityPolicyPSP已被 PodSecurityContext 替代旧版本中通过注解动态控制 Pod 安全策略yamlannotations: # 动态指定Pod使用的安全策略 podsecuritypolicy.kubernetes.io/enforce: restricted核心使用原则注解前缀每个插件的注解都有固定前缀如nginx.ingress.kubernetes.io/、prometheus.io/避免冲突动态生效多数插件会监听注解变化修改注解后无需重启插件配置即可动态生效优先级注解配置 插件全局配置可实现 “全局默认 资源自定义” 的灵活策略。总结annotations传递参数的核心是把参数以键值对形式写在 metadata.annotations 中键名建议加自定义前缀如ops/避免冲突读取参数的方式通过kubectl jsonpath或 K8s API 获取注解值脚本 / 控制器解析后使用适用场景传递运维配置、自定义规则、第三方工具参数等无需修改资源核心配置即可扩展逻辑。