Kubernetes--ConfigMap

一. ConfigMap的概念

在生产环境中经常会遇到需要修改配置文件的情况,传统的修改方式不仅会影响到服务的正常运行,而且操作步骤也很繁琐。为了解决这个问题,k8s项目从1.2版本引入了ConfigMap功能,用于将应用的配置信息与程序的分离。这种方式不仅可以实现应用程序被的复用,而且还可以通过不同的配置实现更灵活的功能。在创建容器时,用户可以将应用程序打包为容器镜像后,通过环境变量或者外接挂载文件的方式进行配置注入。

二. 创建ConfigMap

系统中可以通过YAML配置文件或者直接使用kubectl create configmap命令行的方式来创建ConfigMap,下面将详细介绍这两种方式的操作流程。

1. 通过YAML配置文件方式创建

创建YAML文件cm-demo0.yaml,其中描述将应用所需的变量定义为ConfigMap的用法,key为参数名称,value为参数值

apiVersion: v1
kind: ConfigMap
metadata:
  name: appvar
data:
  ip: localhost
  port: "33061"

创建ConfigMap

kubectl create -f appvar.yml

查看ConfigMap列表

kubectl get configmap

使用describe命令查看ConfigMap详细信息。

kubectl describe configmap appvar

以YAMl格式查看ConfigMap

kubectl describe configmap appvar

在这里插入图片描述

2. 通过kubectl命令行方式创建

在kubectl create configmap命令种使用参数–from-file或–from-literal指定文件、目录或者文本,也可以创建一个或者多个ConfigMap参数。

kubectl create configmap cm-demo --from-literal=ip=localhost --from-literal=port=33061

在这里插入图片描述

三. 使用ConfigMap

1. 通过环境变量方式使用ConfigMap

在这里插入图片描述
cm-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: cm-pod
spec:
  restartPolicy: Never  #退出之后不重启pod
  containers:
    - name: cm-pod
      image: nginx
      command: [ "/bin/sh", "-c", "echo $(DB_HOST) $(DB_PORT) 123456 " ]  #打印完之后退出,pod状态位completed
      env:  #使用configmap中指定的key
        - name: DB_HOST   #从cm-demo中取ip和port的值,赋给DB_HOST和DB_PORT
          valueFrom: 
            configMapKeyRef: 
              name: cm-demo
              key: ip
        - name: DB_PORT
          valueFrom:
            configMapKeyRef:
              name: cm-demo
              key: port
     #envFrom:  #使configmap中所有的key/value自动变成环境变量
      #- configMapRef:
       #   name: cm-demo

执行命令(由于是测试Pod,所以该Pod在执行完启动命令后将会退出,并且不会被系统自动重启(restartPolicy=Never))

kubectl apply -f cm-pod.yaml

查看结果:
在这里插入图片描述
查看日志:
在这里插入图片描述

2. 通过VolumeMount使用ConfigMap

1)cm-apache.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-apache
data:
  html_content: hello world
  file_path: /var/www/html

2)pod-volume.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume
spec:
  containers:
    - name: apache
      image: httpd
      ports:
        - containerPort: 80
      volumeMounts:                    #以数据卷的形式挂载配置文件目录
        - name: volume-test
          mountPath: /var/www/html
  volumes:
    - name: volume-test
      configMap:
        name: cm-apache
        items:
          - key: html_content          #ConfigMap中的key=html_content
            path: main.html            #ConfigMap中Key=html_content的Value写入到main.html文件中
          - key: file_path             #ConfigMap中的key=file_path
            path: path.txt             #ConfigMap中key=file_path的value写入path.txt文件中

3)执行

kubectl apply -f cm-apache.yaml
kubectl apply -f pod-volume.yaml

4)进入到容器里面

kubectl exec -it pod-volume sh

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

victor-维克特

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

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

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

打赏作者

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

抵扣说明:

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

余额充值