1.ConfigMap

1.1创建方式

# 命令格式
kubectl create configmap <映射名称> <数据源>
​
# <映射名称> 是为 ConfigMap 指定的名称,<数据源> 是要从中提取数据的目录、 文件或者字面值。

1.2获取ConfigMap信息

1)kubectl describe
2)kubectl get

1.3创建 ConfigMap

1.3.1基于目录创建

# 创建本地目录
mkdir -p configure-pod-container/configmap/
​
# 将实例文件下载到 `configure-pod-container/configmap/` 目录
wget https://kubernetes.io/examples/configmap/game.properties -O configure-pod-container/configmap/game.properties
wget https://kubernetes.io/examples/configmap/ui.properties -O configure-pod-container/configmap/ui.properties
​
# 创建 configmap
[root@vm21 yaml]# kubectl create configmap game-config --from-file=configure-pod-container/configmap/
configmap/game-config created
​
# 查看configmap
[root@vm21 yaml]# kubectl get configmap game-config
NAME          DATA   AGE
game-config   2      23s
​
# 查看game-config内容
[root@vm21 yaml]# kubectl describe configmap 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
​
​
BinaryData
====
​
Events:  <none>
​
# 以yaml格式输出game-config内容
[root@vm21 yaml]# kubectl get configmap game-config -o yaml
apiVersion: v1
data:game.properties: |-enemies=alienslives=3enemies.cheat=trueenemies.cheat.level=noGoodRottensecret.code.passphrase=UUDDLRLRBABASsecret.code.allowed=truesecret.code.lives=30ui.properties: |color.good=purplecolor.bad=yellowallow.textmode=truehow.nice.to.look=fairlyNice
kind: ConfigMap
metadata:creationTimestamp: "2022-04-10T12:49:45Z"name: game-confignamespace: defaultresourceVersion: "7531"uid: 0f84e076-f5c7-42a7-8dee-5e5a349f9c1e
​

1.3.2基于文件创建

# 生成game-config2,可以连续指定多个--from-file
[root@vm21 yaml]# kubectl create configmap game-config2 --from-file=configure-pod-container/configmap/ui.properties
configmap/game-config2 created
​
# 查看game-config2
[root@vm21 yaml]# kubectl get configmap
NAME               DATA   AGE
game-config        2      6m58s
game-config2       1      11s
kube-root-ca.crt   1      83m
​
# 查看game-config2描述
[root@vm21 yaml]# kubectl describe configmap game-config2
Name:         game-config2
Namespace:    default
Labels:       <none>
Annotations:  <none>
​
Data
====
ui.properties:
----
color.good=purple
color.bad=yellow
allow.textmode=true
how.nice.to.look=fairlyNice
​
​
BinaryData
====
​
Events:  <none>
​
# 以yaml格式输出game-config2内容
[root@vm21 yaml]# kubectl get configmap game-config2 -o yaml
apiVersion: v1
data:ui.properties: |color.good=purplecolor.bad=yellowallow.textmode=truehow.nice.to.look=fairlyNice
kind: ConfigMap
metadata:creationTimestamp: "2022-04-10T12:56:32Z"name: game-config2namespace: defaultresourceVersion: "8103"uid: 01fd7498-c4d2-4692-97bf-f93d1dc09e67
​
# 下载示例环境文件
wget https://kubernetes.io/examples/configmap/game-env-file.properties -O configure-pod-container/configmap/game-env-file.properties
​
# 显示env文件内容
[root@vm21 yaml]# cat configure-pod-container/configmap/game-env-file.properties
enemies=aliens
lives=3
allowed="true"
​
# 从环境文件创建 ConfigMap
[root@vm21 yaml]# kubectl create configmap game-config-3 --from-env-file=configure-pod-container/configmap/game-env-file.properties
configmap/game-config-3 created
​
# 查看已生成的configmap
[root@vm21 yaml]# kubectl get configmap
NAME               DATA   AGE
game-config        2      19m
game-config-3      3      10s
game-config2       1      12m
kube-root-ca.crt   1      95m
​
# 查看game-config-3描述
[root@vm21 yaml]# kubectl describe configmap game-config-3
Name:         game-config-3
Namespace:    default
Labels:       <none>
Annotations:  <none>
​
Data
====
allowed:
----
"true"
enemies:
----
aliens
lives:
----
3
​
BinaryData
====
​
Events:  <none>
​
# 以yaml格式描述game-config-3
[root@vm21 yaml]# kubectl get configmap game-config-3 -o yaml
apiVersion: v1
data:allowed: '"true"'enemies: alienslives: "3"
kind: ConfigMap
metadata:creationTimestamp: "2022-04-10T13:08:35Z"name: game-config-3namespace: defaultresourceVersion: "9120"uid: 88161d80-c0b4-4a7b-9e3d-f1e56f17d545
​
# 当多次使用 --from-env-file 来从多个数据源创建 ConfigMap 时,仅仅最后一个 env 文件有效
​
​
# 定义从文件创建 ConfigMap 时要使用的键,格式如下:
kubectl create configmap game-config-3 --from-file=<我的键名>=<文件路径>
​
#
[root@vm21 yaml]# kubectl create configmap game-config-4 --from-file=game-special-key=configure-pod-container/configmap/game.properties
configmap/game-config-4 created
​
[root@vm21 yaml]# kubectl get configmap
NAME               DATA   AGE
game-config        2      23m
game-config-3      3      4m44s
game-config-4      1      9s
game-config2       1      16m
kube-root-ca.crt   1      99m
​
[root@vm21 yaml]# kubectl describe configmap game-config-4
Name:         game-config-4
Namespace:    default
Labels:       <none>
Annotations:  <none>
​
Data
====
game-special-key:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
​
BinaryData
====
​
Events:  <none>
​
​
[root@vm21 yaml]# kubectl get configmap game-config-4 -o yaml
apiVersion: v1
data:game-special-key: |-enemies=alienslives=3enemies.cheat=trueenemies.cheat.level=noGoodRottensecret.code.passphrase=UUDDLRLRBABASsecret.code.allowed=truesecret.code.lives=30
kind: ConfigMap
metadata:creationTimestamp: "2022-04-10T13:13:10Z"name: game-config-4namespace: defaultresourceVersion: "9503"uid: c4fb1651-b8c9-450d-861f-224265fc03da

