针对特定阶段的 K8s 配置的最佳方式是什么?
Whats the best way for stage-specific K8s config?
假设我们必须管理阶段测试、int 和 prod 的数据库连接字符串。
Kubernetes 的模式是什么?
我会通过 ConfigMaps 处理一般配置。为每个环境创建配置并让您的 pods/deployment 通过环境变量使用这些值。
这种方法允许您将配置与 k8 对象定义分离,并能够为每个环境注入所需的配置。
对于敏感数据,例如连接字符串中可能包含用户名和密码,请考虑改用 Secrets。
根据我的经验,最好的方法是使用更高级别的构造,例如 Helm Chart。通过这种方式,您可以以平台不可知的方式管理所有清单,并使它们在图表 install/update.
期间可配置
这样您就可以同时使用 ConfigMap、Secrets 或环境变量,并从 install/upgrade 期间设置的值填充它们。使用 helm
,你会这样做:
helm install -f values.yaml
:其中 values yaml 包含所有非默认值(即数据库密码)
helm upgrade <release> --reuse-values --set image.tag=1.0.1
表示发布一个新版本,保留在初始安装期间定义的所有其他值。
对于非默认组件,如 ie。开发数据库,您可以使用像 devdb.enabled
这样的值,默认值为 false
并仅在您要启动 devdb pod 并将数据库服务指向那里的开发环境中将其设置为 true(所有逻辑它在 helm chart 的清单模板中)
假设我们必须管理阶段测试、int 和 prod 的数据库连接字符串。
Kubernetes 的模式是什么?
我会通过 ConfigMaps 处理一般配置。为每个环境创建配置并让您的 pods/deployment 通过环境变量使用这些值。
这种方法允许您将配置与 k8 对象定义分离,并能够为每个环境注入所需的配置。
对于敏感数据,例如连接字符串中可能包含用户名和密码,请考虑改用 Secrets。
根据我的经验,最好的方法是使用更高级别的构造,例如 Helm Chart。通过这种方式,您可以以平台不可知的方式管理所有清单,并使它们在图表 install/update.
期间可配置这样您就可以同时使用 ConfigMap、Secrets 或环境变量,并从 install/upgrade 期间设置的值填充它们。使用 helm
,你会这样做:
helm install -f values.yaml
:其中 values yaml 包含所有非默认值(即数据库密码)helm upgrade <release> --reuse-values --set image.tag=1.0.1
表示发布一个新版本,保留在初始安装期间定义的所有其他值。
对于非默认组件,如 ie。开发数据库,您可以使用像 devdb.enabled
这样的值,默认值为 false
并仅在您要启动 devdb pod 并将数据库服务指向那里的开发环境中将其设置为 true(所有逻辑它在 helm chart 的清单模板中)