【OpenKruise】ResourceDistribution实现资源(secret、configmap)分发
一、背景
痛点:在对 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

步骤四: 查看
kubectl get secret -A | grep harbor

扩展: CCE云容器引擎中开启特性开关ResourceDistributionGate
kubectl -n kube-system edit deploy kruise-controller-manager
添加该参数
- --feature-gates=ResourceDistributionGate=true

稍等片刻后等pod正常运行
注意:升级openKruise插件可能会导致新增参数被覆盖掉,需要重新添加。
- 点赞
- 收藏
- 关注作者
评论(0)