1.3.3根据字面值

[root@vm21 yaml]# kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm
configmap/special-config created
​
​
[root@vm21 yaml]# kubectl get configmap
NAME               DATA   AGE
game-config        2      28m
game-config-3      3      9m28s
game-config-4      1      4m53s
game-config2       1      21m
kube-root-ca.crt   1      104m
special-config     2      7s
​
​
[root@vm21 yaml]# kubectl describe configmap special-config
Name:         special-config
Namespace:    default
Labels:       <none>
Annotations:  <none>
​
Data
====
special.how:
----
very
special.type:
----
charm
​
BinaryData
====
​
Events:  <none>
​
​
[root@vm21 yaml]# kubectl get configmap special-config -o yaml
apiVersion: v1
data:special.how: veryspecial.type: charm
kind: ConfigMap
metadata:creationTimestamp: "2022-04-10T13:17:56Z"name: special-confignamespace: defaultresourceVersion: "9900"uid: a9331311-c7b4-4098-b59d-01f77d3e4b24

1.3.4基于生成器

[root@vm21 configmap]# mkdir -p /opt/yaml/configure-pod-container/configmap/kubectl
​
​
[root@vm21 configmap]# cp /opt/yaml/configure-pod-container/configmap/game.properties /opt/yaml/configure-pod-container/configmap/kubectl/
​
​
[root@vm21 yaml]# kubectl apply -k .
configmap/game-config-4-tbg7c4gc77 created
​
​
[root@vm21 yaml]# kubectl get configmap
NAME                       DATA   AGE
game-config-4-tbg7c4gc77   1      11s
kube-root-ca.crt           1      125m
​
​
[root@vm21 yaml]# kubectl describe configmap/game-config-4-tbg7c4gc77
Name:         game-config-4-tbg7c4gc77
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
​
BinaryData
====
​
Events:  <none>
​
​
[root@vm21 yaml]# kubectl get configmap/game-config-4-tbg7c4gc77 -o yaml
apiVersion: v1
data:game.properties: |-enemies=alienslives=3enemies.cheat=trueenemies.cheat.level=noGoodRottensecret.code.passphrase=UUDDLRLRBABASsecret.code.allowed=truesecret.code.lives=30
kind: ConfigMap
metadata:annotations:kubectl.kubernetes.io/last-applied-configuration: |{"apiVersion":"v1","data":{"game.properties":"enemies=aliens\nlives=3\nenemies.cheat=true\nenemies.cheat.level=noGoodRotten\nsecret.code.passphrase=UUDDLRLRBABAS\nsecret.code.allowed=true\nsecret.code.lives=30"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"game-config-4-tbg7c4gc77","namespace":"default"}}creationTimestamp: "2022-04-10T13:38:33Z"name: game-config-4-tbg7c4gc77namespace: defaultresourceVersion: "11578"uid: a2bdac5c-5b6b-4683-b23b-512981210187
​
# 请注意,生成的 ConfigMap 名称具有通过对内容进行散列而附加的后缀, 这样可以确保每次修改内容时都会生成新的 ConfigMap。
​
​
# 定义从文件生成 ConfigMap 时要使用的键
# 在 ConfigMap 生成器中,你可以定义一个非文件名的键名。
# 例如,从 configure-pod-container/configmap/game.properties 文件生成 ConfigMap, 但使用 game-special-key 作为键名:
​
cat <<EOF >./kustomization.yaml
configMapGenerator:
- name: game-config-5files:- game-special-key=configure-pod-container/configmap/kubectl/game.properties
EOF
​
[root@vm21 yaml]# kubectl apply -k ./
configmap/game-config-5-tfhf8f4fkf created
​
​
[root@vm21 yaml]# kubectl get configmap
NAME                       DATA   AGE
game-config-4-tbg7c4gc77   1      7m11s
game-config-5-tfhf8f4fkf   1      9s
kube-root-ca.crt           1      132m
​
[root@vm21 yaml]# kubectl describe configmap/game-config-5-tfhf8f4fkf
Name:         game-config-5-tfhf8f4fkf
Namespace:    default
Labels:       <none>
Annotations:  <none>
​
Data
====
game-special-key:
----
enemies=aliens
lives=3
enemies.cheat=true
enemies.cheat.level=noGoodRotten
secret.code.passphrase=UUDDLRLRBABAS
secret.code.allowed=true
secret.code.lives=30
​
BinaryData
====
​
Events:  <none>
​
​
[root@vm21 yaml]# kubectl get configmap/game-config-5-tfhf8f4fkf -o yaml
apiVersion: v1
data:game-special-key: |-enemies=alienslives=3enemies.cheat=trueenemies.cheat.level=noGoodRottensecret.code.passphrase=UUDDLRLRBABASsecret.code.allowed=truesecret.code.lives=30
kind: ConfigMap
metadata:annotations:kubectl.kubernetes.io/last-applied-configuration: |{"apiVersion":"v1","data":{"game-special-key":"enemies=aliens\nlives=3\nenemies.cheat=true\nenemies.cheat.level=noGoodRotten\nsecret.code.passphrase=UUDDLRLRBABAS\nsecret.code.allowed=true\nsecret.code.lives=30"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"game-config-5-tfhf8f4fkf","namespace":"default"}}creationTimestamp: "2022-04-10T13:45:35Z"name: game-config-5-tfhf8f4fkfnamespace: defaultresourceVersion: "12242"uid: 4647a12d-780c-456c-87a6-044d12c5c3b9
​

