Kubernetes 是一款流行的容器编排工具,它可以管理 Docker 容器化应用的部署和扩缩容,还提供了一些方便的功能,比如应用配置管理。在 Kubernetes 中,应用的配置信息可以存储在 ConfigMap 和 Secret 中,这两种资源可以帮助开发者更方便地进行应用配置管理和敏感信息保护。
ConfigMap
ConfigMap 是 Kubernetes 中一种用于存储应用配置信息的资源对象,它可以将配置信息以键值对的形式存储,并通过环境变量、命令行参数、配置文件等方式注入到容器中。使用 ConfigMap 可以将应用的配置信息与代码分离,从而实现应用的可配置性和可移植性。
创建 ConfigMap
要创建 ConfigMap,我们可以使用 kubectl 命令行工具或 YAML 文件定义。下面是一个使用 YAML 文件定义 ConfigMap 的示例:
apiVersion: v1 kind: ConfigMap metadata: name: my-config data: DB_NAME: mydb DB_USER: myuser DB_PASSWORD: mypassword
这个 YAML 文件定义了一个 ConfigMap 对象,其名称为 my-config,包含三个键值对,分别是数据库名称、用户名和密码。当应用需要用到这些配置时,可以通过 ${ENV_NAME} 的方式来引用这些变量。
使用 ConfigMap
创建好 ConfigMap 后,我们可以通过环境变量、命令行参数、配置文件等方式将其注入到容器中。下面是一个使用 ConfigMap 环境变量注入的示例:
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ -------- ---- - ----- ------- ---------- ---------------- ----- --------- ---- ------- - ----- ------- ---------- ---------------- ----- --------- ---- ------- - ----- ----------- ---------- ---------------- ----- --------- ---- -----------
在这个示例中,我们将 ConfigMap 中的三个键值对作为环境变量注入到容器中,这样应用就可以直接使用这些环境变量来连接数据库,而无需硬编码这些配置信息。
更新 ConfigMap
如果我们需要更新 ConfigMap 中的配置信息,可以通过 kubectl 命令行工具或 YAML 文件进行更新。下面是一个使用 kubectl 更新 ConfigMap 的示例:
kubectl create configmap my-config --from-literal=DB_NAME=mydb --dry-run=client -o yaml | kubectl apply -f -
这个命令会将 ConfigMap 中的 DB_NAME 键的值从 mydb 更新为 mydb-1,而不会影响其他的键值对。
Secret
Secret 是 Kubernetes 中一种用于存储敏感信息的资源对象,它可以将敏感信息以 Base64 编码的形式存储,并通过环境变量、命令行参数、配置文件等方式注入到容器中。使用 Secret 可以保护应用的敏感信息,比如数据库密码、API 密钥等。
创建 Secret
要创建 Secret,我们也可以使用 kubectl 命令行工具或 YAML 文件定义。下面是一个使用 YAML 文件定义 Secret 的示例:
apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: DB_PASSWORD: bXlwYXNzd29yZA==
这个 YAML 文件定义了一个 Secret 对象,其名称为 my-secret,包含一个键值对,键为数据库密码,值为 mypassword 的 Base64 编码。当应用需要用到这些敏感信息时,也可以通过 ${ENV_NAME} 的方式来引用这些变量。
使用 Secret
创建好 Secret 后,我们也可以通过环境变量、命令行参数、配置文件等方式将其注入到容器中。下面是一个使用 Secret 环境变量注入的示例:
-- -------------------- ---- ------- ----------- -- ----- --- --------- ----- ------ ----- ----------- - ----- ------------ ------ -------- ---- - ----- ----------- ---------- ------------- ----- --------- ---- -----------
在这个示例中,我们将 Secret 中的 DB_PASSWORD 键作为环境变量注入到容器中,这样应用就可以直接使用这个环境变量来连接数据库,而无需硬编码数据库密码。
更新 Secret
如果我们需要更新 Secret 中的敏感信息,可以通过 kubectl 命令行工具或 YAML 文件进行更新。下面是一个使用 kubectl 更新 Secret 的示例:
kubectl create secret generic my-secret --from-literal=DB_PASSWORD=mypassword-1 --dry-run=client -o yaml | kubectl apply -f -
这个命令会将 Secret 中的 DB_PASSWORD 键的值从 mypassword 更新为 mypassword-1,而不会影响其他的键值对。
总结
通过 ConfigMap 和 Secret,我们可以更方便地实现应用的配置管理和敏感信息保护。在实践中,我们可以将 ConfigMap 和 Secret 与 Deployment、StatefulSet 等 Kubernetes 资源对象结合使用,从而实现应用的自动化部署和扩缩容。如果您想深入了解 Kubernetes 的应用配置管理和编排能力,建议阅读官方文档或参加相关的培训课程。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64fc4271f6b2d6eab32189a6