Kubernetes资源:ConfigMap与Secrets详解
立即解锁
发布时间: 2025-08-25 02:10:06 阅读量: 2 订阅数: 7 


Kubernetes for Developers: 实战容器编排与应用部署
### Kubernetes 中的 ConfigMap 与 Secrets 资源使用指南
在容器化应用的部署过程中,我们常常需要对应用进行一些配置,同时还要保护敏感信息。Kubernetes 提供了 ConfigMap 和 Secrets 这两种资源来满足这些需求。下面将详细介绍它们的使用方法。
#### 1. ConfigMap 概述
当我们将容器创建为代码的只读实例时,需要一种方式以标志或配置的形式进行小的更改,并且不希望在容器镜像中包含 API 密钥、密码或认证令牌等私有细节。Kubernetes 支持两种资源来处理这类信息,其中之一就是 ConfigMap。
ConfigMap 可以单独使用,也可以跨 Pod 用于应用部署,为应用提供一个集中更新和传播配置的地方。例如,我们可以使用 ConfigMap 来控制 Redis 部署的基本配置。
#### 2. 创建 ConfigMap
创建 ConfigMap 可以使用 `kubectl create configmap` 命令,配置数据可以在命令行设置,也可以来自一个或多个存储的文件,还支持加载一个目录下的文件。
- **从命令行的单键值对创建**
```bash
kubectl create configmap example-config --from-literal=log.level=err
```
查看所有加载的配置列表:
```bash
kubectl get configmap
```
查看特定 ConfigMap 的详细信息:
```bash
kubectl describe configmap example-config
```
以 YAML 格式请求原始数据:
```bash
kubectl get configmap example-config -o yaml --export
```
以 JSON 格式请求原始数据:
```bash
kubectl get configmap example-config -o json --export
```
- **从文件创建**
如果有配置文件 `config.ini`:
```ini
[unusual]
greeting=hello
onoff=true
anumber=3
```
可以使用以下命令创建 ConfigMap:
```bash
kubectl create configmap iniconfig --from-file config.ini --save-config
```
查看该 ConfigMap 的 YAML 格式数据:
```bash
kubectl get configmap iniconfig -o yaml --export
```
#### 3. 管理 ConfigMaps
创建 ConfigMap 后,不能使用 `kubectl create` 命令用另一个 ConfigMap 覆盖它。可以删除并重新创建,更有效的方法是像管理其他 Kubernetes 资源一样,使用 `kubectl apply` 命令更新配置声明。
例如,将之前创建的配置保存到 `deploy` 目录:
```bash
kubectl get configmap example-config -o yaml --export > deploy/example-config.yml
```
使用 `kubectl apply` 命令更新配置:
```bash
kubectl apply -f deploy/example-config.yml
```
为避免警告,可以在 `kubectl create` 命令中使用 `--save-config` 选项。
#### 4. 将配置暴露到容器镜像中
有两种主要方式将配置数据暴露到容器中:
- **连接到环境变量**
在定义 Pod 规范时,可以指定 `env` 键,通过 `valueFrom` 引用 ConfigMap 中的数据。
```yaml
env:
- name: LOG_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: example-config
key: log.level
```
也可以使用 `envFrom` 将整个 ConfigMap 的键值对作为环境变量加载:
```yaml
envFrom:
- configMapRef:
name: example-config
```
- **作为文件暴露**
需要在 Pod 规范中定义卷挂载和卷描述:
```yaml
volumeMounts:
- name: config
mountPath: /etc/kconfig
readOnly: true
volumes:
- name: config
configMap:
name: example-config
```
#### 5. ConfigMap 的依赖关系
如果在 Pod 规范中引用了 ConfigMap,资源就会依赖该 ConfigMap。如果尝试部署或更新 Pod 时,ConfigMap 不存在,会报告错误。可以通过 `kubectl get pods` 或事件日志查看错误信息。
#### 6. Secrets 概述
ConfigMap 适用于一般配置,但容易被查看,对于密码、授权令牌或 API 密钥等敏感信息,需要更严格的保护机制,这就是 Secrets 的作用。
0
0
复制全文
相关推荐









