首页 > 其他分享 >ConfigMap 多种使用方法

ConfigMap 多种使用方法

时间:2024-04-07 16:04:08浏览次数:25  
标签:ConfigMap name configmap 方法 多种 game env config

介绍

ConfigMap 是 Kubernetes 中的一种资源对象,用于存储非敏感的配置数据,例如键值对、环境变量、配置文件等。它提供了一种将配置数据与应用程序解耦的方式,使得应用程序可以更灵活地部署和管理。

  • 注意:ConfigMap 在设计上不是用来保存大量数据的。在 ConfigMap 中保存的数据不可超过 1 MiB。如果你需要保存超出此尺寸限制的数据,可以考虑挂载存储卷 或者使用独立的数据库或者文件服务。

ConfigMaps

这是一个 ConfigMap 的示例,它的一些键只有一个值,其他键的值看起来像是 配置的片段格式

apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo      # ConfigMap 文件名字
data:
  # 类属性键;每一个键都映射到一个简单的值
  player_initial_lives: "3"
  ui_properties_file_name: "user-interface.properties"

  # 类文件键  这个会创建两个文件,文件名字为 game.properties 和 user-interface.properties 文件内容如下显示。
  game.properties: |       
    enemy.types=aliens,monsters
    player.maximum-lives=5    
  user-interface.properties: |
    color.good=purple
    color.bad=yellow
    allow.textmode=true   

创建 ConfigMap

基于一个目录来创建 ConfigMap

操作方法

# 创建本地目录
mkdir configmap

# 将示例文件下载到 `configure-pod-container/configmap/` 目录
wget https://kubernetes.io/examples/configmap/game.properties -O configmap/game.properties --no-check-certificate
wget https://kubernetes.io/examples/configmap/ui.properties -O configmap/ui.properties --no-check-certificate

# 创建ConfigMap
kubectl create configmap game-config --from-file=configmap/

查看创建的ConfigMap

kubectl get cm
NAME          DATA   AGE
game-config   2      13s

或者

kubectl describe cm
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>

基于文件创建 ConfigMap

使用 kubectl create configmap 基于单个文件或多个文件创建 ConfigMap

# 基于单个文件
kubectl create configmap game-config-2 --from-file=configmap/game.properties

# 也可以多次使用 --from-file 参数,从多个数据源创建 ConfigMap
kubectl create configmap game-config-2 --from-file=configmap/game.properties --from-file=configmap/ui.properties

定义从文件创建 ConfigMap 时要使用的键

在使用 --from-file 参数时,你可以定义在 ConfigMap 的 data 部分出现键名, 而不是按默认行为使用文件名:

# kubectl create configmap game-config-3 --from-file=<我的键名>=<文件路径>
kubectl create configmap game-config-3 --from-file=game-special-key=configmap/game.properties

查看创建的ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: game-config-3
  namespace: default
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

使用 --from-env-file 选项基于 env 文件创建 ConfigMap

# Env 文件包含环境变量列表。其中适用以下语法规则:
# 这些语法规则适用:
#   Env 文件中的每一行必须为 VAR=VAL 格式。
#   以#开头的行(即注释)将被忽略。
#   空行将被忽略。
#   引号不会被特殊处理(即它们将成为 ConfigMap 值的一部分)。

# 将示例文件下载到 `configmap/` 目录
wget https://kubernetes.io/examples/configmap/game-env-file.properties -O configmap/game-env-file.properties --no-check-certificate
wget https://kubernetes.io/examples/configmap/ui-env-file.properties -O configmap/ui-env-file.properties --no-check-certificate

# Env 文件 `game-env-file.properties` 如下所示
cat configure-pod-container/configmap/game-env-file.properties
enemies=aliens
lives=3
allowed="true"

# 此注释和上方的空行将被忽略

创建Env文件

kubectl create configmap game-config-env-file --from-env-file=configmap/game-env-file.properties

将产生以下 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  creationTimestamp: "2024-04-07T06:19:10Z"
  name: game-config-env-file
  namespace: default
  resourceVersion: "7783916"
  uid: 177cfab4-f74a-4e34-854f-78e85582fe3f
data:
  allowed: '"true"'
  enemies: aliens
  lives: "3"

多次指定 --from-env-file 参数来从多个数据源创建 ConfigMap

kubectl create configmap config-multi-env-files \
        --from-env-file=configmap/game-env-file.properties \
        --from-env-file=configmap/ui-env-file.properties

根据字面值创建 ConfigMap

你可以将 kubectl create configmap 与 --from-literal 参数一起使用, 通过命令行定义文字值

kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm

查看

kubectl get configmaps special-config -o yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data: # 下面这两个是创建的时候指定的值
  special.how: very
  special.type: charm

ConfigMap 使用方法

使用单个 ConfigMap 中的数据定义容器环境变量

