【Kubernetes 系列】ConfigMap 进阶 环境变量的配置及使用

      valueFrom:



        configMapKeyRef:



          name: env-config



          key: log_level

restartPolicy: Never




4.  执行命令创建 Pod:



> $ kubectl create -f https://kubernetes.io/examples/pods/pod-multiple-configmap-env-variable.yaml



Pod 的输出包含环境变量 SPECIAL\_LEVEL\_KEY=very 和 LOG\_LEVEL=INFO。



[]( )1.3、使用来自多个 ConfigMap 的数据定义容器环境变量

----------------------------------------------------------------------------------------------



1.  在目录 `configmap/configmaps.yaml` 添加如下代码:



apiVersion: v1

kind: ConfigMap

metadata:

name: special-config

namespace: default

data:

special.how: very


apiVersion: v1

kind: ConfigMap

metadata:

name: env-config

namespace: default

data:

log_level: INFO




2.  创建 ConfigMap:



> $ kubectl create -f https://kubernetes.io/examples/configmap/configmaps.yaml



3.  在目录 `pods/pod-multiple-configmap-env-variable.yaml` 中定义环境变量:



apiVersion: v1

kind: Pod

metadata:

name: dapi-test-pod

spec:

containers:

- name: test-container



  image: k8s.gcr.io/busybox



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



  env:



    - name: SPECIAL_LEVEL_KEY



      valueFrom:



        configMapKeyRef:



          name: special-config



          key: special.how



    - name: LOG_LEVEL



      valueFrom:



        configMapKeyRef:



          name: env-config



          key: log_level

restartPolicy: Never




4.  执行命令创建 Pod:



> $ kubectl create -f https://kubernetes.io/examples/pods/pod-multiple-configmap-env-variable.yaml



Pod 的输出包含环境变量 SPECIAL\_LEVEL\_KEY=very 和 LOG\_LEVEL=INFO。



[]( )1.4、将 ConfigMap 中的所有键值对配置为容器环境变量

----------------------------------------------------------------------------------------------



1.  在目录 `configmap/configmap-multikeys.yaml` 中创建一个包含多个键值对的 ConfigMap。



apiVersion: v1

kind: ConfigMap

metadata:

name: special-config

namespace: default

data:

SPECIAL_LEVEL: very

SPECIAL_TYPE: charm




2.  创建 ConfigMap:



> $ kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.yaml



3.  在 `pods/pod-configmap-envFrom.yaml` 目录中,使用 **envFrom** 将所有 **ConfigMap** 的数据定义为容器环境变量,ConfigMap 中的键成为 Pod 中的环境变量名称。



apiVersion: v1

kind: Pod

metadata:

name: dapi-test-pod

spec:

containers:

- name: test-container



  image: k8s.gcr.io/busybox



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



  envFrom:



  - configMapRef:



      name: special-config

restartPolicy: Never




4.  创建 Pod:



> $ kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-envFrom.yaml



Pod 的输出包含环境变量 SPECIAL\_LEVEL=very 和 SPECIAL\_TYPE=charm。



[]( )1.5、在 Pod 命令中使用 ConfigMap 定义的环境变量

-----------------------------------------------------------------------------------------------



1.  在目录 `pods/pod-configmap-env-var-valueFrom.yaml` 中使用\*\*$(VAR\_NAME)\*\* Kubernetes 替换语法在容器的 **command** 和 **args** 属性中使用 ConfigMap 定义的环境变量。



apiVersion: v1

kind: Pod

metadata:

name: dapi-test-pod

spec:

containers:

