ConfigMap存在的意义

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

ConfigMap的创建

I、使用目录创建

## 创建目录
[root@Centos8 k8sYaml]# mkdir dir
[root@Centos8 k8sYaml]# cd dir/ ## 创建2个文件,文件内存放值
[root@Centos8 dir]# cat << EOF > game.properties
> enemies=aliens
> lives=3
> enemies.cheat=true
> enemies.cheat.level=noGoodRotten
> secret.code.passphrase=UUDDLRLRBABAS
> secret.code.allowed=true
> secret.code.lives=30
> EOF [root@Centos8 dir]# cat << EOF > ui.properties
> color.good=purple
> color.bad=yellow
> allow.textmode=true
> how.nice.to.look=fairlyNice
> EOF [root@Centos8 dir]# ls
game.properties ui.properties ## 开始创建ConfigMap
[root@Centos8 dir]# kubectl create configmap game-config --from-file=/root/k8sYaml/dir
configmap/game-config created ### 查看ConfigMap
[root@Centos8 dir]# kubectl get cm
NAME DATA AGE
game-config 2 2m19s [root@Centos8 dir]# kubectl describe cm game-config
Name: game-config
Namespace: default
Labels: <none>
Annotations: <none> Data
====
game.properties:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30 ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice Events: <none>

--from-file= 表示指定该目录下所有的文件都会被用在ConfigMap里创建一个键值对,键的名字就是文件名,值就是文件内容

II、使用文件名创建

## 创建文件
[root@Centos8 dir]# cat wuzi.examplate
NAME=wuzi
URL=www.wuzi.com ## 创建ConfigMap
[root@Centos8 dir]# kubectl create cm wuzi.com --from-file=/root/k8sYaml/dir/wuzi.examplate
configmap/wuzi.com created ## 查看cm
[root@Centos8 dir]# kubectl get cm
NAME DATA AGE
game-config 2 7m37s
wuzi.com 1 41s [root@Centos8 dir]# kubectl describe cm wuzi.com
Name: wuzi.com
Namespace: default
Labels: <none>
Annotations: <none> Data
====
wuzi.examplate:
----
NAME=wuzi
URL=www.wuzi.com Events: <none>

--from-file 可以重复使用,当重复指定多个文件时,效果与直接指定目录相同

III、使用字面值创建(直接创建)

使用字面值创建使用 --from-literal 参数传递配置信息,该参数可以使用多次,格式如下:

## 创建cm
[root@Centos8 dir]# kubectl create cm spec.examplate --from-literal=spec.how=very --from-literal=spec.type=charm
configmap/spec.examplate created ## 查看cm
[root@Centos8 dir]# kubectl describe cm spec.examplate
Name: spec.examplate
Namespace: default
Labels: <none>
Annotations: <none> Data
====
spec.how:
----
very
spec.type:
----
charm
Events: <none> ## 也可以通过资源清单的方式来创建ConfigMap
vim map.yaml
...
apiVersion: v1
kind: ConfigMap
metadata:
name: spec-config
namespace: default
data:
special.now: 6\.4
special.time: 12\:00
... ## 查看
[root@Centos8 dir]# kubectl create -f map.yaml
configmap/spec-config created [root@Centos8 dir]# kubectl describe cm spec-config
Name: spec-config
Namespace: default
Labels: <none>
Annotations: <none> Data
====
special.now:
----
6\.4
special.time:
----
12\:00
Events: <none>

创建Pod 测试ConfigMap

I、使用ConfigMap设置环境变量

vim cm-test.yaml
...
apiVersion: v1
kind: Pod
metadata:
name: cm-pod
spec:
containers:
- name: cm-container
image: hub.vfancloud.com/test/myapp:v1
command: [ "/bin/sh","-c","env" ]
env: #将名为spec.examplate的ConfigMap中名为spec.how的key的value赋值给环境变量SPEC_LEVEL_KEY
- name: SPEC_LEVEL_KEY
valueFrom:
configMapKeyRef:
name: spec.examplate
key: spec.how
- name: SPEC_TYPE_KEY
valueFrom:
configMapKeyRef:
name: spec.examplate
key: spec.type
envFrom: #将名为wizi.com的ConfigMap中定义的所有key:value都导入环境变量
- configMapRef:
name: wuzi.com
restartPolicy: Never
... ## 查看环境变量
[root@Centos8 dir]# kubectl log cm-pod | grep -E "SPEC_LEVEL_KEY|SPEC_TYPE_KEY|NAME|URL"
HOSTNAME=cm-pod
SPEC_LEVEL_KEY=very
wuzi.examplate=NAME=wuzi
URL=www.wuzi.com
SPEC_TYPE_KEY=charm

