ConfigMaps-2

26 篇文章 0 订阅

主要内容

  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-container
      image: my-image
      volumeMounts:
        - name: config-volume
          mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        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: configmapvolume
  labels:
    app: configmaptest
spec:
  containers:
    - name: test
      image: httpd
      imagePullPolicy: IfNotPresent
      volumeMounts:
        - name: index
          mountPath: /usr/local/apache2/htdocs
  volumes:
    - name: index
      configMap:
        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: value1
  ENV_VAR2: value2
---
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: my-image
      env:
        - name: ENV_VAR1
          valueFrom:
            configMapKeyRef:
              name: my-config
              key: ENV_VAR1
        - name: ENV_VAR2
          valueFrom:
            configMapKeyRef:
              name: my-config
              key: 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: mysqlname
      image: mysql
      imagePullPolicy: IfNotPresent
      env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            configMapKeyRef:
              name: mysqlpw
              key: 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 -pABCabc123

kubectl 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值