8、Kubernetes核心技术 - ConfigMap

这篇具有很好参考价值的文章主要介绍了8、Kubernetes核心技术 - ConfigMap。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、ConfigMap概述

二、ConfigMap创建

2.1、命令行方式创建

2.2、yaml 文件方式创建

三、ConfigMap查询

四、ConfigMap更新

4.1、kubectl edit方式

4.2、kubectl apply方式

五、ConfigMap使用

5.1、spec.env 【环境变量】

5.2、spec.envFrom 【环境变量】

5.3、指定 items【卷挂载方式】

5.4、不指定 items【卷挂载方式】

六、ConfigMap删除


一、ConfigMap概述

ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配 置信息。ConfigMap API给我们提供了向容器中注入配置信息的机制,ConfigMap 可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON 二进制大对象 。

ConfigMap 的主要作用就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。

注意:ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是加密的,请使用 Secret, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。

二、ConfigMap创建

2.1、命令行方式创建

读取文件方式(也可以是目录)通过--from-file参数从文件中读取,可以指定 key 的名称,若不指定,则默认使用文件名为key。--from-file:指定在目录下的所有文件都会被用在 ConfigMap 里边创建一个键值对,键的名字就是文件名,值就是文件里内容。

vim configmap-file.properties

version:1.0
environment:dev

创建ConfigMap:

$ vim configmap-file.properties

# 通过kubectl create configmap创建ConfigMap
$ kubectl create configmap from-file-configmap --from-file=configmap-file.properties
configmap/from-file-configmap created

$ kubectl get configmap/from-file-configmap
NAME                  DATA   AGE
from-file-configmap   1      25s

# 查看ConfigMap的yaml资源清单
$ kubectl get configmap/from-file-configmap -o yaml
apiVersion: v1
data:
  configmap-file.properties: |			# ConfigMap的数据,换行的话冒号后面需要加 |
    version:1.0
    environment:dev
kind: ConfigMap
metadata:
  creationTimestamp: "2023-01-05T05:33:28Z"
  name: from-file-configmap
  namespace: default
  resourceVersion: "3179"
  uid: a9f17c3a-af94-4a9a-9145-e06f3d3bf030

当然,我们也可以通过--from-literal参数,可以指定多个,手动指定ConfigMap中的键值对。如下:

$ kubectl create configmap cm-test --from-literal=MYSQL_ROOT_USERNAME=root --from-literal=MYSQL_ROOT_PASSWORD=123456
configmap/cm-test created

$ kubectl describe cm cm-test
Name:         cm-test
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
MYSQL_ROOT_PASSWORD:
----
123456
MYSQL_ROOT_USERNAME:
----
root

BinaryData
====

2.2、yaml 文件方式创建

创建资源清单:vim configmap.yaml

apiVersion: v1
data: 	# ConfigMap的Key 和 Value。 每一个键都映射到一个简单的值
  version: "1.0"    # 需要注意yaml的语法,key和value之间需要有空格
  environment: "dev"  # 定义一个变量,值类型为字符串,需要加引号
kind: ConfigMap
metadata:
  name: from-yaml-configmap

创建ConfigMap:

$ vim configmap.yaml 
$ kubectl apply -f configmap.yaml 
configmap/from-yaml-configmap created

$ kubectl get cm 
NAME                  DATA   AGE
from-file-configmap   1      11m
from-yaml-configmap   2      19s
kube-root-ca.crt      1      13d

三、ConfigMap查询

# 查看 configmap 列表
$ kubectl get configmap
NAME                  DATA   AGE
from-file-configmap   1      13m
from-yaml-configmap   2      2m2s
kube-root-ca.crt      1      13d

# 查看 configmap 详情
$ kubectl describe configmap from-file-configmap
Name:         from-file-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
configmap-file.properties:
----
version:1.0
environment:dev


BinaryData
====

Events:  <none>


# 查看 yaml 输出
$ kubectl get configmap from-file-configmap -o yaml
apiVersion: v1
data:
  configmap-file.properties: |
    version:1.0
    environment:dev
kind: ConfigMap
metadata:
  creationTimestamp: "2023-01-05T05:33:28Z"
  name: from-file-configmap
  namespace: default
  resourceVersion: "3179"
  uid: a9f17c3a-af94-4a9a-9145-e06f3d3bf030

