【OpenKruise】ResourceDistribution实现资源(secret、configmap)分发

举报
可以交个朋友 发表于 2025/12/15 16:48:47 2025/12/15
【摘要】 一、背景痛点:在对 Secret、ConfigMap 等 namespace-scoped 资源进行跨 namespace 分发及同步的场景中,原生 kubernetes 目前只支持用户 one-by-one 地进行手动分发与同步,十分地不方便。典型案例:SidecarSet 的 imagePullSecrets 全局预热 ,业务 NS 数量多,SidecarSet 又要拉取私有镜像时,不...

一、背景

痛点:在对 Secret、ConfigMap 等 namespace-scoped 资源进行跨 namespace 分发及同步的场景中,原生 kubernetes 目前只支持用户 one-by-one 地进行手动分发与同步,十分地不方便。
典型案例:

  • SidecarSet 的 imagePullSecrets 全局预热 ,业务 NS 数量多,SidecarSet 又要拉取私有镜像时,不再人工逐 个NS 建 Secret,一次性下发即可。
  • “同一份” ConfigMap/Secret 被 >2 个 NS 使用 例如:统一 JVM 参数、日志配置、APM Agent 版本号等,后续只需改一次,所有目标 NS 自动同步。
  • Ingress 多 NS 复用同一张 TLS 证书 ,证书更新走 ResourceDistribution,所有 Ingress Secret 秒级同步,避免证书过期导致线上告警
  • 公共env变量 统一管理,把公共env变量 做成 ConfigMap,通过 ResourceDistribution 统一下发,各业务 yaml模板只需通过 envFrom configMapRef读取,不再需要把大段 values 拷来拷去。

总结:
只要你的集群里出现“同一份 ConfigMap/Secret 要被很多 NS 使用,且后续还会改”——就可以用 ResourceDistribution 把“人工多次 apply” 变成 “一次写入、处处同步”

二、约束

1.已安装openkruise
2.确认特性开关ResourceDistributionGate已开启

helm repo add openkruise https://openkruise.github.io/charts
helm repo update
helm install kruise openkruise/kruise  --set featureGates="ResourceDistributionGate=true"

三、操作步骤

步骤一: 将harbo的认证信息进行base64加密

AUTHJSON=$(echo -n '{"auths":{"https://harbor.example.com":{"username":"harbor","password":"password","auth":"'$(echo -n 'harbor:password' | base64 -w0)'"}}}' | base64 -w0)

步骤二: 创建ResourceDistribution资源harbor-secret-rd.yaml

cat >harbor-secret-rd.yaml<<EOF
apiVersion: apps.kruise.io/v1alpha1
kind: ResourceDistribution
metadata:
  name: harbor-secret-rd
spec:
  resource:
    apiVersion: v1
    kind: Secret
    metadata:
      name: harbor-secret
    type: kubernetes.io/dockerconfigjson
    data:
      .dockerconfigjson: ${AUTHJSON}
  targets:
    allNamespaces: true
    excludedNamespaces:
      list:
      - name: kube-node-lease
      - name: monitoring
      - name: kube-system
      - name: kube-public
EOF

当前效果为除命名空间kube-node-lease、monitoring、kube-system kube-public外,所有命名空间下都创建名为harbor-secret的secret
Targets字段说明
targets字段目前支持四种规则来描述用户所在分发的目标命名空间,包括allNamespaces、includedNamespaces、namespaceLabelSelector以及excludeNamespaces:

  • allNamespaces: bool值,如果为true,则分发至所有命名空间
  • includedNamespaces: 通过Name来匹配目标命名空间
  • namespaceLabelSelector: 通过LabelSelector来匹配目标命名空间
  • excludeNamespaces: 通过Name来排除某些不想分发的命名空间

步骤三:应用harbor-secret-rd.yaml

kubectl apply -f harbor-secret-rd.yaml

image.png

步骤四: 查看

kubectl get secret -A | grep harbor

image.png

扩展: CCE云容器引擎中开启特性开关ResourceDistributionGate

kubectl -n kube-system edit deploy kruise-controller-manager

添加该参数

        - --feature-gates=ResourceDistributionGate=true

image.png

稍等片刻后等pod正常运行
注意:升级openKruise插件可能会导致新增参数被覆盖掉,需要重新添加。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。