我计划在 k8s 上创建一个特殊的“部署者”部署(每个集群一个“部署者”)。它的作用是从一个中心位置提取规范,创建 k8s 清单并应用它们。最终结果应该是多个部署,每个部署都在它自己的命名空间中,带有服务和入口,以及包含数据库凭据的秘密。
我不想直接传输和管理数据库详细信息。相反,我正在考虑创建一个 CustomResourceDefinition 'dbservice',其中包含一个 DB 服务名称。然后配置一个 k8s 操作符,它将:
- 获取(监控)这样的“dbservice”资源。
- 如果此类服务已经存在,请与数据库托管服务联系。如果不是,它将使用自定义资源中的一些规范创建它。
- 获取主机名、密码、用户、数据库名称和端口,并将它们存储在部署 (envvar) 将使用的密钥中。
那样:
- 每个部署都会等待它的数据库密码,并且在密码存在之前不会启动,这意味着数据库已准备好。
- 我不必手动管理数据库服务。
- 我不必通过电线传输密码。
为此需要发生什么(根据我的计划):
- 操作员需要有权限与数据库托管提供商交谈(可能会使用 API 密钥访问另一个 k8s 存储的秘密)。
- 操作员需要具有在所有命名空间中创建机密的权限。
由于我对 k8s 和 devops 还很陌生,所以我想验证这种方法是否合理而不是反模式。