四、ConfigMap更新

4.1、kubectl edit方式

$ kubectl describe configmap from-file-configmap
Name:         from-file-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
configmap-file.properties:
----
version:1.0									# 更新之前的version为1.0
environment:dev


BinaryData
====

Events:  <none>

# kubectl edit configmap其实是通过修改from-file-configmap这个ConfigMap对象资源清单中的值
controlplane $ kubectl edit configmap from-file-configmap
configmap/from-file-configmap edited

# 查看更新之后的ConfigMap的值
controlplane $ kubectl describe configmap from-file-configmap
Name:         from-file-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
configmap-file.properties:
----
version:2.0									# 更新之后的version为2.0
environment:dev


BinaryData
====

Events:  <none>

4.2、kubectl apply方式

这种方式,其实也是通过修改ConfigMap对象对应的yaml资源清单文件,然后重新执行kubectl apply -f xxx即可。

$ vim configmap.yaml

$ kubectl describe cm from-yaml-configmap
Name:         from-yaml-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
environment:
----
dev				# 修改之前的environment为dev
version:
----
1.0

BinaryData
====

Events:  <none>

$ kubectl apply -f configmap.yaml 
configmap/from-yaml-configmap configured

$ kubectl describe cm from-yaml-configmap
Name:         from-yaml-configmap
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
environment:
----
prod				# 修改之后的environment为prod
version:
----
1.0

BinaryData
====

Events:  <none>

五、ConfigMap使用

容器应用对 ConfigMap 的使用主要是两种:

  • 通过环境变量获取 ConfigMap 的内容:spec.env和spec.envFrom
  • 通过卷 volume 挂载的方式将 ConfigMap 的内容挂载到容器内部的文件或目录:spec.volumes

5.1、spec.env 【环境变量】

定义Pod资源清单:vim configmap-pod-demo01.yaml

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
  - name: tomcat
    image: tomcat:8
    command: [ "/bin/sh", "-c", "env | grep APP"]
    env:		# 配置环境变量
    - name: APP_VERSION         # 定义环境变量的名称
      valueFrom:            
        configMapKeyRef: 
          name: from-yaml-configmap    # 引用from-yaml-configmap这个ConfigMap,这个值来自 ConfigMap
          key: version    	# 需要取值的键,ConfigMap中的配置key为version
    - name: APP_ENVIRONMENT        # 定义环境变量的名称
      valueFrom: 
        configMapKeyRef: 
          name: from-yaml-configmap  # 引用from-yaml-configmap这个ConfigMap
          key: environment    # ConfigMap中的配置key为environment
  restartPolicy: Never

创建Pod,观察控制台输出:

$ kubectl apply -f configmap-pod-demo01.yaml 
pod/tomcat created
$ kubectl get pod/tomcat
NAME     READY   STATUS      RESTARTS   AGE
tomcat   0/1     Completed   0          9s

$ kubectl logs tomcat
APP_ENVIRONMENT=prod
APP_VERSION=1.0

可以看到,from-yaml-configmap这个ConfigMap中的内容已经成功声明为Pod中的两个环境变量:

$APP_VERSION、$APP_ENVIRONMENT,并且值也正确。

5.2、spec.envFrom 【环境变量】

定义Pod资源清单:vim configmap-pod-demo02.yaml

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
  - name: tomcat
    image: tomcat:8
    imagePullPolicy: IfNotPresent
    command: ['/bin/sh','-c','env']
    envFrom:		# 配置环境变量
    - configMapRef:
        name: from-yaml-configmap    # 根据from-yaml-configmap这个ConfigMap中所有的key和value自动生成环境变量
  restartPolicy: Never 	      	      	

创建Pod,观察控制台输出:

$ kubectl apply -f configmap-pod-demo02.yaml 
pod/tomcat created

$ kubectl get pod/tomcat
NAME     READY   STATUS      RESTARTS   AGE
tomcat   0/1     Completed   0          32s