II、通过数据卷插件使用configMap

vim volum.yaml
...
apiVersion: v1
kind: Pod
metadata:
name: volum-cm
spec:
containers:
- name: volum-ct
image: hub.vfancloud.com/test/myapp:v1
volumeMounts: # 挂载共享数据卷
- name: config-volume # 要挂载共享数据卷的名字
mountPath: /etc/config # 挂载到指定的目录下
volumes: # 定义共享数据卷
- name: config-volume # 共享数据卷名称
configMap:
name: game-config # ConfigMap的名称
# name: wuzi.com
# name: spec-config
restartPolicy: Never
...
[root@Centos8 dir]# kubectl create -f volum.yaml ### 分别以文章开头的第一步创建的ConfigMap类型(目录、文件、键值)三种形式进行试验
## ConfigMap类型为目录的,直接将此目录下的所有文件共享到了container指定目录中
/etc/config # ls
game.properties ui.properties
/etc/config # cat game.properties
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
/etc/config # cat ui.properties
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice ## ConfigMap类型为文件的,只将此文件共享到了container目录下
/etc/config # ls
wuzi.examplate
/etc/config # cat wuzi.examplate
NAME=wuzi
URL=www.wuzi.com ## ConfigMap类型为键值对的,将key保存成了文件名,value保存为文件内容
/etc/config # ls
special.now special.time
/etc/config # cat special.time
12\:00/etc/config #
/etc/config # cat special.now
6\.4/etc/config #

滚动更新

## 先创建一个索引文件
[root@Centos8 dir]# cat index1.html
Hello World ## 使用此文件创建ConfigMap
[root@Centos8 dir]# kubectl create cm nginx-cm --from-file=./index1.html
configmap/nginx-cm created ## 创建Deployment
[root@Centos8 dir]# vim nginx-cm.yaml
...
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-cm
namespace: default
spec:
replicas: 3
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx-cm
image: hub.vfancloud.com/test/myapp:v1
ports:
- containerPort: 80
volumeMounts:
- name: config-nginx
mountPath: /usr/share/nginx/html/config
volumes:
- name: config-nginx
configMap:
name: nginx-cm
...
kubectl apply -f nginx-cm.yaml ## 测试访问
[root@Centos8 dir]# curl http://10.244.3.170/config/index1.html
Hello World ## 现在创建一个新文件index2.html
[root@Centos8 dir]# cat index2.html
It is a wonderful world ## 删除ConfigMap重建替换index1.html为index2.html
[root@Centos8 dir]# kubectl delete cm nginx-cm
configmap "nginx-cm" deleted
[root@Centos8 dir]# kubectl get cm
No resources found.
[root@Centos8 dir]# kubectl create cm nginx-cm --from-file=./index2.html
configmap/nginx-cm created ## 再次测试,滚动更新完成
[root@Centos8 dir]# curl http://10.244.3.170/config/index2.html
It is a wonderful world

需要等一会才能同步更新,可能10-30s