在 ConfigMap 中将环境变量定义为键值对:

kubectl create configmap special-config --from-literal=special.how=very

将 ConfigMap 中定义的 special.how 赋值给 Pod 规约中的 SPECIAL_LEVEL_KEY 环境变量。

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
  restartPolicy: Never
    - name: test-container
      image: busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        # 定义环境变量
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:        # ConfigMap 包含你要赋给 SPECIAL_LEVEL_KEY 的值             
              name: special-config
              key: special.how      # 指定与取值相关的键名

创建并启动成功以后,Pod 的输出包含环境变量 SPECIAL_LEVEL_KEY=very

使用来自多个 ConfigMap 的数据定义容器环境变量

创建 ConfigMap。 这是你将使用的清单:

kubectl create -f configmaps.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  special.how: very
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: env-config
  namespace: default
data:
  log_level: INFO

在 Pod 规约中定义环境变量

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh", "-c", "env" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: special.how
        - name: LOG_LEVEL
          valueFrom:
            configMapKeyRef:
              name: env-config
              key: log_level
  restartPolicy: Never

创建Pod 并运行成功后,Pod 的输出包含环境变量 SPECIAL_LEVEL_KEY=very 和 LOG_LEVEL=INFO。

将 ConfigMap 中的所有键值对配置为容器环境变量

创建一个包含多个键值对的 ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  SPECIAL_LEVEL: very
  SPECIAL_TYPE: charm

使用 envFrom 将所有 ConfigMap 的数据定义为容器环境变量,ConfigMap 中的键成为 Pod 中的环境变量名称。

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh", "-c", "env" ]
      envFrom:
      - configMapRef:
          name: special-config
  restartPolicy: Never

Pod 的输出包含环境变量 SPECIAL_LEVEL=very 和 SPECIAL_TYPE=charm

在 Pod 命令中使用 ConfigMap 定义的环境变量

你可以使用 $(VAR_NAME) Kubernetes 替换语法在容器的 command 和 args 属性中使用 ConfigMap 定义的环境变量。