1.4使用ConfigMap

1.4.1环境变量方式

# 1.在 ConfigMap 中将环境变量定义为键值对:
kubectl create configmap special-config --from-literal=special.how=very
​
# 2.将 ConfigMap 中定义的 special.how 赋值给 Pod 规约中的 SPECIAL_LEVEL_KEY 环境变量
vi example-pod.yaml
​
apiVersion: v1
kind: Pod
metadata:name: dapi-test-pod
spec:containers:- name: test-containerimage: busybox:latest                    #可以到https://hub.docker.com/搜索镜像包command: [ "/bin/sh", "-c", "env" ]env:# 定义环境变量- name: SPECIAL_LEVEL_KEYvalueFrom:configMapKeyRef:name: special-configkey: special.howrestartPolicy: Never
​
#
kubectl create -f example-pod.yaml

1.4.2数据卷方式

vi pod-configmap-volume-specific-key.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:name: special-confignamespace: default
data:SPECIAL_LEVEL: verySPECIAL_TYPE: charm
---
# 使用存储在 ConfigMap 中的数据填充卷
apiVersion: v1
kind: Pod
metadata:name: dapi-test-pod
spec:containers:- name: test-containerimage: k8s.gcr.io/busyboxcommand: [ "/bin/sh", "-c", "ls /etc/config/" ]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:# 提供包含要添加到容器中的文件的 ConfigMap 的名称name: special-configrestartPolicy: Never
---
# 使用存储在 ConfigMap 中的数据填充卷
apiVersion: v1
kind: Pod
metadata:name: dapi-test-pod
spec:containers:- name: test-containerimage: k8s.gcr.io/busyboxcommand: [ "/bin/sh","-c","cat /etc/config/keys" ]volumeMounts:- name: config-volumemountPath: /etc/configvolumes:- name: config-volumeconfigMap:name: special-configitems:- key: SPECIAL_LEVELpath: keysrestartPolicy: Never# 创建容器
kubectl apply -f pod-configmap-volume-specific-key.yaml

