Kubernetes-11:ConfigMap介绍及演示
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介绍及演示的更多相关文章
- Kubernetes中StatefulSet介绍
StatefulSet 是Kubernetes1.9版本中稳定的特性,本文使用的环境为 Kubernetes 1.11.如何搭建环境可以参考kubeadm安装kubernetes V1.11.1 集群 ...
- Springboot整合Spring Cloud Kubernetes读取ConfigMap,支持自动刷新配置
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Docker & Kubernetes相关文章:容器技术 之前介绍了Spring Cloud Config的用法,但 ...
- STC8H开发(三): 基于FwLib_STC8的模数转换ADC介绍和演示用例说明
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- Go 1.11 Module 介绍
title: "Go 1.11 Module" date: 2018-10-26T23:50:56+08:00 draft: false --- Go 1.11 Module 介绍 ...
- kubernetes之configmap,深度解析mountPath,subPath,key,path的关系和作用
参考:https://www.cnblogs.com/breezey/p/6582082.html 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库, ...
- Kubernetes的ConfigMap说明
这篇博文,我们来说一说,关于在kubernetes的pod中自定义配置的问题. 我们知道,在几乎所有的应用开发中,都会涉及到配置文件的变更,比如说在web的程序中,需要连接数据库,缓存甚至是队列等等. ...
- K8S学习笔记之Kubernetes 配置管理 ConfigMap
0x00 概述 很多情况下我们为某一应用做好镜像,当我们想修改其中的一些参数的时候,就变得比较麻烦,又要重新制作镜像,我们是不是有一种方式,让镜像根据不同的场景调用我们不同的配置文件呢,那我们就需要用 ...
- Kubernetes 配置管理 ConfigMap(十二)
目录 一.背景 二.创建 ConfigMap 2.1.通过 --from-literal 2.2.通过 --from-file 2.3.通过--from-env-file 2.4.YAML 配置文件 ...
- 第11组 Beta版本演示
第11组 Beta版本演示 组长博客链接 https://www.cnblogs.com/xxylac/p/12039948.html 本组成员(不知道叫什么团队) 031702635 陈郑铧(组 ...
- K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)
K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace) Kubernetes 是目前发展最 ...
随机推荐
- Codeforces Global Round 26 A~C2
惹啊啊啊啊,这场做得我发昏,最近总感觉不在状态,但还是再在冲击1600-1800的题目. A. Strange Splitting ---------------------------------题 ...
- MyBatis插件:通用mapper(tk.mapper)
简单认识通用mapper 了解mapper 作用:就是为了帮助我们自动的生成sql语句 通用mapper是MyBatis的一个插件,是pageHelper的同一个作者进行开发的 作者gitee地址:h ...
- DarkHole_1靶机渗透流程
VulnHub_DarkHole1靶机渗透流程 注意:部署时,靶机的网络连接模式必须和kali一致,让靶机跟kali处于同一网段,这用kali才能扫出靶机的主机 1. 信息收集 1.1 探测IP 使用 ...
- 微服务网关Gateway使用
为什么需要网关? Gateway网关是我们服务的守门神,所有微服务的统一入口. 网关的核心功能特性 请求路由和负载均衡 一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转 ...
- Dubbo依赖
项目依赖 Dubbo依赖 <!--Dubbo依赖--> <dependency> <groupId>com.alibaba</groupId> < ...
- .NET 9 预览版 5 发布
微软在6月发布了.NET 9预览版的第五个版本.这个新版本的框架预计将在今年晚些时候正式发布,它是一个标准支持(STS)版本,将在2024年11月12日至2026年5月12日期间在多个操作系统上获得1 ...
- Swift开发基础01-语法
Hello World print("Hello World") 不用编写main函数,Swift将全局范围内的首句可执行代码作为程序入口一句代码尾部可以省略分号(;),多句代码写 ...
- oeasy 教您玩转linux 010304 图形界面 xfce
我们来回顾一下 上一部分我们都讲了什么? 讲了文件管理器和命令行终端互相交互 用命令nautilus在文件管理器打开某路径 这次我们来看看 图形用户界面(GUI)的情况 图形界面和发行版的关系 一个发 ...
- AX网相关图片(原创)
官网:AXA6.COM | The future is come. Copyright 2020 – 2023| AX网 Axa6.Com | All Rights Reserved
- vue小知识:多层数据双向相应之向上派发和向下派发($dispatch和$broadcast)
注意:这两个实例已经在vue3中弃用啦!!!(所以不详细说了,封装知道怎么用就行了,作为了解) 都是在vue实例配置(main.js) 向上派发:$dispatch 注意,在相应后代组件中使用 thi ...