ConfigMaps-2

主要内容

  1. Volume 挂载 ConfigMap
  2. 环境变量 ConfigMap

一.Volume 挂载 ConfigMap

在 Kubernetes 中,可以使用 Volume 来将 ConfigMap 挂载到 Pod 中。这样,Pod 中的容器就可以通过文件系统访问 ConfigMap 中的配置数据。

要将 ConfigMap 挂载到 Pod 中,需要执行以下步骤:

  1. 创建 ConfigMap:首先,需要创建一个 ConfigMap 对象来存储配置数据。可以使用 kubectl create configmap 命令或通过 YAML 文件创建 ConfigMap。

  2. 定义 Volume:在 Pod 的规格(spec)中,需要定义一个 Volume,将其类型设置为 ConfigMap,并指定要挂载的 ConfigMap 的名称。

  3. 配置容器:在 Pod 的规格中,需要将 Volume 挂载到容器中的某个目录。可以使用 volumeMounts 字段将 Volume 挂载到容器中,并指定挂载路径。

下面是一个示例,展示了如何将 ConfigMap 挂载到 Pod 中:

apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imagevolumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: my-config

在这个示例中:

  • volumes 字段定义了一个名为 config-volume 的 Volume,类型为 ConfigMap,并指定要挂载的 ConfigMap 的名称为 my-config

  • volumeMounts 字段将 config-volume 挂载到容器的 /etc/config 目录。

这样,当 Pod 启动时,Kubernetes 会自动将 ConfigMap 中的配置数据挂载到 /etc/config 目录,容器就可以通过文件系统访问这些配置数据了。

需要注意的是,如果 ConfigMap 中的配置数据发生更改,挂载到 Pod 的 Volume 不会自动更新。如果想要更新 Pod 中的配置数据,可以重启 Pod 或使用 ConfigMap 的热更新功能。

希望这个解释能够帮助您理解如何将 ConfigMap 挂载到 Pod 中。

1.创建一个Pod,起挂载的内容,将来自下面的configmap:

代码如下(示例):
cat > cmvolume.yml <<EOF
apiVersion: v1
kind: Pod
metadata:name: configmapvolumelabels:app: configmaptest
spec:containers:- name: testimage: httpdimagePullPolicy: IfNotPresentvolumeMounts:- name: indexmountPath: /usr/local/apache2/htdocsvolumes:- name: indexconfigMap:name: indexcontent
EOF
kubectl create -f cmvolume.yml 
kubectl get -f cmvolume.yml -o wide kubectl delete -f cmvolume.yml

在这里插入图片描述

2.解释

上述命令依次执行以下操作:

  1. cat > cmvolume.yml <<EOF:此命令将 YAML 文件的内容输入到 cmvolume.yml 文件中。<<EOF 是一个 shell 的输入重定向符号,表示将输入的内容直到遇到 EOF 为止。

  2. kubectl create -f cmvolume.yml:此命令使用 kubectl 工具根据 cmvolume.yml 文件中的配置创建一个 Pod。

  3. kubectl get -f cmvolume.yml -o wide:此命令使用 kubectl 工具获取 Pod 的详细信息,并使用 -o wide 参数以更详细的格式显示输出。

  4. kubectl delete -f cmvolume.yml:此命令使用 kubectl 工具根据 cmvolume.yml 文件中的配置删除一个 Pod。

通过执行上述命令,您将创建一个名为 configmapvolume 的 Pod,并将其配置为使用名为 indexcontent 的 ConfigMap 中的数据作为卷挂载到容器的 /usr/local/apache2/htdocs 目录中。然后,您可以使用 kubectl get -f cmvolume.yml -o wide 命令查看 Pod 的详细信息,包括名称、标签、IP 地址等。最后,使用 kubectl delete -f cmvolume.yml 命令删除该 Pod。


二.环境变量 ConfigMap

在 Kubernetes 中,可以使用 ConfigMap 来存储环境变量的配置数据。ConfigMap 是一种用于存储非敏感数据的 Kubernetes 资源,可以包含键值对、配置文件或者整个目录。

