在Kubernetes中创建Secret时如何保留Matomo配置文件格式?
解决Kubernetes中Matomo配置Secret的格式保留问题
问题根源
你的YAML清单写法有误:
data字段要求值必须是base64编码的单行字符串,直接写入多行文本会被YAML解析为嵌套结构,导致挂载后格式混乱。- 之前尝试
stringData未生效,核心原因是没正确使用YAML的多行文本语法。
正确解决方案
方案1:使用stringData(推荐,无需手动编码)
Kubernetes 1.19及以上版本支持stringData字段,可直接写入明文多行内容,Kubernetes会自动完成base64编码。关键是用YAML的**块样式标量(|符号)**保留所有换行和缩进:
apiVersion: v1 kind: Secret metadata: name: matomo-config labels: app: matomo type: Opaque stringData: config: | [database] host = "matomodb.com" username = "${supersecret_secret}" password = "${supersecret_secret}" [Plugins] Plugins[] = "CorePluginsAdmin" Plugins[] = "CoreAdminHome" Plugins[] = "CoreHome" Plugins[] = "WebsiteMeasurable" Plugins[] = "Diagnostics" Plugins[] = "CoreVisualizations" Plugins[] = "Proxy" Plugins[] = "API" Plugins[] = "Widgetize" Plugins[] = "Transitions" Plugins[] = "LanguagesManager" Plugins[] = "Actions" Plugins[] = "Dashboard" Plugins[] = "MultiSites" Plugins[] = "Referrers"
|符号会完整保留配置文件的换行、空格等格式,完全匹配Matomo的要求。
方案2:使用data字段(需手动base64编码)
若你的Kubernetes版本低于1.19,只能使用data字段,需先将配置文件内容转成无换行的base64编码:
- 执行编码命令(以
config.ini.php为例):
cat config.ini.php | base64 -w 0
- 将编码后的单行字符串填入
data.config字段:
apiVersion: v1 kind: Secret metadata: name: matomo-config labels: app: matomo type: Opaque data: config: W2RhdGFiYXNlXQpob3N0ID0gIm1hdG9tb2RiLmNvbSIKdXNlcm5hbWUgPSAiJHtzdXBlcnNlY3JldF9zZWNyZXR9IgpwYXNzd29yZCA9ICR7c3VwZXJzZWNyZXRfc2VjcmV0fQoKW1BsdWdpbnNdClBsdWdpbnNbXSA9ICJDb3JlUGx1Z2luc0FkbWluIgpQbHVnaW5zW10gPSAiQ29yZUFkbWluSG9tZSIKUGx1Z2luc1tdID0gIkNvcmVIb21lIgpQbHVnaW5zW10gPSAiV2Vic2l0ZU1lYXN1cmFibGUiClBsdWdpbnNdWSA9ICJEaWFnbm9zdGljcyIKUGx1Z2luc1tdID0gIkNvcmVWaXN1YWxpemF0aW9ucyIKUGx1Z2luc1tdID0gIlByb3h5IgpQbHVnaW5zW10gPSJBUEkiClBsdWdpbnNdWSA9ICJXaWRnaXRpemUiClBsdWdpbnNdWSA9ICJUcmFuc2l0aW9ucyIKUGx1Z2luc1tdID0gIkxhbmd1YWdlc01hbmFnZXIiClBsdWdpbnNdWSA9ICJBY3Rpb25zIgpQbHVnaW5zW10gPSJEYXNjaG9hbCIKUGx1Z2luc1tdID0gIk11bHRpU2l0ZXMiClBsdWdpbnNdWSA9ICJSZWZlcnJlcnM=
注意:-w 0参数确保编码结果是单行,避免YAML解析错误。
挂载验证
创建Secret后,通过以下方式挂载到Pod,确保配置文件路径匹配Matomo的要求:
apiVersion: v1 kind: Pod metadata: name: matomo labels: app: matomo spec: containers: - name: matomo image: matomo:latest volumeMounts: - name: config-volume mountPath: /var/www/html/config/config.ini.php subPath: config volumes: - name: config-volume secret: secretName: matomo-config
内容的提问来源于stack exchange,提问作者Artur Ferfecki
相关产品推荐
相关产品推荐