Kubernetes-11:ConfigMap介绍及演示的更多相关文章

  1. Kubernetes中StatefulSet介绍

    StatefulSet 是Kubernetes1.9版本中稳定的特性,本文使用的环境为 Kubernetes 1.11.如何搭建环境可以参考kubeadm安装kubernetes V1.11.1 集群 ...

  2. Springboot整合Spring Cloud Kubernetes读取ConfigMap,支持自动刷新配置

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ...

  3. STC8H开发(三): 基于FwLib_STC8的模数转换ADC介绍和演示用例说明

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  4. Go 1.11 Module 介绍

    title: "Go 1.11 Module" date: 2018-10-26T23:50:56+08:00 draft: false --- Go 1.11 Module 介绍 ...

  5. kubernetes之configmap,深度解析mountPath,subPath,key,path的关系和作用

    参考:https://www.cnblogs.com/breezey/p/6582082.html 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库, ...

  6. Kubernetes的ConfigMap说明

    这篇博文,我们来说一说,关于在kubernetes的pod中自定义配置的问题. 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等. ...

  7. K8S学习笔记之Kubernetes 配置管理 ConfigMap

    0x00 概述 很多情况下我们为某一应用做好镜像,当我们想修改其中的一些参数的时候,就变得比较麻烦,又要重新制作镜像,我们是不是有一种方式,让镜像根据不同的场景调用我们不同的配置文件呢,那我们就需要用 ...

  8. Kubernetes 配置管理 ConfigMap(十二)

    目录 一.背景 二.创建 ConfigMap 2.1.通过 --from-literal 2.2.通过 --from-file 2.3.通过--from-env-file 2.4.YAML 配置文件 ...

  9. 第11组 Beta版本演示

    第11组 Beta版本演示   组长博客链接 https://www.cnblogs.com/xxylac/p/12039948.html 本组成员(不知道叫什么团队) 031702635 陈郑铧(组 ...

  10. K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)

    K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace)       Kubernetes 是目前发展最 ...

随机推荐

  1. 算法金 | 致敬深度学习三巨头:不愧是腾讯,LeNet问的巨细。。。

    ​ 大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 读者参加面试,竟然在 LeNet 这个基础算法上被吊打~ LeNe ...

  2. Yuno loves sqrt technology I 题解

    申明:由于本人卡常技艺不佳,本题解复杂度正确但无法通过 首先分块,然后考虑分开计算贡献维护,看下面一张图: 我们将贡献拆分为 \(ans(A) + ans(B) + ans(C) + ans(AB) ...

  3. Java使用不同方式优雅拆分业务逻辑

    如何处理复杂的业务逻辑 在实际的业务开发当中,经常会遇到复杂的业务逻辑,可能实现出来的代码并没有什么问题,但是代码的可读性很差. 那么在实际开发中如何避免大面积的 if-else 代码块的问题? 补充 ...

  4. SpringBoot 接收Post请求参数,三种方式

    package net.cyb.demo.controller; import net.cyb.demo.domain.User; import net.cyb.demo.utils.JsonData ...

  5. Vscode 一次选中多行 光标一次定位多行

    1 . 鼠标点击开始位置(定位到行首时,鼠标就点击第一行的行首:定位到行尾时,鼠标就点击第一行的行尾:) 2.  按住shift+alt 点击结束的位置(定位到行首时,鼠标就点击最后一行的行首:定位到 ...

  6. [oeasy]python0025_ 顺序执行过程_流水_流程_执行次序

    顺序执行过程_流水_流程_执行次序 回忆上次内容 上次 熟悉了 vim编辑器 操作 作用 w 向前移动光标一个word b 向后移动光标一个word :r oeasy.py 读取文件到当前文件缓存 g ...

  7. bitwarden本地搭建(无需购买SSL证书)

    bitwarden本地搭建(无需购买SSL证书) 在安装之前,笔者在这里先声明一下,我安装bitwarden使用的操作环境为ArchLinux,我的想法是,因为这只是一个"密码本" ...

  8. 1分钟了解HashSet的使用

    前言:刷leetcode的时候体验到hashset有多厉害了,用了他剪枝之后直接不爆超时了.速度大大滴快 使用方法 1.创建set对象Set<Integer>set=new HashSet ...

  9. 如何使用ventoy安装操作系统

    使用ventoy安装操作系统 vrntoy简介 简单来说,Ventoy是一个制作可启动U盘的开源工具. 有了Ventoy你就无需反复地格式化U盘,你只需要把 ISO/WIM/IMG/VHD(x)/EF ...

  10. excel一次性粘贴2万行数据

    测试导入文件功能中,会出现需要验证导入大批量数据文件的情况,怎么样让文件快速从1行数据变成2万行数据呢,以下讲解方法: 1.如下原文件只有2行数据,第一行是标题第二行是数据 2. 选中需要复制的第二行 ...