使用 ConfigMap 存储环境变量的好处是可以将配置数据与容器的定义分离,使得容器的配置更加灵活和可维护。通过将环境变量配置在 ConfigMap 中,可以在不修改容器镜像的情况下,动态地更新容器的配置。

要使用 ConfigMap 存储环境变量,需要执行以下步骤:

  1. 创建 ConfigMap:首先,需要创建一个 ConfigMap 对象来存储环境变量的配置数据。可以使用 kubectl create configmap 命令或通过 YAML 文件创建 ConfigMap。

  2. 在 Pod 中使用 ConfigMap:在 Pod 的规格(spec)中,可以使用 env 字段来定义环境变量。可以通过 valueFrom.configMapKeyRef 来引用 ConfigMap 中的键值对,并将其作为环境变量的值。

下面是一个示例,展示了如何使用 ConfigMap 存储环境变量:

apiVersion: v1
kind: ConfigMap
metadata:name: my-config
data:ENV_VAR1: value1ENV_VAR2: value2
---
apiVersion: v1
kind: Pod
metadata:name: my-pod
spec:containers:- name: my-containerimage: my-imageenv:- name: ENV_VAR1valueFrom:configMapKeyRef:name: my-configkey: ENV_VAR1- name: ENV_VAR2valueFrom:configMapKeyRef:name: my-configkey: ENV_VAR2

在这个示例中:

  • 首先,我们创建了一个名为 my-config 的 ConfigMap,其中包含了两个键值对 ENV_VAR1: value1ENV_VAR2: value2

  • 然后,我们创建了一个名为 my-pod 的 Pod,其中包含了一个名为 my-container 的容器。

  • 在容器的环境变量定义中,我们使用 valueFrom.configMapKeyRef 来引用 ConfigMap 中的键值对。例如,ENV_VAR1 的值来自于 ConfigMap my-config 中的键 ENV_VAR1

这样,当 Pod 启动时,Kubernetes 会自动将 ConfigMap 中的键值对作为环境变量注入到容器中。容器就可以通过环境变量访问这些配置数据了。

需要注意的是,如果 ConfigMap 中的配置数据发生更改,挂载到 Pod 的环境变量不会自动更新。如果想要更新 Pod 中的环境变量,可以重启 Pod 或使用 ConfigMap 的热更新功能。

希望这个解释能够帮助您理解如何使用 ConfigMap 存储环境变量。使用 ConfigMap 可以更好地管理容器的配置,并实现配置与容器定义的分离。

1.创建一个名为 mysqlpass 且包含 password=ABCabc123 的 configmap:

代码如下(示例):
kubectl create configmap mysqlpw --from-literal=password=ABCabc123
cat > cmenv.yml <<EOF
apiVersion: v1
kind: Pod
metadata:name: mysql
spec:containers:- name: mysqlnameimage: mysqlimagePullPolicy: IfNotPresentenv:- name: MYSQL_ROOT_PASSWORDvalueFrom:configMapKeyRef:name: mysqlpwkey: password
EOF

2.解释

