这篇博文,我们来说一说,关于在kubernetes的pod中自定义配置的问题。
我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等。而我们的一个应用程序从写第一行代码开始,要经历开发环境、测试环境、预发布环境只到最终的线上环境。而每一个环境都要定义其独立的各种配置。如果我们不能很好的管理这些配置文件,你的运维工作将顿时变的无比的繁琐。为此业内的一些大公司专门开发了自己的一套配置管理中心,如360的Qcon,百度的disconf等。kubernetes也提供了自己的一套方案,即ConfigMap。kubernetes通过ConfigMap来实现对容器中应用的配置管理。
创建ConfigMap
创建ConfigMap的方式有两种,一种是通过yaml文件来创建,另一种是通过kubectl直接在命令行下创建。
我们先来看第一种,在yaml文件中,配置文件以key-value键值对的形式保存,当然也可以直接放一个完整的配置文件,在下面的示例中,cache_hst、cache_port、cache_prefix即是key-value键值对,而app.properties和my.cnf都是配置文件:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-cfg
namespace: default
data:
cache_host: memcached-gcxt
cache_port: "11211"
cache_prefix: gcxt
my.cnf: |
[mysqld]
log-bin = mysql-bin
app.properties: |
property.1 = value-1
property.2 = value-2
property.3 = value-3
创建ConfigMap:
kubectl create -f test-cfg.yml
第二种方式是直接使用kubectl在命令行下创建
直接将一个目录下的所有配置文件创建为一个ConfigMap:
kubectl create configmap test-config --from-file=./configs
直接将一个配置文件创建为一个ConfigMap:
kubectl create configmap test-config2 --from-file=./configs/db.conf --from-file=./configs/cache.conf
在使用kubectl创建的时候,通过在命令行直接传递键值对创建:
kubectl create configmap test-config3 --from-literal=db.host=10.5.10.116 --from-listeral=db.port='3306'
我们可以通过如下方式查看创建的ConfigMap:
kubectl get configmaps
kubectl get configmap test-config -o yaml
kubectl describe configmap test-config
使用ConfigMap
使用ConfigMap有三种方式,一种是通过环境变量的方式,直接传递pod,另一种是通过在pod的命令行下运行的方式,第三种是使用volume的方式挂载入到pod内
第一种方式示例:
ConfigMap文件:
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: charm
第一个pod示例:
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type restartPolicy: Never
第二个pod示例:
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "env" ] env: - name: CACHE_HOST valueFrom: configMapKeyRef: name: test-cfg key: cache_host optional: true restartPolicy: Never
第二种方式在命令行下引用时,需要先设置为环境变量,之后 可以通过$(VAR_NAME)设置容器启动命令的启动参数,示例:
ConfigMap文件示例:
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: charm
Pod示例:
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] env: - name: SPECIAL_LEVEL_KEY valueFrom: configMapKeyRef: name: special-config key: special.how - name: SPECIAL_TYPE_KEY valueFrom: configMapKeyRef: name: special-config key: special.type restartPolicy: Never
第三种方式,使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,下面是一个示例:
ConfigMap示例:
apiVersion: v1 kind: ConfigMap metadata: name: special-config namespace: default data: special.how: very special.type: charm
第一个pod示例,简单的将上面创建的ConfigMap直接挂载至pod的/etc/config目录下:
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh", "-c", "cat /etc/config/special.how" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config restartPolicy: Never
第二个pod示例,只将ConfigMap的special.how这个key挂载到/etc/config目录下的一个相对路径path/to/special-key,如果存在同名文件,直接覆盖。其他的key不挂载:
apiVersion: v1 kind: Pod metadata: name: dapi-test-pod spec: containers: - name: test-container image: gcr.io/google_containers/busybox command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ] volumeMounts: - name: config-volume mountPath: /etc/config volumes: - name: config-volume configMap: name: special-config items: - key: special.how path: path/to/special-key restartPolicy: Never
http://www.cnblogs.com/breezey/p/6582082.html
最后需要说明两点:
1、ConfigMap必须在Pod之前创建
2、只有与当前ConfigMap在同一个namespace内的pod才能使用这个ConfigMap,换句话说,ConfigMap不能跨命名空间调用。
相关推荐
主要介绍了Springboot整合Spring Cloud Kubernetes读取ConfigMap支持自动刷新配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
Kubernetes ConfigMap重新加载 configmap-reload是一个简单的二进制文件,可在更新Kubernetes ConfigMaps时触发重新加载。 它监视已安装的卷目录,并通知目标进程配置映射已更改。 它目前仅支持发送HTTP请求,但是...
ConfigMap 是用来存储配置文件的 Kubernetes 资源对象,所有的配置内容都存储在 etcd 中。它可以被用来保存单个属性,也可以用来保存整个配置文件或者 JSON 二进制对象。ConfigMap API 资源提供了将配置数据注入容器...
在Spring Boot应用程序中使用Kibernetes Configmap 1. Spring Boot Application属性 首先,让我们向MVC控制器添加简单的启动属性,没什么大不了的: @RestController public class ControllerMVC { @Value ( " ${...
configmap-reload是一个云原生工具,用于监视Kubernetes ConfigMap,并在更新ConfigMap时触发重新加载。 TL; DR 在Kubernetes集群上部署 。 为什么要使用Bitnami Images? Bitnami密切跟踪上游源代码变化,并使用...
023 Kubernetes的pv、pvc、configmap和secret.mp4
bitnami-docker-configmap-reload-源码.rar
使用ConfigMap和Secrets的Spring-Boot Camel快速入门本快速入门演示了如何使用Kubernetes ConfigMap和Secrets配置Spring-Boot应用程序。 路由会生成示例消息,这些示例消息将传递到通过src/main/resources/...
对于名为foo的Deployment具有一个名为foo-configmap的ConfigMap或名为foo-secret Secret或这两者。 然后将注释(默认为reloader.stakater.com/auto )添加到Deployment主要元数据中 kind : Deployment metadata : ...
Synator Kubernetes Secret和ConfigMap同步器 有时,我们想在不同的名称空间中使用机密,不幸的是,我们不能没有任何辅助运算符或手动复制,因为在kubernetes中,机密和configmaps是名称空间。 当我们有几个命名空间...
configmap.yaml
Kubernetes滚动更新ConfigMap和秘密更改 的了使用此存储库的详细说明。 通过运行./nginx-config-example.sh部署nginx-config-example.yml 在以下URL上查看两个网站: 前端网站: 后端网站: 用户名: admin ...
步骤 3 从这两个文件创建 configmap查看 configmap 详细信息HCIP-Cloud Computing-Container V1.0 实验指导
│ 13-kubernetes pv、pvc、configmap和secret.mp4 │ 14-kubernetes statefulset控制器.mp4 │ 15-kubernetes认证及serviceaccount.mp4 │ 16-kubernetes RBAC.mp4 │ 17-kubernetes dashboard认证及分级授权.mp4 ...
部署文件和用于创建kubernetes configmap和secrects的脚本位于kubernetes文件夹中。 注意:CI流程目前是手动的,更新apache / fineract项目时没有自动的webhook来触发构建。 除非有人要求,否则将不添加时间表。 ...
ConfigMap、Secret 为什么有这两个东西: 我们在kubernetes上部署应用的时候,经常会需要传一些配置给我们的应用,比如数据库地址啊,用户名密码啊之类的。我们要做到这个,有好多种方案,比如: 我们可以直接在打包...
kubectl :完全创建集群后,需要通过kubectl创建一个Kubernetes ConfigMap aws-auth,因此需要。 Kubernetes的最低要求版本为v1.18.0 。 :clsuter访问权限与AWS IAM集成在一起,为了让集群知道您是否有权访问,...
nodejs-configmap 该项目演示了利用外部配置源的应用程序和运行时配置 运行示例 您可以将这个示例作为本地localhost上的节点进程运行,也可以作为本地安装上的。 本地主机 要在本地计算机上运行基本应用程序,只需...
目录网盘文件永久链接 ...13-kubernetes pv、pvc、configmap和secret.mp4 14-kubernetes statefulset控制器.mp4 15-kubernetes认证及serviceaccount.mp4 16-kubernetes RBAC.mp4 17-kubernetes dashboard......
# Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map. - apiGroups: [""] resources: ["configmaps"] resourceNames: ["kubernetes-dashboard-settings"] verbs: ["get", "update...