在Kubernetes官网里,有这样一篇文章,提到了Kubernetes里的一个最佳实践就是把应用代码同配置信息分开,一种方式就是使用Kubernetes 1.2里引入的configmap概念。
https://kubernetes.io/blog/2016/04/configuration-management-with-containers/
configmap实际上就是一系列键值对,存储于etcd里。etcd的官网有这样一句话:
etcd is a distributed key-value store designed to reliably and quickly preserve and provide access to critical data.
https://github.com/etcd-io/etcd/blob/master/Documentation/docs.md
etcd是一个高性能的分布式键值对存储库,用于存储和访问关键数据。
使用下面的命令行创建一个Kubernetes config map:
kubectl create configmap test-config --from-literal=test.type=unit --from-literal=test.exec=always
创建一个名为test-config的键值对,key为test.type,值为unit,key为test.exec, 值为always。
下面我打算创建一个pod,消费这个名为test-config的configmap。
创建一个内容如下的yaml文件:
apiVersion: v1
kind: Pod
metadata:
name: test-configmap
spec:
containers:
- name: test-container
image: alpine:3.8
command: [ "/bin/sh", "-c", "env" ]
env:
- name: TEST_TYPE
valueFrom:
configMapKeyRef:
name: test-config
key: test.type
- name: TEST_EXEC
valueFrom:
configMapKeyRef:
name: test-config
key: test.exec
restartPolicy: Never
这个yaml文件定义的pod基于docker镜像alpine,执行shell命令/bin/sh -c env查看环境变量。
在env区域,我给该pod注入一个名为TEST_TYPE的环境变量,值从configMap键值对的键名称为test.type的值中取。
kubectl create -f 创建这个pod:
使用命令kubectl logs test-configmap查看这个pod运行生成的日志,发现输出的环境变量列表中,出现了TEST_TYPE=unit,这个TEST_TYPE是我在yaml文件里注入的环境变量名称,而unit就来自configmap里test-config的值unit。
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
相关推荐
Pod 使用 ConfigMap 数据有两种方式:变量注入和数据卷挂载。 变量注入是指将 ConfigMap 的键值配置到容器中作为全局变量配置。例如,下面是一个使用变量注入的示例: ```yaml apiVersion: apps/v1 kind: ...
1. 直接作为环境变量注入到Pod中,通过`env:`或`envFrom:`字段。 2. 通过挂载为Volume,使得配置文件可以直接在Pod的文件系统中访问。 在实际操作中,我们可以通过`kubectl create secret`命令创建Secret,如例子所...
5. **ConfigMap & Secret**: 存储配置数据,提供安全的环境变量注入方式。 6. **Volume**: 提供Pod内部的数据持久化,跨越容器生命周期。 ### 二、Kubernetes架构 Kubernetes由控制面板和工作节点两部分组成: 1....
它们可以通过环境变量或文件挂载的方式注入到容器中,使得应用能够访问这些数据。 对于有状态应用,如数据库或缓存系统,Kubernetes 提供了 StatefulSet。StatefulSet 保证了每个 Pod 的唯一标识、稳定网络身份和...
- **应用场景**:在Kubernetes中,可以通过ConfigMap或Secret资源来定义环境变量,并将其注入到Pod中使用的容器。 #### 高级模式 **20. StatefulService** - **定义与作用**:有状态服务模式适用于需要持久化存储...
2. **ConfigMap**:ConfigMap用于存储非敏感的配置信息,如环境变量、命令行参数或者配置文件。它们允许将配置数据与应用程序代码分离。 3. **Downward API**:Downward API让Pod内的容器可以获取关于自身的信息,...
此外,使用`envFrom`配置环境变量时,无效的键将不会注入到容器,但Pod仍能创建成功。\n\n2. **敏感信息存储与管理**\n - **Secret**: Secret对象用于安全地存储密码、令牌等敏感数据,数据以base-64编码存储。...
- **Service Account/Secret/KeyRef/ValueFrom**:用于身份验证、安全配置和环境变量注入。 Kubernetes 网络方面,有两种主流的容器网络实现:CNM(Docker)和 CNI(Kubernetes)。CNI 是一种网络插件接口规范,...
- **ConfigMap**与**Secret**:用于存储非敏感和敏感的应用配置数据,提供安全的环境变量注入方式。 - **Ingress**:定义外部网络到服务内部的访问规则,支持负载均衡和路由。 2. **Kubernetes 1.21.0新特性**: ...
ConfigMap 可以通过环境变量、命令行参数或配置文件直接注入到 Pod 中。 4. **Secrets** Secrets 提供了一种安全的方式来管理敏感信息,如密码、OAuth 令牌和 SSH 密钥。它们被设计为不可变且易碎,以保护数据...
- **ConfigMap**和**Secret**:存储配置数据,提供安全的环境变量注入。 2. **工作流程**: - **部署应用**:使用`kubectl apply`命令创建Deployment,它会自动创建 ReplicaSet 并调度Pods到集群节点上。 - **...
下载并安装Go的最新版本,配置好GOPATH和GOROOT环境变量,然后通过`go get`命令获取Grafeas的相关库和工具。在学习过程中,理解Go的模块管理和依赖注入机制将有助于你更好地编写Grafeas客户端或服务端应用。 进入...
每个Pod启动时,环境变量会被自动注入,而在现代实现中,借助kube-dns,Pod可以通过DNS查询找到其他服务。 Volume是Kubernetes中用于在Pod内共享数据的机制,它独立于容器生命周期存在。常见的Volume类型包括...
11. **ConfigMap**: 用于存储非敏感的配置数据,可以被容器作为环境变量、命令行参数或文件内容使用。 在 Kubernetes 集群中,使用 `kubectl apply -f 文件>` 命令可以将 YAML 文件中的配置应用到集群上,创建或...
4. **ConfigMap** 或 **Secret**: RocketMQ的配置参数可以通过Kubernetes的ConfigMap或Secret对象进行管理,这样可以将敏感信息(如密码)安全地存储,并注入到Pod中。这使得配置文件的管理和更新变得更加灵活。 5....
与ConfigMap类似,Secret可以被挂载为Volume或作为环境变量注入到Pod中。 ```yaml apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: password: dGVzdHBhc3M= # base64编码后的...
Secret则用于安全地存储密码、密钥和其他敏感信息,它们被以加密形式存储,并可被注入到Pod的环境变量或卷中。 在Kubernetes集群的运维过程中,监控和日志收集也是必不可少的。Prometheus、Grafana、Elasticsearch...
3. **influxdb-configmap.yaml**: ConfigMap用于将配置数据注入到Pod中,避免硬编码到应用镜像中。在这个文件中,可能会包含InfluxDB的配置选项,如数据库名称、用户、密码等。 4. **influxdb-pvc.yaml**: ...
5. **ConfigMap**和**Secret**:用于将配置数据注入到Pod中,ConfigMap用于非敏感数据,Secret用于敏感信息。 6. **Ingress**:定义外部访问Pod的规则,通常用于设置HTTP/HTTPS路由。 二、Kubernetes组件 1. **...