$ kubectl logs tomcat
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
LANGUAGE=en_US:en
HOSTNAME=tomcat
LD_LIBRARY_PATH=/usr/local/tomcat/native-jni-lib
TOMCAT_SHA512=e595e906d62ff16545318108478aa101103181569dc6f4549dd0cdf8744147f7e9ba8a88cab6d33237b22981acb1085de86e7b2a4f1659efdbd4804df1303561
HOME=/root
CATALINA_HOME=/usr/local/tomcat
TOMCAT_MAJOR=8
version=1.0				# 根据from-yaml-configmap这个ConfigMap资源自动生成环境变量:version
JAVA_VERSION=jdk-17.0.5+8
environment=prod	# 根据from-yaml-configmap这个ConfigMap资源自动生成环境变量:environment
GPG_KEYS=05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 5C3C5F3E314C866292F359A8F3AD5C94A67F707E 765908099ACF92702C7D949BFA0C35EA8AA299F1 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/tomcat/bin:/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
LANG=en_US.UTF-8
TOMCAT_VERSION=8.5.84
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
JAVA_HOME=/opt/java/openjdk
LC_ALL=en_US.UTF-8
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/usr/local/tomcat
TOMCAT_NATIVE_LIBDIR=/usr/local/tomcat/native-jni-lib

如上,可以看到,通过envFrom可以实现根据某个ConfigMap资源自动生成环境变量,这样在Pod中就可以使用这些环境变量了。

env 和 envFrom 的区别:

env可以自定义变量名,但需要重复性操作;

envFrom不可以自定义变量名,但是很便捷

5.3、指定 items【卷挂载方式】

定义Pod资源清单:vim configmap-pod-demo03.yaml

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
  - name: tomcat
    image: tomcat:8
    volumeMounts:
    - name: config-volume
      mountPath: /conf			# 挂载configmap-file.properties到Pod的/conf目录下
  volumes:
  - name: config-volume   
    configMap:   # 你可以在 Pod 级别设置卷,然后将其挂载到 Pod 内的容器中
      name: from-file-configmap		# 要挂载的 ConfigMap 的名字
      items:		# 来自 ConfigMap 的一组键,将被创建为文件
      - key: "configmap-file.properties"   # 来自 ConfigMap 的一组键,将被创建为文件
        path: "configmap-file.properties"		# ConfigMap挂载到容器内的相对路径
  restartPolicy: Never

创建Pod,然后进入Pod中/conf目录,查看configmap-file.properties文件是否挂载进去:

$ kubectl apply -f configmap-pod-demo03.yaml 
pod/tomcat created

$ kubectl get pod/tomcat
NAME     READY   STATUS    RESTARTS   AGE
tomcat   1/1     Running   0          20s

$ kubectl exec -it tomcat -c tomcat -- bash
root@tomcat:/usr/local/tomcat# cat /conf/configmap-file.properties 
version:2.0
environment:dev

5.4、不指定 items【卷挂载方式】

定义Pod资源清单:vim configmap-pod-demo04.yaml

apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
  - name: tomcat
    image: tomcat:8
    volumeMounts:
    - name: configmap-volume
      mountPath: /conf
  volumes:
  - name: configmap-volume
    configMap:  # 创建一个ConfigMap类型的数据卷
      name: from-yaml-configmap		# 引用的ConfigMap的名称
  restartPolicy: Never

创建Pod,然后进入容器查看相关内容:文章来源地址https://www.toymoban.com/news/detail-625623.html

$ kubectl apply -f configmap-pod-demo04.yaml 
pod/tomcat created

$ kubectl get pod/tomcat
NAME     READY   STATUS    RESTARTS   AGE
tomcat   1/1     Running   0          10s

$ kubectl exec -it tomcat -c tomcat -- bash
root@tomcat:/usr/local/tomcat# ls -l /conf
total 0
lrwxrwxrwx 1 root root 18 Jan  5 07:01 environment -> ..data/environment
lrwxrwxrwx 1 root root 14 Jan  5 07:01 version -> ..data/version

六、ConfigMap删除

# 方式一:通过 yaml 文件删除
kubectl delete -f configmap.yaml


# 方式二:直接删除资源
kubectl delete configmap from-yaml-configmap

# 方式三: 删除所有configmap
kubectl delete configmap --all