上述命令依次执行以下操作:

  1. kubectl create configmap mysqlpw --from-literal=password=ABCabc123:此命令使用 kubectl 工具创建一个名为 mysqlpw 的 ConfigMap,并将 password 键的值设置为 ABCabc123--from-literal 参数指定要从字面值创建 ConfigMap。

  2. cat > cmenv.yml <<EOF:此命令将 YAML 文件的内容输入到 cmenv.yml 文件中。<<EOF 是一个 shell 的输入重定向符号,表示将输入的内容直到遇到 EOF 为止。

  3. apiVersion: v1:这是一个 YAML 文件中的配置项,指定要创建的资源的 API 版本。

  4. kind: Pod:这是一个 YAML 文件中的配置项,指定要创建的资源类型为 Pod。

  5. metadata: name: mysql:这是一个 YAML 文件中的配置项,指定要创建的 Pod 的名称为 mysql

  6. spec: containers::这是一个 YAML 文件中的配置项,指定 Pod 的规范,其中 containers 是一个列表,可以指定多个容器。

  7. - name: mysqlname:这是一个 YAML 文件中的配置项,指定容器的名称为 mysqlname

  8. image: mysql:这是一个 YAML 文件中的配置项,指定容器要使用的镜像为 mysql

  9. imagePullPolicy: IfNotPresent:这是一个 YAML 文件中的配置项,指定容器的镜像拉取策略为 IfNotPresent,即只在本地不存在该镜像时才拉取。

  10. env::这是一个 YAML 文件中的配置项,指定容器的环境变量,其中 env 是一个列表,可以指定多个环境变量。

  11. - name: MYSQL_ROOT_PASSWORD:这是一个 YAML 文件中的配置项,指定环境变量的名称为 MYSQL_ROOT_PASSWORD

  12. valueFrom: configMapKeyRef::这是一个 YAML 文件中的配置项,指定环境变量的值从 ConfigMap 中获取。

  13. name: mysqlpw:这是一个 YAML 文件中的配置项,指定要使用的 ConfigMap 的名称为 mysqlpw

  14. key: password:这是一个 YAML 文件中的配置项,指定要从 ConfigMap 中获取的键为 password

通过执行上述命令,您将创建一个名为 mysqlpw 的 ConfigMap,并将其添加到 Kubernetes 集群中。然后,使用 kubectl create -f cmenv.yml 命令可以创建一个名为 mysql 的 Pod,该 Pod 包含一个名为 mysqlname 的容器。容器中的环境变量 MYSQL_ROOT_PASSWORD 的值将从 ConfigMap mysqlpw 中的 password 键获取。

3.创建一个名为 mysqlpass 且包含 password=ABCabc123 的 configmap:

代码如下(示例):
kubectl create -f cmenv.yml 
kubectl exec -it mysql -- mysql -uroot -pABCabc123kubectl describe configmaps mysqlpass 
kubectl delete -f cmenv.yml 

在这里插入图片描述
因为 configMap 是明文的,通常用于配置文件等明文场景,但数据库口令等密文应该使用 secret。
在这里插入图片描述

4.解释

  1. kubectl create -f cmenv.yml:此命令将使用 kubectl 工具根据 cmenv.yml 文件中的配置创建一个 Pod。该 Pod 的名称为 mysql,其中包含一个名为 mysqlname 的容器。容器使用 mysql 镜像,并从 ConfigMap mysqlpw 中获取环境变量 MYSQL_ROOT_PASSWORD 的值。

  2. kubectl exec -it mysql -- mysql -uroot -pABCabc123:此命令将使用 kubectl 工具在运行名为 mysql 的 Pod 的容器中执行命令。命令是 mysql -uroot -pABCabc123,意味着以 root 用户身份连接到 MySQL 数据库,并提供密码 ABCabc123

  3. kubectl describe configmaps mysqlpass:此命令将使用 kubectl 工具获取名为 mysqlpass 的 ConfigMap 的详细信息,包括名称、命名空间、数据等。

  4. kubectl delete -f cmenv.yml:此命令将使用 kubectl 工具根据 cmenv.yml 文件中的配置删除先前创建的 Pod。


总结

以上是今天要讲的内容,学到了Volume 挂载 ConfigMap,环境变量 ConfigMap。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/111468.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统期末复习笔记

文章目录 操作系统第1章 计算机系统概述1 指令执行的基本指令周期2 中断分类与中断处理过程2.1 中断的定义2.2 中断分类2.3 中断的意义2.4 无中断2.5 有中断2.6 中断和指令周期2.7 中断处理的过程 3 处理多中断的两种方法3.1 顺序中断处理&#xff08;禁止中断&#xff09;3.2 …

【ICASSP 2023】ST-MVDNET++论文阅读分析与总结

