ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Bitnami Charts 配置避坑指南:Common 库复用 + values.yaml 三场景 + 上线前 10 项安全体检

Bitnami Charts 配置避坑指南:Common 库复用 + values.yaml 三场景 + 上线前 10 项安全体检 Bitnami Charts 配置避坑指南Common 库复用 values.yaml 三场景 上线前 10 项安全体检【免费下载链接】chartsBitnami Helm Charts项目地址: https://gitcode.com/GitHub_Trending/charts30/charts上周二把 Bitnami Charts 这套组件迁到私有仓库20 个 chart 的镜像 registry 我们改漏了两个Pod 集体 ImagePullBackOff升级更惨——密码字段为空直接报错。这两个坑靠的是仓库里的 Common 库和一套 values.yaml 使用姿势今天就讲清楚。Common 库一次定义处处生效 没有 Common 库之前每个 chart 各写一套命名、镜像拼装、标签逻辑规则一改几十个 chart 要逐个动手写法还容易跑偏。Bitnami 的解法是把公共函数收进一个叫 common 的 library charttype: library本身不可部署其余 chart 在 Chart.yaml 里声明依赖后统一调用。翻一遍 common 库模板目录 就明白它的收敛方式21 个 .tpl 文件每个只管一件事——命名、镜像、标签、资源预设、存储、校验各归各位。命名一个函数搞定覆盖、去重、截断{{- if .Values.fullnameOverride -}} {{- .Values.fullnameOverride | trunc 63 | trimSuffix - -}} {{- else -}} {{- printf %s-%s $releaseName $name | trunc 63 | trimSuffix - -}} {{- end -}}它帮你省掉三件事K8s 名字字段 63 字符上限、release 名已包含 chart 名就别重复拼前缀的去重逻辑、结尾连字符的清洗。集群里所有资源名都出自这一个函数跨 chart 排查问题时直接 grep 名字就行。真要单独改某个资源名用nameOverride局部覆盖fullnameOverride才是彻底接管命名的重锤。镜像registry 改一处全部子 chart 跟着走{{- $registryName : default .imageRoot.registry ((.global).imageRegistry) -}} {{- if $registryName -}} {{- printf %s/%s%s%s $registryName $repositoryName $separator $termination -}} {{- end -}}镜像地址由 registry、repository、tag、digest 四段拼成关键在第一行只要设了global.imageRegistry它就压过每个 chart 自己的 registry。迁私有仓库时改一处全局配置而不是逐个 chart 改。填了 digest 时分隔符自动从:换成拉取密钥也是同理——全局和 chart 级的 pullSecrets 会合并去重统一处理。标签标准标签 自有标签不打架app.kubernetes.io/name: {{ include common.names.name . }} helm.sh/chart: {{ include common.names.chart . }} app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} app.kubernetes.io/version: {{ include common.labels.value . | quote }}这套标准标签由一个 define 生成值还会做清洗——AppVersion 里的之类字符不会把 label 弄坏。想加自有标签别动模板给.Values.commonLabels传值即可库内部会自动 merge。注意 selector 用的是另一个 matchLabels只保留 name 和 instance 两个键不然 Deployment 的 selector 会被你的标签污染而 selector 建了就不能改。当 Common 库不够用时——如何安全地扩展自定义 define 有边界。别覆盖 common 的同名 define主 chart 的同名模板会压过库里的你顺手一改所有引用该库的 chart 行为都静默变了。自定义函数请带业务前缀如myapp.names.fullname。也别绕开命名函数自己拼字符串截断和清洗规则就废了。还有一个高频报错调用公共函数要传 dict 上下文漏了context键渲染时直接 nil pointer。新函数写完先用helm template本地验证再提交。values.yaml一份配置文件讲清楚 ⚡别逐参数背 postgresql values.yaml——1900 多行。这些文件骨架都一致global → 通用参数 → image → persistence → service → 探针README 就是按文件里的param注释生成的不懂的参数直接 grep 注释比看视频快。按场景分你真正要动的是下面三组。最小可运行配置这些字段默认值就够用helm install mypg bitnami/postgresql裸装就能跑镜像 tag 缺省回落到 chart 的 AppVersion探针、资源都有合理默认值。别急着填先看默认值够不够。真正要显式写的只有三类密码字段auth.*、要不要持久化、资源要不要放大。这里有个反直觉的设计密码留空安装时不报错会自动生成并写进 Secret但升级时留空校验模板 会直接 fail。要复用已有凭据的话auth.existingSecret是一等公民指向已存在的 Secret 即可。私有化部署必改项镜像仓库三行改完# 改前默认值走公网仓库 global: imageRegistry: imagePullSecrets: [] # 改后全局一改所有子 chart 跟随 global: imageRegistry: harbor.corp.example.com imagePullSecrets: [regcred] defaultStorageClass: nfs-csi因为 Common 库的镜像模板优先取 global所以像下面这类多节点集群部署每个节点的仓库和存储类会一起切换——这就是全局参数的价值。注意拉取密钥要先在目标 namespace 建好kubernetes.io/dockerconfigjson类型Common 库只引用名字不替你创建。性能调优旋钮资源预设、探针、诊断模式资源预设实现 内置七档limits 约为 requests 的 150%。模板注释里写得很直白预设只适合基础测试别上生产预设CPU 请求内存请求CPU/内存限制nano100m128Mi150m / 192Mimicro250m256Mi375m / 384Mismall500m512Mi750m / 768Mimedium500m1Gi750m / 1.5Gilarge12Gi1.5 / 3Gixlarge13Gi3 / 6Gi2xlarge13Gi6 / 12Gi探针方面启动慢的中间件记得开startupProbe默认 liveness 的 failureThreshold 对大数据库经常不够。排查故障时可以临时开diagnosticMode.enabledtrue它会关掉所有探针并替换容器命令方便你 exec 进去慢慢查查完记得关回去。生产上线前的安全体检清单 生产上 PostgreSQL HA 这类有状态组件光看拓扑图不够按下面这张清单过一遍再按回车检查项风险修复命令容器以 root 运行容器逃逸、提权--set securityContext.runAsNonRoottrue未设 requests/limitsOOM 拖垮节点--set resourcesPresetsmall生产建议自定义 resources密码明文写在 values 或命令行凭据泄露进 git 和 shell 历史建 Secret 后--set auth.existingSecretxxx镜像只钉 tag 不钉 digest镜像被篡改、不可复现--set image.digestsha256:...无 NetworkPolicyPod 间横向移动用extraDeploy渲染或单独部署慢启动应用没开 startupProbeliveness 误杀慢启动容器--set startupProbe.enabledtrue持久化没配或 storageClass 选错数据丢失、Pod 不调度--set persistence.storageClass... persistence.size10Gi用了 cluster-admin权限过大换成 chart 按最小权限生成的 ServiceAccountetcd 未开 Secret 加密Secret 明文落盘启用 EncryptionConfiguration无监控注解故障发现全靠人肉加prometheus.io/scrape注解接入 Prometheus三个过来人提醒升级时密码留空是最常见翻车点。报错信息里其实带了取回旧值的命令先kubectl get secret把旧密码捞出来回填 values再升级别裸奔。storageClass 写错要到调度时才炸。那时 PVC 可能已创建、PV 已绑定换存储类只能删库重建——装之前先kubectl get sc核对名字。自有标签别塞进 selector。commonLabels可以加到 metadata.labels但 Deployment 的 selector 建了就不能改污染一次只能整个 release 删了重建。回到周二那晚global 一改20 个 chart 全过了。你手里这套 Bitnami Charts 上线前先跑一遍helm lint加一次镜像安全扫描再按回车。【免费下载链接】chartsBitnami Helm Charts项目地址: https://gitcode.com/GitHub_Trending/charts30/charts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表