1.5实战

接下来,使用上述已讲过的内容,亲自实践部署一个redis容器

1.5.1ConfigMap 配置 Redis

cd /opt/yaml/redis
cat <<EOF >example-redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: example-redis-config
data:redis-config: ""
EOF

1.5.2应用yaml文件

[root@vm21 yaml]# kubectl apply -f example-redis-config.yaml
configmap/example-redis-config created

1.5.3创建容器yaml清单

cd /opt/yaml/redis
vi redis-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: redis
spec:containers:- name: redisimage: redis:5.0.4command:- redis-server- "/redis-master/redis.conf"env:- name: MASTERvalue: "true"ports:- containerPort: 6379resources:limits:cpu: "0.1"volumeMounts:- mountPath: /redis-master-dataname: data- mountPath: /redis-mastername: configvolumes:- name: dataemptyDir: {}- name: configconfigMap:name: example-redis-configitems:- key: redis-configpath: redis.conf

1.5.4应用yaml文件

[root@vm21 redis]# kubectl apply -f redis-pod.yaml
pod/redis created

1.5.5查看容器状态

[root@vm21 redis]# kubectl get pods -n default
NAME    READY   STATUS    RESTARTS   AGE
redis   1/1     Running   0          2m21s

1.5.6查看ConfigMap键值

[root@vm21 redis]# kubectl describe configmap/example-redis-config
Name:         example-redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>
​
Data
====
redis-config:
----
​
​
BinaryData
====
​
Events:  <none>

1.5.7容器操作

[root@vm21 redis]# kubectl exec -it redis -- redis-cli
# 查看 maxmemory
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "0"
# 查看maxmemory-policy
127.0.0.1:6379> CONFIG GET maxmemory-policy
1) "maxmemory-policy"
2) "noeviction"

1.5.8更新ConfigMap键值

cd /opt/yaml/redis
vi example-redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: example-redis-config
data:redis-config: |maxmemory 2mbmaxmemory-policy allkeys-lru

1.5.9应用yaml更新

[root@vm21 redis]# kubectl apply -f example-redis-config.yaml
configmap/example-redis-config configured

1.5.10确认ConfigMap已更新

[root@vm21 redis]# kubectl describe configmap/example-redis-config
Name:         example-redis-config
Namespace:    default
Labels:       <none>
Annotations:  <none>
​
Data
====
redis-config:
----
maxmemory 2mb
maxmemory-policy allkeys-lru
​
​
BinaryData
====
​
Events:  <none>

1.5.11验证容器配置

[root@vm21 redis]# kubectl exec -it redis -- redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "0"
127.0.0.1:6379> CONFIG GET maxmemory-policy
1) "maxmemory-policy"
2) "noeviction"
​
# 配置值未更改,因为需要重新启动 Pod 才能从关联的 ConfigMap 中获取更新的值。

1.5.12重建容器

# 删除已有容器
[root@vm21 redis]# kubectl delete pod redis
pod "redis" deleted
​
# 重新创建容器
[root@vm21 redis]# kubectl apply -f redis-pod.yaml
pod/redis created
​

1.5.13验证容器配置项

[root@vm21 redis]# kubectl exec -it redis -- redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "2097152"
127.0.0.1:6379> CONFIG GET maxmemory-policy
1) "maxmemory-policy"
2) "allkeys-lru"

1.5.14清理实验内容

