Kubernetes里的ConfigMap的用途

顾名思义,ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。

ConfigMap同Kubernetes的另一个概念secret类似,区别是ConfigMap主要用于保存不包含敏感信息的明文字符串。

创建方式:

kubectl create configmap special-config --from-literal=i042416=jerry

上述命令行创建了一个名为special-config的键值对,

key为i042416, 值为jerry

接下来我希望用这个key为i042416的值"jerry"来定义成pod里的一个环境变量。

下面是我的yaml文件:

apiVersion: v1

2 kind: Pod

3 metadata:

4 name: jerry-config-pod

5 spec:

6 containers:

7 - name: test-container

8 image: gcr.io/google_containers/busybox

9 command: [ "/bin/sh", "-c", "env" ]

10 env:

11 - name: JERRY_NAME

12 valueFrom:

13 configMapKeyRef:

14 name: special-config

15 key: i042416

16 restartPolicy: Never

可以看到第15行引用了我的ConfigMap的key:i042416

下面使用create -f将该yaml文件导入,创建一个新的pod:

创建之后,能在pod的明细页面看到configMap的key已经作为环境变量显示出来了:

因为我yaml文件里指定pod执行的script为/bin/sh -c env, 因此最后会将容器里所有的环境变量都打印出来,我们定义在ConfigMap里的i042416的值jerry也被显示了出来:

这种定义环境变量的做法和SAP云平台CloudFoundry环境里定义环境变量的方式很类似。

CloudFoundry环境变量一览表:

https://docs.run.pivotal.io/devguide/deploy-apps/environment-variable.html

  • CF_INSTANCE_ADDR
  • CF_INSTANCE_GUID
  • CF_INSTANCE_INDEX
  • CF_INSTANCE_IP
  • CF_INSTANCE_INTERNAL_IP
  • CF_INSTANCE_PORT
  • CF_INSTANCE_PORTS
  • DATABASE_URL
  • HOME
  • LANG
  • MEMORY_LIMIT
  • PORT
  • PWD
  • TMPDIR
  • USER
  • VCAP_APP_PORT
  • VCAP_APPLICATION
  • VCAP_SERVICES

当使用cf push命令将本地应用部署到SAP云平台的CloudFoundry环境下时,某些环境变量会自动被系统写入相应的值,这个行为同ABAP的sy-sysid自动被设置为当前系统ID具有一样的逻辑。

比如app router会把用户访问请求重定向到XSUAA实例上。

app router在manifest.yml里定义的XSUAA实例名称为xsuaa-jerry-demo,

在运行时这个XSUAA的id会被SAP云平台自动写入环境变量VCAP_SERVICES里:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

原文地址:https://www.cnblogs.com/sap-jerry/p/9821510.html

时间: 2024-10-06 00:58:44

Kubernetes里的ConfigMap的用途的相关文章

webapp里主要的mate用途

webapp里主要的mate用途:<meta name="apple-touch-fullscreen" content="yes"> 添加到主屏幕后,全屏显示. <meta name="apple-mobile-web-app-capable" content="yes" /> 这meta的作用就是删除默认的苹果工具栏和菜单栏.content有两个值"yes"和"no&q

如何使用Kubernetes里的NetworkPolicy

创建一个类型为NetworkPolicy的Kubernetes对象的yaml文件. 第九行的podSelector指定这个NetworkPolicy施加在哪些pod上,通过label来做pod的过滤. 从第16行开始的ingress定义,定义了只有具备标签component=ads,module=app的pod才能够连接component=ads, module=db的pod. 首先创建一个临时的pod,使用正确的label(component=ads,module=app)去访问db pod:

kubernetes里let&#39;s encrypt通配符证书的自动续期更新

环境与需求: Ubuntu云服务器上,已经做好了ssl证书的免费申请,但是证书的期限是3个月,3个月到期后必须重新申请或者更新.由于k8s集群里的服务一直在使用证书,每三个月人工更新太麻烦,所以想要配置一些做个定时自动更新. 准备: 其中, certbot-auto 执行命令,可以对证书进行申请更新删除等一系列操作 dns_script 调用连接服务器控制台设置DNS校验记录的脚本 pytz python的一个模块 一.下载hook功能的脚本文件 git clone https://github

kubernetes之使用ConfigMap管理Pod配置文件

简介 ConfigMaps可以使容器镜像与配置文件解耦,实现容器化应用程序的可移植性.此文提供一系列的方法示例讲述如何创建ConfigMaps,使用存储在ConfigMaps中的数据配置Pod. 备注:此文档参考官方文档,并加以自己的理解.如有误导性的内容,请批评指正. 创建一个ConfigMap 我们可以使用kubectl create configmap或kustomization.yaml中的ConfigMap生成器创建一个ConfigMap.从Kubernetes 1.14版本开始,ku

kubernetes系列之ConfigMap使用方式

作用理解 核心用途就是容器和配置的分离解耦. 如启用一个mysql容器,mysql容器重要的文件有两部分,一部分为存储数据文件,一部分为配置文件my.cnf,存储数据可以用持久存储实现和容器的分离解耦,配置文件也能够实现和容器的分离解耦,也就是说mysql容器能够直接读取并使用预先配置好的配置文件(而不是使用容器中默认自带的配置文件).这就是configMap的功能. ConfigMap 用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件.ConfigMap 跟 secret

Kubernetes里的secret最基本的用法

Secret解决了密码.token.密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中. Secret可以以Volume或者环境变量的方式使用. 使用如下命令行创建一个secret: kubectl create secret generic admin-access --from-file=./username.txt --from-file=./password.txt 输入文件username.txt和password.txt需要手

通过一个例子学习Kubernetes里的PersistentVolumeClaim的用法

Kubernetes的pod本身是无状态的(stateless),生命周期通常比较短,只要出现了异常,Kubernetes就会自动创建一个新的Pod来代替它. 而容器产生的数据,会随着Pod消亡而自动消失. 为了实现Pod内数据的存储管理,Kubernetes引入了两个API资源:Persistent Volume(持久卷,以下简称PV)和Persistent Volume Claim(持久卷申请,以下简称PVC). PV是Kubernetes集群中的一种网络存储实现,跟Node一样,也是属于集

Kubernetes 里,怎么让 Pod 有 DNS 记录?

在专栏"深入剖析Kubernetes"的第20章,我们学到很容易让一个 StatefulSet 中的 Pod 拥有 DNS 记录.如果一个 StatefulSet 的名字是 memcached, 而它指定了关联的 serviceName 叫 memcached-cluster,那 kube-dns 就会为它的每个 pod 解析如下的 DNS A 记录: memcached-0.memcached-cluster.svc.cluster.local memcached-1.memcach

如何在Kubernetes里给PostgreSQL创建secret

创建一个initdb.sql文件,输入如下内容: -- This is a postgres initialization script for the postgres container. -- Will be executed during container initialization ($> psql postgres -f initdb.sql) CREATE ROLE adsuser WITH LOGIN PASSWORD 'initial' INHERIT CREATEDB;