例如,以下 Pod 清单:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/echo", "$(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: SPECIAL_LEVEL
        - name: SPECIAL_TYPE_KEY
          valueFrom:
            configMapKeyRef:
              name: special-config
              key: SPECIAL_TYPE
  restartPolicy: Never

此 Pod 在 test-container 容器中产生以下输出:

kubectl logs dapi-test-pod
very charm

挂载 ConfigMap中的数据

示例:

apiVersion: v1
kind: ConfigMap
metadata:
  name: special-config
  namespace: default
data:
  SPECIAL_LEVEL: very
  SPECIAL_TYPE: charm
---
apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh", "-c", "ls /etc/config/" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config   # ConfigMap 里面的两个文件会挂在到这个目录
  volumes:
    - name: config-volume
      configMap:
        name: special-config     # 提供包含要添加到容器中的文件的 ConfigMap 的名称
  restartPolicy: Never

Pod 运行时,命令 ls /etc/config/ 产生下面的输出:

SPECIAL_LEVEL
SPECIAL_TYPE

将 ConfigMap 数据添加到卷中的特定路径

使用 path 字段为特定的 ConfigMap 项目指定预期的文件路径。 在这里,ConfigMap 中键 SPECIAL_LEVEL 的内容将挂载在 config-volume 卷中 /etc/config/keys 文件中

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: [ "/bin/sh","-c","cat /etc/config/keys" ]
      volumeMounts:
      - name: config-volume
        mountPath: /etc/config
  volumes:
    - name: config-volume
      configMap:
        name: special-config
        items:
        - key: SPECIAL_LEVEL
          path: keys
  restartPolicy: Never

当 Pod 运行时,命令 cat /etc/config/keys 产生以下输出: very

注意:
如前,/etc/config/ 目录中所有先前的文件都将被删除。

挂载的 ConfigMap 会被自动更新

当已挂载的 ConfigMap 被更新时,所投射的内容最终也会被更新。 这适用于 Pod 启动后可选引用的 ConfigMap 重新出现的情况。

Kubelet 在每次定期同步时都会检查所挂载的 ConfigMap 是否是最新的。 然而,它使用其基于 TTL 机制的本地缓存来获取 ConfigMap 的当前值。 因此,从 ConfigMap 更新到新键映射到 Pod 的总延迟可能与 kubelet 同步周期(默认为 1 分钟)+ kubelet 中 ConfigMap 缓存的 TTL(默认为 1 分钟)一样长。 你可以通过更新 Pod 的一个注解来触发立即刷新。

可选的 ConfigMap

你可以在 Pod 规约中将对 ConfigMap 的引用标记为可选(optional)。 如果 ConfigMap 不存在,那么它在 Pod 中为其提供数据的配置(例如:环境变量、挂载的卷)将为空。 如果 ConfigMap 存在,但引用的键不存在,那么数据也是空的。

例如,以下 Pod 规约将 ConfigMap 中的环境变量标记为可选:

apiVersion: v1
kind: Pod
metadata:
  name: dapi-test-pod
spec:
  containers:
    - name: test-container
      image: busybox
      command: ["/bin/sh", "-c", "env"]
      env:
        - name: SPECIAL_LEVEL_KEY
          valueFrom:
            configMapKeyRef:
              name: a-config
              key: akey
              optional: true # 将环境变量标记为可选
  restartPolicy: Never

标签:ConfigMap,name,configmap,方法,多种,game,env,config
From: https://blog.csdn.net/qq_39965541/article/details/137455270

相关文章

  • 接口和枚举在方法中的区别
    枚举类型较传统定义常量的方式,除了具有参数类型检测的优势之外,还具有其他方面的优势。用户可以将一个枚举类型看作是一个类,它继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员都默认被final、public、static......
  • 【Java业务需求解决方案】分布式锁应用详情,多种方案选择,轻松解决,手把手操作(非全数
    目录背景:解决方案:分布式锁方案一(不建议,但原理得懂):Redis锁setnx与业务代码处理雏形代码产生问题一:锁释放问题代码改造:锁添加过期时间产生问题二:锁被别的线程误删代码改造:添加setnx锁请求标识防勿删产生问题三:递归容易造成内存溢出代码改造:递归改造while循环产生......
  • 因为算法不同,客户端与服务器无法通信。”的解决方法
    因为算法不同,客户端与服务器无法通信。”的解决方法sqlserver客户端远程sqlserver服务器 或是mstsc 最后根据微软文档的说明,改动注册表就成功了:传输层安全性(TLS)注册表设置|MicrosoftDocs在注册表编辑器,找到以下注册表项/文件夹:HKEY_LOCAL_MACHINE\SYSTEM\Curren......
  • 5.数据类型内置方法
    【一】数据类型内置方法1)整数类型(int)1.类型强转可将符合整数格式的字符串转换成整数类型print(int('5'))2.进制转换十进制转二进制 0bprint(bin(999))#0b1111100111十进制转八进制 0oprint(oct(999))#0o1747十进制转十六进制 0xprint(hex(999))#0x3e......
  • qt Qml qml Property的使用方法
    9.property简介:自己声明一个变量名,自己赋值,外部可以对其赋值可以声明一个属性变量intstringvardouble等等也可以声明一个控件用于外部写入到本qmlrectanglecomponent等等其他:在property前面可以加readonly就可以只能外部访问,不能修改在property前面可以加req......
  • qt Qml qml MouseArea的属性和信号方法
    Mousearea属性:​acceptedButtons:​接受的鼠标按键,默认是左键Qt.LeftButton|Qt.RightButton|Qt.AllButtons等等​pressedButtons:​按下的是什么键?左键or右键等Rectangle{color:"yellow"anchors.centerIn:parentwidth:200hei......
  • 电脑桌面上表格不见了怎么找回?这5个方法不要错过
    在日常的办公和学习中,电脑桌面上的各种文件、文件夹和表格等无疑是我们较为频繁使用的资源。然而,有时我们可能会因为一些操作失误或者电脑问题,突然发现桌面上的某个表格文件神秘失踪了。面对这种情况,很多人可能会感到焦虑和不知所措。但别担心,本文将为你提供几种方法,希望能帮助......
  • 2024免费看奈飞的方法分享,画镜播放器最强
    1、 反代服务器★★★将自己电脑设置为提供DNS服务,用反代理,修改host,用海外的IP进行播放,具体的,可以看不良林的视频方案盘点:好处是不用梯子,坏处是速度不稳定,清晰度无法保障,而且需要一定的电脑知识,普通用户需要大量的试错时间,另外账号也需要另行购买或者租用2、 画镜播放器★★......
  • .NET Emit 入门教程:第六部分:IL 指令:5:详解 ILGenerator 指令方法:创建实例指令
    前言:上上篇介绍了 IL 指令的分类以及参数加载指令,该加载指令以 Ld开头,将参数加载到栈中,以便于后续执行操作命令。上一篇介绍参数存储指令,其指令以St开头,将栈中的数据,存储到指定的变量中,以方便后续使用。本篇将介绍创建实例指令,其指令以New开头,用于在运行时动态生成并初......
  • Pyqt5-tools(安装失败解决方法)
    1.安装失败原因: 2022年2月目前pyqt5能在python3.10环境安装的成功的版本是5.15.6,而pyqt5-tools的最新版本是:pyqt5-tools5.15.4.3.2,因为python3.10只能安pyqt55.15.6,这就限制了pyqt5-tools安装会失败,最简单的办法是降低python的版本到3.9或3.8!安装pyqt6也一样解决不了,已......