k8s之configmap
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相关推荐
- 【K8S实战系列-nignx-2】k8s中configmap挂载配置nginx.conf
[K8S实战系统-nignx-2]k8s中configmap挂载配置nginx.conf 1. ConfigMap是什么 ConfigMap作用是存储不加密的数据到etcd中,让Pod以变量或数据卷V ...
- K8s 中 ConfigMap 使用介绍
K8s 中 ConfigMap 使用介绍 一.基本介绍 二.ConfigMap 使用介绍 1.ConfigMap 的创建 2.Pod 中使用 ConfigMap 一.基本介绍 ConfigMap 是一 ...
- K8S——存储ConfigMap
configMap描述信息 ConfigMap 功能在 Kubernetes1.2 版本中引入,许多应用程序会从配置文件.命令行参数或环境变量中读取配置信息. ConfigMap API 给我们提供了 ...
- k8s之ConfigMap详细理解及使用
一.ConfigMap介绍 ConfigMap是一种API对象,用来将非加密数据保存到键值对中.可以用作环境变量.命令行参数或者存储卷中的配置文件. ConfigMap可以将环境变量配置信息和容器镜像 ...
- 8. 隔壁小孩被程序员欺负,我用了一篇 K8s的ConfigMap让他心服口服!
文章目录 文章目录 文章目录 一.ConfigMap 1.1 ConfigMap 的创建 1.2 使用 ConfigMap 1.3 ConfigMap 热更新 二.Secret 2.1 Service ...
- Kubernetes(k8s)ConfigMap详解及应用
文章目录 一.ConfigMap概述 二.ConfigMap创建 1)通过命令行创建configmap(key-value键值对) 2)通过文件创建configmap 3)通过文件夹创建configm ...
- k8s cm ( ConfigMap ) 学习
介绍 ka get cmka describe ConfigMap ConfigMap 名称 或 ka describe cm cm名称ka edit cm cm名称 ConfigMap和Secret ...
- .NET Core 使用 K8S ConfigMap的正确姿势
背景 ASP.NET Core默认的配置文件定义在 appsetings.json和 appsettings.{Environment}.json文件中.这里面有一个问题就是,在使用容器部署时,每次修 ...
- [云原生专题-39]:K8S - 核心概念 - 存储抽象- pod配置文件的挂载ConfigMap
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址:https://blog.csdn.net/HiWangWenBing/article/detai ...
最新文章
- linux mysql cpu 高,Linux系统中关于Mysql数据库导致CPU很高的问题解决
- 抓包工具Charles简单使用介绍(可抓取Android中app的请求)
- 38备忘录模式(Memento Pattern)
- sql server2000中如何自动杀死死锁进程
- 让你的原创设计作品展示给世界
- 你在为疯狂圣诞节海报做准备了么?
- 质量属性效用树_知识之森-数据化你的quot;知识树”
- 谈谈 Linux 假死现象
- 现场看女排vs日本了
- TCP端口扫描[Python3.5]
- MarkDown 语法初步
- rtspplayer播放器实现
- 嵌入式开发要学多久?要学哪些课程
- 使用fir im进行内测托管
- 为什么快捷指令无法将媒体转换为文本_电脑端“快捷指令”——自动化神器Quicker了解一下...
- SQL语句查询重复语句并进行标记和更新
- 前罗辑思维撰稿人李源,首度在喜马拉雅FM解读大英帝国
- Old fishman-老赵钓鱼
- CISAW证书发证机构是哪里?权威性如何?
- 项目:基于ffmpeg的Gif表情包生成器
热门文章
- 一个研究生学历到底值多少钱?认真算一下我酸了......
- 进击的iQOO Neo5S,春节档的“优等生”
- 合作模式歌利亚机器人_歌利亚全任务流程图文攻略_歌利亚通关攻略_牛游戏网攻略...
- 在国内怎么玩LOL韩服呢?
- 如何测试朋友圈?这样回答会让HR眼前一亮
- 和学艺术朋友聊完后,发现学计算太幸运了
- bochs c语言源码,自己写操作系统 2 - 安装bochs虚拟机
- 攻防世界(web篇)---supersqli
- VsCode快速生成html 骨架,使用中文,在浏览器打开
- AJAX框架衣柜改造,老式衣柜改造—工作室老式衣柜改造方法介绍