主要是数据增强的提点方式。并不能带来idea启发&#xff0c;但对模型性能有帮助 Challenge&#xff1a; 少有作品应用一些全局数据增强&#xff0c;利用ST-MVDNet自训练的师生框架&#xff0c;集成了更常见的数据增强&#xff0c;如全局旋转、平移、缩放和翻转。 Contributi…

STM32 ~ GPIO不同模式之间的区别与实现原理

GPIO全称General Purpose Input Output &#xff0c;即通用输入/输出。其实GPIO的本质就是芯片的一个引脚&#xff0c;通常在ARM中所有的I/O都是通用的。不过&#xff0c;由于每个开发板上都会设计不同的外围电路&#xff0c;这就造成了GPIO的功能可能有所不同。大部分GPIO都是…

GODIVA论文阅读

论文链接&#xff1a;GODIVA: Generating Open-DomaIn Videos from nAtural Descriptions 文章目录 摘要引言相关工作Video-to-video generationText-to-image generationText-to-video generation GODIVA方法逐帧视频自动编码器GODIVA视频生成器 实验数据集评价指标自动评估指…

java使用itext生成pdf

效果&#xff1a; maven依赖 <!--PDF处理--><!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</vers…

CH573-09-BLE蓝牙安卓应用二次开发——RISC-V内核BLE MCU快速开发教程

一、基础工程搭建 在上一章最后一讲的BLE蓝牙例程中&#xff0c;我们使用了沁恒官方的BLE调试助手完成数据发送&#xff0c;接下来我们使用Android Studio完成一款简易的BLE调试助手。 1、参考文章 我这里参考了CSDN中的一位博主“摸爬滚打的程序媛”的文章以及对应文章中的…

《动手学深度学习 Pytorch版》 6.6 卷积神经网络

import torch from torch import nn from d2l import torch as d2l6.6.1 LeNet LetNet-5 由两个部分组成&#xff1a; - 卷积编码器&#xff1a;由两个卷积核组成。 - 全连接层稠密块&#xff1a;由三个全连接层组成。模型结构如下流程图&#xff08;每个卷积块由一个卷积层、…

SQL 性能优化总结

文章目录 一、性能优化策略二、索引创建规则三、查询优化总结 一、性能优化策略 1. SQL 语句中 IN 包含的值不应过多 MySQL 将 IN中的常量全部存储在一个排好序的数组里面&#xff0c;但是如果数值较多&#xff0c;产生的消耗也是比较大的。所以对于连续的数值&#xff0c;能用…

网络安全攻防对抗之隐藏通信隧道技术整理

完成内网信息收集工作后&#xff0c;渗透测试人员需要判断流量是否出得去、进得来。隐藏通信隧道技术常用于在访问受限的网络环境中追踪数据流向和在非受信任的网络中实现安全的数据传输。 一、隐藏通信隧道基础知识 &#xff08;一&#xff09;隐藏通信隧道概述 一般的网络通…

正则表达式学习和高级用法

以下所有的验证都在 在线验证 1. 起始符 / 正则表达式的起始符2. 限定符 匹配前面的子表达式**1次或多次**。例如&#xff0c;zo 能匹配 "zo" 以及"zoo"&#xff0c;但不能匹配 "z"。等价于 {1,}。 ? 匹配前面的子表达式**0次或1次**。例如…

在c#中使用CancellationToken取消任务

目录 &#x1f680;介绍&#xff1a; &#x1f424;简单举例 &#x1f680;IsCancellationRequested &#x1f680;ThrowIfCancellationRequested &#x1f424;在控制器中使用 &#x1f680;通过异步方法的参数使用cancellationToken &#x1f680;api结合ThrowIfCancel…

Java常用类之 String、StringBuffer、StringBuilder

Java常用类 文章目录 一、字符串相关的类1.1、String的 不可变性1.2、String不同实例化方式的对比1.3、String不同拼接操作的对比1.4、String的常用方法1.5、String类与其他结构之间的转换1.5.1、String 与基本数据类型、包装类之间的转换1.5.2、String 与char[]的转换1.5.3、…