到了这里,关于8、Kubernetes核心技术 - ConfigMap的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 7、Kubernetes核心技术 - Secret

    目录 一、Secret概述 二、Secret 三种类型 2.1、Opaque 2..2、kubernetes.io/dockerconfigjson 2.3、kubernetes.io/service-account-token 三、Secret创建 3.1、命令行方式创建 Secret 3.2、yaml方式创建 Secret 四、Secret解码 五、Secret使用 5.1、将 Secret 挂载到 Volume 中 5.2、将 Secret 设置为环境变量 5.3、通过volu

    2024年02月14日
    浏览(29)
  • 【云原生】Kubernetes核心技术(下)

    博主昵称:跳楼梯企鹅 博主主页面链接: 博主主页传送门 博主专栏页面连接: 专栏传送门--网路安全技术 创作初心:本博客的初心为与技术朋友们相互交流,每个人的技术都存在短板,博主也是一样,虚心求教,希望各位技术友给予指导。 博主座右铭:发现光,追随光,

    2024年01月17日
    浏览(29)
  • 19、Kubernetes核心技术 - 资源限制

    目录 一、概述 二、Kubernetes 中的资源单位 2.1、CPU资源单位 2.2、内存资源单位 三、Pod资源限制 四、namespace资源限制 4.1、为命名空间配置内存和 CPU 配额 4.2、为命名空间配置默认的内存请求和限制 4.3、为命名空间配置默认的CPU请求和限制 五、超过容器限制的内存 当定义 Po

    2024年01月20日
    浏览(32)
  • 6、Kubernetes核心技术 - Pod

    目录 一、概述 二、Pod机制 2.1、共享网络 2.2、共享存储 三、Pod资源清单 四、 Pod 的分类 五、Pod阶段 六、Pod 镜像拉取策略 ImagePullBackOff 七、Pod 资源限制 八、容器重启策略 Pod 是可以在 Kubernetes 中 创建和管理的、最小的可部署的计算单元 。Pod 里面是由一个或多个容器组成

    2024年02月15日
    浏览(60)
  • 云原生Kubernetes系列 | Kubernetes Secret及ConfigMap

       使用某些镜像例如mysql,是需要变量来传递密

    2024年02月04日
    浏览(27)
  • Kubernetes技术--k8s核心技术 ingress

    1.引入        我们之前在部署应用(如nginx)的时候,如果你需要外部进行访问,使用的是service中的nodePort方式进行对外的暴露。然后外部就可以使用ip + 端口号来进行访问部署应用。         其实这一种方式是存在着较为明显的缺陷,每一个端口你只能够使用一次,一个端口

    2024年02月10日
    浏览(30)
  • Kubernetes技术--k8s核心技术Helm

    1.引入 我们先回顾一下之前部署 一个应用 的过程,如部署nginx,实现效果如下所示: -1.编写deployment的yaml文件,然后运行。 -2.使用service中的NodePort对外暴漏端口 -3.为了弥补Nodeport的缺陷,使用ingress实现转发        这样一个应用就部署完了,这一种情况相对于如果你需要部署

    2024年02月09日
    浏览(37)
  • Kubernetes技术--k8s核心技术 Secret

    1.概述      Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec中。Secret可以以 Volume 或者环境变量的方式使用。 作用       加密数据存储在/etc中 ,使得 pod 容器以挂载volume方式进行访问 。在进行的数据存储中是以 base64

    2024年02月10日
    浏览(31)
  • Kubernetes技术--k8s核心技术Service服务

    1.service概述         Service 是 Kubernetes 最核心概念, 通过创建 Service,可以为一组具有相同功能的容器应用提供一个统一的入口地址,并且将请求负载分发到后端的各个容器应用上 。 2.service存在的意义 -1: 防止pod失联(服务发现) 我们先说一下什么叫pod失联。     -2:

    2024年02月10日
    浏览(33)
  • Kubernetes配置管理 ConfigMap

    kubernetes集群可以使用ConfigMap来实现对容器中应用的配置管理 。 可以把ConfigMap看作是一个挂载到pod中的存储卷 1.2.1 在命令行指定参数创建 通过直接在命令行中指定configmap参数创建,即 --from-literal=key=value ; 1.2.2 在命令行通过多个文件创建 通过指定文件创建,即将一个配置文

    2024年02月09日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包