汇川AC700 PLC基于Codesys编程:从基础指令到通信配置实战
2026/9/13 12:43:01
Reloader 是 K8s 开源工具(https://github.com/stakater/Reloader),核心功能是监听 ConfigMap/Secret 的变更,自动触发使用这些配置的 Deployment/StatefulSet/DaemonSet 执行“滚动升级”(重建 Pod),确保 Pod 加载最新的配置,无需手动执行kubectl rollout restart。
# 1. 添加 Helm 仓库helm repoaddstakater https://stakater.github.io/stakater-charts helm repo update# 2. 安装 Reloader(指定命名空间,如 kube-system)helminstallreloader stakater/reloader\--namespace kube-system\--create-namespace\# 可选:设置日志级别、资源限制等--set resources.requests.cpu=100m\--set resources.requests.memory=128Mi\--setlogLevel=info# 3. 验证安装kubectl get pods -n kube-system -lapp=reloader# 输出示例:reloader-7f986d7896-xxxx 1/1 Running 0 5m# 下载官方部署文件并应用kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml# 验证(默认安装在 default 命名空间,可修改 YAML 调整)kubectl get pods -lapp=reloader若需监听特定命名空间、调整监听频率,可修改 Helm Values 或 YAML:
# 示例自定义 Values.yamlreloader:# 仅监听 default、prod 命名空间(默认监听所有)namespaces:include:["default","prod"]exclude:["kube-system"]# 调整配置监听间隔(默认 10 秒)pollInterval:5# 启用 Prometheus 监控(可选)metrics:enabled:trueport:9090应用自定义配置:
helminstallreloader stakater/reloader -n kube-system -f Values.yamlReloader 支持两种关联方式:「工作负载关联配置」「配置关联工作负载」,以下是最常用的场景示例。
给 Deployment 添加注解,指定“监听的 ConfigMap/Secret”,当配置变更时自动滚动升级。
# configmap.yamlapiVersion:v1kind:ConfigMapmetadata:name:app-confignamespace:defaultdata:app.conf:|env=prod log_level=info---# secret.yamlapiVersion:v1kind:Secretmetadata:name:app-secretnamespace:defaulttype:Opaquedata:password:dGVzdDEyMw==# 加密后的 test123应用配置:
kubectl apply -f configmap.yaml -f secret.yaml# deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:demo-appnamespace:defaultannotations:# 监听单个 ConfigMap:变更时滚动升级configmap.reloader.stakater.com/reload:"app-config"# 监听单个 Secret:变更时滚动升级secret.reloader.stakater.com/reload:"app-secret"# (可选)监听多个配置,用逗号分隔# configmap.reloader.stakater.com/reload: "app-config,db-config"spec:replicas:2selector:matchLabels:app:demo-apptemplate:metadata:labels:app:demo-appspec:containers:-name:demo-appimage:nginx:alpine# 挂载配置(验证配置生效)volumeMounts:-name:app-config-volumemountPath:/etc/app/config-name:app-secret-volumemountPath:/etc/app/secretvolumes:-name:app-config-volumeconfigMap:name:app-config-name:app-secret-volumesecret:name:app-secret应用 Deployment:
kubectl apply -f deployment.yamlkubectl edit configmap app-config# 将 env=prod 改为 env=test,保存退出kubectl rollout status deployment/demo-app# 输出示例:deployment "demo-app" successfully rolled outkubectl get pods -lapp=demo-app# 可见旧 Pod 被终止,新 Pod 启动(名称后缀变化)kubectlexec-it<新Pod名称>--cat/etc/app/config/app.conf# 输出:env=test → 配置已更新给 ConfigMap/Secret 添加注解,指定“要触发滚动升级的工作负载”,适合批量管理。
# 修改 app-config,添加反向关联注解apiVersion:v1kind:ConfigMapmetadata:name:app-confignamespace:defaultannotations:# 关联多个 Deployment/StatefulSet,用逗号分隔reloader.stakater.com/auto:"true"reloader.stakater.com/target:"deployment/demo-app,statefulset/demo-sts"data:app.conf:|env=prod log_level=inforeloader.stakater.com/auto: "true":启用反向关联;reloader.stakater.com/target:指定目标工作负载(格式:资源类型/资源名称)。StatefulSet 的使用方式与 Deployment 完全一致,仅需给 StatefulSet 添加注解:
apiVersion:apps/v1kind:StatefulSetmetadata:name:demo-stsnamespace:defaultannotations:secret.reloader.stakater.com/reload:"app-secret"spec:serviceName:demo-stsreplicas:2selector:matchLabels:app:demo-ststemplate:metadata:labels:app:demo-stsspec:containers:-name:demo-stsimage:nginx:alpinevolumeMounts:-name:app-secret-volumemountPath:/etc/app/secretvolumes:-name:app-secret-volumesecret:name:app-secret| 注解类型 | 注解名称 | 作用 | 示例 |
|---|---|---|---|
| 工作负载注解(监听ConfigMap) | configmap.reloader.stakater.com/reload | 监听指定 ConfigMap,变更触发滚动升级 | app-config,db-config |
| 工作负载注解(监听Secret) | secret.reloader.stakater.com/reload | 监听指定 Secret,变更触发滚动升级 | app-secret,db-secret |
| 配置注解(反向关联) | reloader.stakater.com/auto | 启用反向关联 | true |
| 配置注解(指定目标) | reloader.stakater.com/target | 指定要触发的工作负载 | deployment/demo-app,statefulset/demo-sts |
spec.strategy.rollingUpdate配置,Reloader 仅触发升级,不修改滚动策略:spec:strategy:rollingUpdate:maxSurge:1# 升级时最多多启动1个PodmaxUnavailable:0# 升级时最少可用Pod数(0=无中断)type:RollingUpdatedata字段变更,metadata变更(如标签、注解)不会触发升级。kubectl logs <reloader-pod> -n kube-system;configmap.reloader→ 正确);PVC绑定状态(有状态应用需确保存储可用)。如果需要针对「StatefulSet 有状态应用」或「多命名空间批量管理」的定制化示例,可以告诉我,我会补充对应的配置和验证步骤。