# 清理pod
[root@vm21 redis]# kubectl delete -f redis-pod.yaml
pod "redis" deleted
​
# 清理configmap
[root@vm21 redis]# kubectl delete -f example-redis-config.yaml
configmap "example-redis-config" deleted

k8s之configmap相关推荐

  1. 【K8S实战系列-nignx-2】k8s中configmap挂载配置nginx.conf

    [K8S实战系统-nignx-2]k8s中configmap挂载配置nginx.conf 1. ConfigMap是什么 ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷V ...

  2. K8s 中 ConfigMap 使用介绍

    K8s 中 ConfigMap 使用介绍 一.基本介绍 二.ConfigMap 使用介绍 1.ConfigMap 的创建 2.Pod 中使用 ConfigMap 一.基本介绍 ConfigMap 是一 ...

  3. K8S——存储ConfigMap

    configMap描述信息 ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息. ConfigMap API 给我们提供了 ...

  4. k8s之ConfigMap详细理解及使用

    一.ConfigMap介绍 ConfigMap是一种API对象,用来将非加密数据保存到键值对中.可以用作环境变量.命令行参数或者存储卷中的配置文件. ConfigMap可以将环境变量配置信息和容器镜像 ...

  5. 8. 隔壁小孩被程序员欺负,我用了一篇 K8s的ConfigMap让他心服口服!

    文章目录 文章目录 文章目录 一.ConfigMap 1.1 ConfigMap 的创建 1.2 使用 ConfigMap 1.3 ConfigMap 热更新 二.Secret 2.1 Service ...

  6. Kubernetes(k8s)ConfigMap详解及应用

    文章目录 一.ConfigMap概述 二.ConfigMap创建 1)通过命令行创建configmap(key-value键值对) 2)通过文件创建configmap 3)通过文件夹创建configm ...

  7. k8s cm ( ConfigMap ) 学习

    介绍 ka get cmka describe ConfigMap ConfigMap 名称 或 ka describe cm cm名称ka edit cm cm名称 ConfigMap和Secret ...

  8. .NET Core 使用 K8S ConfigMap的正确姿势

    背景 ASP.NET Core默认的配置文件定义在 appsetings.json和 appsettings.{Environment}.json文件中.这里面有一个问题就是,在使用容器部署时,每次修 ...

  9. [云原生专题-39]:K8S - 核心概念 - 存储抽象- pod配置文件的挂载ConfigMap

    作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...

最新文章

  1. Eclipse + Spring boot +mybatis + mysql(后续)
  2. LeetCode 之 JavaScript 解答第23题 —— 合并K个有序链表(Merge K Sorted Lists)
  3. JavaWeb:JSP
  4. Java自定义配置文件xml_spring-boot自定义配置文件
  5. 如何用增长的思维做提效?
  6. Hyper-v Server QA
  7. node.js项目中常量的配置 - 个人文章 - SegmentFault 思否
  8. 51nod1325-两棵树的问题【最大权闭合图,网络流】
  9. Java并发编程实战————对象的组合
  10. oracle 触发器更新视图,关于UPDATE触发器的详细介绍
  11. hdu 1203 I NEED A OFFER!
  12. 前端后台学习笔记汇杂
  13. Effective C# 原则3:选择is或者as操作符而不是做强制类型转换(翻译)
  14. Qt多线程1:QThread
  15. ABB机器人示教器无法读取U盘怎么办
  16. PCB设计之安规规范
  17. VB.NET模拟掷骰子
  18. 移远通信亮相CCBN2021,助推视听媒体等领域不断创新
  19. html5 video播放按钮放在中间,在html5视频控制区跟踪点击播放按钮(Track clicks to play button in html5 video control area)...
  20. linux常见桌面系统以及安装gnome远程桌面

热门文章

  1. android 图片显示崩溃
  2. 用python实现点阵屏_用Python代码来绘制彭罗斯点阵的教程
  3. 云开发(一)认识云开发
  4. shell脚本超时处理
  5. Lesson 10: Configuration, Resource Usage and SchedulerFactory
  6. Spring5——JdbcTemplate
  7. Uva-1289 Stacking Plates
  8. matlab圆柱内导热分离变量法,一维热传导方程数值解法及matlab实现分离变量法和有限差分法.doc...
  9. RIL 机制---消息从RIL到reference-ril
  10. 接口500什么原因_性价比最高的电脑音箱有哪些?20款50-500元电脑音箱推荐