我命由我,不由天!


  • 搜索
prometheus docker golang linux kubernetes

ConfigMap与Pod的关系

发表于 2020-11-26 | 分类于 kubernetes | 0 | 阅读次数 895

最近,想在生产环境使用k8s。但是涉及到多套环境,突如其来的想知道下configmap挂载的时机。
猜想:
configmap和pod的关系

  1. configmap更新会自动同步到pod里面
  2. configmap只是在pod创建的时候挂载,configmap后续不论怎么变化都是最初挂载的值

configmap和deployment的关系

  1. 创建deployment,后续所有pod都与创建deployment时的configmap相同
  2. deployment创建pod时,根据configmap当时的值挂载
  3. deployment创建的pod会随configmap变化而变化

怀着这疑问,做了下实验:
这是实验yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: game-demo
data:
  player_initial_lives: "3"
  ui_properties_file_name: "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
---
apiVersion: v1
kind: Pod
metadata:
  name: configmap-demo-pod
spec:
  containers:
    - name: demo
      image: alpine
      imagePullPolicy: IfNotPresent
      command: ["sleep", "3600"]
      env:
        - name: PLAYER_INITIAL_LIVES
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: player_initial_lives
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
      volumeMounts:
      - name: config
        mountPath: "/config"
        readOnly: true
  volumes:
    - name: config
      configMap:
        name: game-demo
        items:
        - key: "game.properties"
          path: "game.properties"
        - key: "user-interface.properties"
          path: "user-interface.properties"
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        env:
        - name: PLAYER_INITIAL_LIVES
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: player_initial_lives
        - name: UI_PROPERTIES_FILE_NAME
          valueFrom:
            configMapKeyRef:
              name: game-demo
              key: ui_properties_file_name
        volumeMounts:
        - name: config
          mountPath: "/config"
          readOnly: true
      volumes:
        - name: config
          configMap:
            name: game-demo
            items:
            - key: "game.properties"
              path: "game.properties"
            - key: "user-interface.properties"
              path: "user-interface.properties"

启动
image.png
image.png
验证pod,这时候的cm是3
image.png
改成4
image.png
image.png
pod结果还是3
image.png
所以pod中第二个猜想是正确的

验证deployment,当时cm是3,这时候cm已经改成4了但是没变
image.png
删除一个pod,红色为新生成的
image.png
进入新生产的pod,发现是4
image.png

结论:configmap是创建pod的时候挂载进去的,后续configmap不论怎么变化都不会影响已经创建好了的pod。

  • 本文作者: Dante
  • 本文链接: https://gaodongfei.com/archives/c-o-n-f-i-g-m-a-p-yu-p-o-d-de-guan-xi
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# kubernetes
Prometheues
kubernetes安装最新步骤 centos7
  • 文章目录
  • 站点概览
Dante

Dante

119 日志
5 分类
5 标签
RSS
Creative Commons
0%
© 2023 Dante
由 Halo 强力驱动
|
主题 - NexT.Pisces v5.1.4
沪ICP备2020033702号