成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為啥有的ConfigMap要重啟Pod才生效

開發
本文總結了configMap使用的3種方式:env方式、envFrom方式、volumes方式。

在一般應用部署中,都是將程序和配置信息分離,這樣可以保證程序可以被各個環境復用。

在容器場景中,將應用打包成鏡像后,可以通過環境變量或者文件掛載的方式,在創建容器時把配置注入進去。

在Kubernetes場景中,則使用configMap實現應用與配置分離。使用configMap的方式有多種,有的方式修改了configMap的配置,無需重啟Pod即可生效,有的方式需要重啟Pod才生效。看看你用的是哪一種吧。

一、使用方式

使用configMap做程序和配置分離,那么首先就要定義configMap,然后部署configMap。

1.定義configMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: democm
  namespace: demo
data:
  db_name: demodb
  db_host: 172.19.132.23

configMap有3種使用方式:env方式 、envFrom方式 、volumes方式。

2.env方式

這種方式是將configMap的key-value注入到容器的環境變量里,程序里使用時,使用env里定義的name即可獲取到對應的值。使用方式如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm-1
  namespace: demo
  labels:
    app: pod-cm-1
spec:
  containers:
    - name: pod-cm-1
      image: busybox
      imagePullPolicy: IfNotPresent
      tty: true
      # 會出現在容器的環境變量里,程序里要使用env#name可以獲取到對應的值
      env:
        - name: db_name_app
          valueFrom:
            configMapKeyRef:
              name: democm
              key: db_name
        - name: db_host_app
          valueFrom:
            configMapKeyRef:
              name: democm
              key: db_host

3.envFrom方式

這種方式也是將configMap的key-value注入到容器的環境變量里,使用方法與env方式類似,只不過在程序使用時,是直接使用configMap定義的key,即可獲取到對應的值。使用方式如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm-2
  namespace: demo
  labels:
    app: pod-cm-2
spec:
  containers:
    - name: pod-cm-2
      image: busybox
      imagePullPolicy: IfNotPresent
      tty: true
      # 程序里使用configmap的key
      envFrom:
        - configMapRef:
            name: democm

4.volumes方式

這種方式是以卷掛載的方式,將configMap的key-value寫入到文件里,key是文件名,value是文件內容。

使用方式如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod-cm-3
  namespace: demo
  labels:
    app: pod-cm-3
spec:
  nodeName: k8s-worker-2
  containers:
    - name: pod-cm-3
      image: nginx
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 8080
      volumeMounts:
        - name: workdir
          mountPath: /usr/share/nginx/html
  volumes:
    - name: workdir
      configMap:
        name: democm
        optional: true

觀察volume卷下面的內容:

進入到容器的/usr/share/nginx/html目錄下,可以看到configMap定義的key-value會出現此目錄下,并且會有一個類似時間的文件。進入到文件夾里,可以看到對應的db_host和db_name文件。

如果configMap變化之后,對應的會生成新的文件:

二、實踐

1.編排部署configMap

編排部署configMap,查看部署后的configMap信息:

[root@k8s-master configmap]# kubectl apply -f configmap.yaml
configmap/democm created
[root@k8s-master configmap]# kubectl get cm -n demo
NAME     DATA   AGE
democm   2      11s
[root@k8s-master configmap]# kubectl describe cm democm -n demo
Name:         democm
Namespace:    demo
Labels:       <none>
Annotations:  <none>

Data
====
db_host:
----
172.19.132.23
db_name:
----
demodb
Events:  <none>

2.env方式

從這里可以看到env方式定義的yaml里的env已經被放入到容器的環境變量里的,只不過env里的值是從configMap里取的。

[root@k8s-master configmap]# kubectl exec -it pod-cm-1 -n demo -- /bin/sh
/ #
/ # evn
/bin/sh: evn: not found
/ # env
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=pod-cm-1
SHLVL=1
HOME=/root
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
db_host_app=172.19.132.23
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
db_name_app=demodb

3.envFrom方式

從這里可以看到envFrom方式是直接把configMap的key-value放入到容器的環境變量里的。