- name: test-container

  image: k8s.gcr.io/busybox

  command: [ "/bin/echo", "$(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]

  env:

    - name: SPECIAL_LEVEL_KEY

      valueFrom:

        configMapKeyRef:

          name: special-config

          key: SPECIAL_LEVEL

    - name: SPECIAL_TYPE_KEY

      valueFrom:

        configMapKeyRef:

          name: special-config

          key: SPECIAL_TYPE

restartPolicy: Never




2.  运行下面命令创建 Pod:



> $ kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-env-var-valueFrom.yaml



3.  会在 **test-container** 容器中产生以下输出:



very charm




[]( )二、将 ConfigMap 数据添加到volume中

========================================================================================



使用 `--from-file` 创建 ConfigMap 时,文件名成为存储在 ConfigMap 的 data 部分中的键, 文件内容成为键对应的值。



下面看一个示例`configmap/configmap-multikeys.yaml`:



apiVersion: v1

kind: ConfigMap

metadata:

name: special-config

namespace: default

data:

SPECIAL_LEVEL: very

SPECIAL_TYPE: charm




**创建 ConfigMap**:



> $ kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.yaml



[]( )2.1、使用存储在 ConfigMap 中的数据填充volume

----------------------------------------------------------------------------------------------



在 Pod 规约的 volumes 部分下添加 ConfigMap 名称。 会将 ConfigMap 数据添加到 `volumeMounts.mountPath` 所指定的目录 (在本例中为 /etc/config)。 command 部分列出了名称与 ConfigMap 中的键匹配的目录文件。



1.  先看一下示例代码`pods/pod-configmap-volume.yaml` :



apiVersion: v1

kind: Pod

metadata:

name: dapi-test-pod

spec:

containers:

- name: test-container

  image: k8s.gcr.io/busybox

  command: [ "/bin/sh", "-c", "ls /etc/config/" ]

  volumeMounts:

  - name: config-volume

    mountPath: /etc/config

volumes:

- name: config-volume

  configMap:

    # 提供包含要添加到容器中的文件的 ConfigMap 的名称

    name: special-config

restartPolicy: Never




2.  创建 Pod:



> $ kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-volume.yaml



3.  Pod 运行时,命令 `ls /etc/config/` 产生下面的输出:



> SPECIAL\_LEVEL  

> SPECIAL\_TYPE



[]( )2.2、将 ConfigMap 数据添加到volume中的特定路径

-----------------------------------------------------------------------------------------------



使用 **path** 字段为特定的 ConfigMap 项目指定预期的文件路径。 在这里,ConfigMap 中键 `SPECIAL_LEVEL` 的内容将挂载在 **config-volume** 卷中 `/etc/config/keys` 文件中。



1.  `pods/pod-configmap-volume-specific-key.yaml`示例代码:



apiVersion: v1

kind: Pod

metadata:

name: dapi-test-pod

spec:

containers:

- name: test-container

  image: k8s.gcr.io/busybox

  command: [ "/bin/sh","-c","cat /etc/config/keys" ]

  volumeMounts:

  - name: config-volume

    mountPath: /etc/config

volumes:

- name: config-volume

  configMap:

    name: special-config

    items:

    - key: SPECIAL_LEVEL

      path: keys

restartPolicy: Never




2.  创建Pod:



> $ kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-volume-specific-key.yaml



3.  当 Pod 运行时,命令 `cat /etc/config/keys` 产生以下输出:



> very



[]( )三、ConfigMap 和 Pod

===============================================================================



ConfigMap API 资源将配置数据存储为键值对。 数据可以在 Pod 中使用,也可以用来提供系统组件(如控制器)的配置。 ConfigMap 与 Secret 类似, 但是提供的是一种处理不含敏感信息的字符串的方法。 用户和系统组件都可以在 ConfigMap 中存储配置数据。



ConfigMap 的 data 字段包含配置数据。如下例所示,它可以简单 (如用 `--from-literal` 的单个属性定义)或复杂 (如用 `--from-file` 的配置文件或 JSON blob定义)。


**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/f18baa2866c0e194f22011021e298679.png)
![img](https://img-blog.csdnimg.cn/img_convert/8a979413c03c10cca8ced8875f6043de.png)
![img](https://img-blog.csdnimg.cn/img_convert/2d32a39e1f1c453caa16be6f6f328537.png)
![img](https://img-blog.csdnimg.cn/img_convert/c329c46459122b545891e7e4f272ec35.png)
![img](https://img-blog.csdnimg.cn/img_convert/8da5abae8efc7c6a1c3d8d5ecf3dc8e1.png)
![img](https://img-blog.csdnimg.cn/img_convert/24d68491c9d4814d0675dae531932ac4.png)
![img](https://img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
![img](https://img-blog.csdnimg.cn/img_convert/64e4e949ca3ddd177511e561ea96cb51.png)



## 最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。

![](https://img-blog.csdnimg.cn/img_convert/d84bdf9772c77bced8e7f906aa022621.webp?x-oss-process=image/format,png)

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。


5c.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
[外链图片转存中...(img-QfHClCIj-1712037437593)]



## 最后

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

当然我也为你们整理好了百度、阿里、腾讯、字节跳动等等互联网超级大厂的历年面试真题集锦。这也是我这些年来养成的习惯,一定要学会把好的东西,归纳整理,然后系统的消化吸收,这样才能极大的提高学习效率和成长进阶。碎片、零散化的东西,我觉得最没有价值的。就好比你给我一张扑克牌,我只会觉得它是一张废纸,但如果你给我一副扑克牌,它便有了它的价值。这和我们收集资料就要收集那些系统化的,是一个道理。

[外链图片转存中...(img-1KthJPZr-1712037437593)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。


> **本文已被[CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》]( )收录**
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes使用 ConfigMap 进行配置管理对于 Spring Boot 应用来说是一种常见的做法。下面是一个简单的示例,演示了如何在 Spring Boot 应用中使用 ConfigMap 进行配置。 首先,需要在 Kubernetes 中创建一个 ConfigMap 对象,其中包含了应用所需的配置信息。可以通过以下命令创建一个 ConfigMap: ``` kubectl create configmap my-config --from-literal=app.url=http://example.com --from-literal=app.port=8080 ``` 上述命令创建了一个名为 `my-config` 的 ConfigMap,并将 `app.url` 和 `app.port` 两个属性设置为相应的值。 接下来,在 Spring Boot 应用的 `application.properties`(或 `application.yml`)文件中,可以通过以下方式引用 ConfigMap 中的配置: ``` app.url=${APP_URL} app.port=${APP_PORT} ``` 在上述示例中,`${APP_URL}` 和 `${APP_PORT}` 分别对应于 ConfigMap 中的 `app.url` 和 `app.port` 属性。 最后,在部署 Spring Boot 应用的 Kubernetes Deployment 配置文件中,需要将 ConfigMap 挂载到容器中,并将其作为环境变量注入到应用中。例如: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: my-app-container image: my-app-image ports: - containerPort: 8080 env: - name: APP_URL valueFrom: configMapKeyRef: name: my-config key: app.url - name: APP_PORT valueFrom: configMapKeyRef: name: my-config key: app.port ``` 上述配置文件中,通过 `env` 配置ConfigMap 中的属性值注入到容器环境变量中,使得 Spring Boot 应用能够读取到正确的配置。 这样,当部署 Spring Boot 应用到 Kubernetes 中时,它将使用 ConfigMap 中定义的配置信息。如果需要更新配置,只需更新 ConfigMap 对象即可,无需重新构建和部署应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值