[root@k8s-master configmap]# kubectl apply -f pod_configmap_2.yaml
pod/pod-cm-2 created
[root@k8s-master configmap]# kubectl exec -it pod-cm-2 -n demo -- /bin/sh
/ #
/ # env
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=pod-cm-2
SHLVL=1
HOME=/root
db_name=demodb
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
db_host=172.19.132.23

4.volumes方式

這種方式可以看到,volumes方式并沒有把configMap的值放入到環境變量。

[root@k8s-master configmap]# kubectl apply -f pod_configmap_3.yaml
pod/pod-cm-3 created
[root@k8s-master configmap]# kubectl exec -it pod-cm-3 -n demo -- /bin/sh
# env
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=pod-cm-3
HOME=/root
PKG_RELEASE=1~bookworm
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
NGINX_VERSION=1.25.2
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
NJS_VERSION=0.8.0
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/

但是可以看到configMap的key-value被寫入到了文件里。

# cd /usr/share/nginx/html
# ls
db_host  db_name
# cat db_host
172.19.132.23
# cat db_name
demodb

5.修改configMap值

修改configMap值,然后重新部署configMap,繼續觀察這3種方式。

用命令kubectl exec -it pod-cm-xxxxxx -n demo -- /bin/sh進入到容器后,可以觀察到:

  • env方式和envFrom方式方式對應的值沒有變化,需要重啟Pod后才生效。
  • volumes方式的值會自動變化。

三、總結

本文總結了configMap使用的3種方式:env方式、envFrom方式、volumes方式。

env方式和envFrom方式方式說白了是往容器里注入了環境變量,在容器啟動的時候,就已經注入了,無法修改。每次修改configMap的key-value,需要重啟Pod才能生效。

volumes方式的方式,實際上把configMap的key-value寫入到了容器對應的volume卷下,而且每次configMap變更,都會把最新值寫入到volume卷下,這樣容器每次都能取到最新值。

責任編輯:趙寧寧 來源: 不焦躁的程序員
相關推薦

2017-03-13 13:54:40

戴爾

2023-10-19 19:42:25

IstioPodkubernetes

2019-05-14 09:05:16

SerializablJava對象

2022-11-29 10:33:15

Kubectl命令pod

2025-04-25 08:55:00

Pod運維

2021-01-29 09:01:25

低代碼軟件低代碼工具

2020-09-29 07:42:34

互聯網分層架構前后端分離

2017-11-06 08:41:53

互聯網分層架構前后端

2024-04-03 11:40:58

SYN服務器序號

2012-08-23 14:09:20

函數

2020-05-15 15:28:51

爬蟲Python學習

2022-06-28 14:19:38

Vue路由監控

2015-09-11 09:27:21

神經網絡發明

2011-04-21 13:29:18

惠普4500

2020-02-07 19:24:47

APP權限移動應用

2020-11-17 10:23:56

安全黑客網站

2015-05-07 14:58:06

編程每周工作80小時

2016-01-05 13:52:05

Kotlin掌握語言

2022-08-27 11:02:04

InnoDB數據庫索引

2021-09-14 15:29:22

數據分析電商報表
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 天天操网| 在线看国产| 一区二区三区四区视频 | 国产欧美日韩综合精品一区二区 | 狠狠干美女 | 黄色亚洲 | 国产视频中文字幕 | 在线观看日韩精品视频 | 国产精品久久久久无码av | 日韩中文一区二区三区 | 999热精品| 天天操夜夜操免费视频 | 精品一二区 | 午夜在线精品偷拍 | 亚洲欧美在线观看视频 | av高清 | 日本免费在线 | 成人在线播放网站 | 久草新在线| 在线看日韩av | 成人福利在线观看 | 黄色网址在线免费播放 | 看一级毛片视频 | 精品欧美一区二区三区久久久 | 成人a视频在线观看 | 欧美亚洲第一区 | 日韩中文字幕 | 亚洲美女一区二区三区 | 欧美一区二区久久 | 久久亚洲国产精品 | 综合网中文字幕 | 久久精品一 | 国产伦精品一区二区 | 国产黄色在线 | 免费av手机在线观看 | 亚洲视频不卡 | 精品国产一二三区 | 久久久91精品国产一区二区三区 | 亚洲国产一区二区三区在线观看 | 日韩中文字幕在线 |