欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

云原生要素配置分離ConfigMap創(chuàng)建方式

 更新時間:2022年03月18日 14:15:29   作者:丶重明  
這篇文章主要為大家介紹了云原生要素配置分離ConfigMap以及多種創(chuàng)建方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪

云原生要素-配置分離:ConfigMap&Secret

什么是ConfigMap

ConfigMap 是一種 API 對象,用來將非機密性的數(shù)據(jù)保存到鍵值對中。

舉一個例子更直觀的看出ConfigMap是什么:比如我有一個nginx的Pod資源,那么ConfigMap就相當于nginx.conf這個配置文件。

需要注意的是:這個 Pod 和 ConfigMap 必須要在同一個 命名空間 中,不可跨命名空間。

ConfigMap供容器使用的典型用法如下:

  • 生成容器內(nèi)的環(huán)境變量。
  • 設置容器啟動命令的啟動參數(shù)(需設置為環(huán)境變量)。
  • 以Volume的形式掛載為容器內(nèi)部的文件或目錄。

ConfigMap與Secret類似,更傾向于前者適用于明文配置,后者適用于密碼等配置。

ConfigMap的創(chuàng)建方式

configmap創(chuàng)建語法:

kubectl create configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run=server|client|none]
[options]

基于目錄/文件方式創(chuàng)建configmap

創(chuàng)建一個用于練習的目錄及文件,其中包含兩個用于測試的文件

[root@k8s-master01 ~]# mkdir /configmap
您在 /var/spool/mail/root 中有新郵件
[root@k8s-master01 ~]# cd /configmap/
[root@k8s-master01 configmap]# mkdir conf
[root@k8s-master01 configmap]# vim conf/test01.conf
[root@k8s-master01 configmap]# vim conf/test02.conf 
您在 /var/spool/mail/root 中有新郵件
[root@k8s-master01 configmap]# cat conf/test1.conf 
lives=3
name=haha
[root@k8s-master01 configmap]# cat conf/test2.conf 
color.good=yellow
user=mysql

創(chuàng)建一個cm(cm為configmap的縮寫),與創(chuàng)建其他資源類型一樣

[root@k8s-master01 configmap]# kubectl create configmap cmfile --from-file=conf/
[root@k8s-master01 configmap]# kubectl get cm
NAME               DATA   AGE
cmfile             2      13s
kube-root-ca.crt   1      21d
# 可以看到剛才創(chuàng)建的資源已經(jīng)成功了

我們可以查看一下生成的cm的yaml文件

[root@k8s-master01 configmap]# kubectl get cm cmfile -oyaml
apiVersion: v1
data:
  test1.conf: |
    lives=3
    name=haha
  test2.conf: |
    color.good=yellow
    user=mysql
kind: ConfigMap
metadata:
  creationTimestamp: "2022-02-23T02:50:40Z"
  name: cmfile
  namespace: default
  resourceVersion: "1050098"
  uid: 39b904c2-c1a4-442c-a6fe-6a3d89af36ac

找到data,可以看到data下內(nèi)容包含了之前測試創(chuàng)建的兩個文件及內(nèi)容

基于文件創(chuàng)建和目錄是相似的,只要加上目錄下的指定文件即可,比如:

[root@k8s-master01 configmap]# kubectl create cm cmfromfile --from-file=conf/test02.conf 

有一個不常用的地方,自定義configmap中的名稱

[root@k8s-master01 configmap]# vim test03.conf
[root@k8s-master01 configmap]# kubectl create cm test03 --from-file=test03-conf=test03.conf
configmap/test03 created
[root@k8s-master01 configmap]# kubectl get cm test03 -o yaml 
apiVersion: v1
data:
  test03-conf: |
    user=www
    passwd=123456
kind: ConfigMap
metadata:
  creationTimestamp: "2022-02-20T10:52:11Z"
  name: test03
  namespace: default
  resourceVersion: "914180"
  uid: 2f41ffa8-f200-48ee-8e61-729cfdf81b97

可以看到上面例子中的test03.conf已經(jīng)變成test03-conf格式了,這個了解即可。

基于env文件創(chuàng)建configmap

其實方式都一樣,不細寫了,看下創(chuàng)建方式:適用于較多的鍵值對

[root@k8s-master01 configmap]# kubectl create cm envfile --from-env-file=envfile.conf 
configmap/envfile created
[root@k8s-master01 configmap]# kubectl get cm envfile -o yaml 
apiVersion: v1
data:
  age: "25"
  hehe: haha
  name: yy
kind: ConfigMap
metadata:
  creationTimestamp: "2022-02-23T03:02:58Z"
  name: envfile
  namespace: default
  resourceVersion: "1051876"
  uid: 27a62b22-cd46-4dbe-bf12-6b34a67befe8
# 可以看到里面的等號換成冒號

基于literal直接創(chuàng)建configmap

比如我們只需要一兩個或很少的變量,沒有寫成文件的必要的時候可以用這種方式

[root@k8s-master01 configmap]# kubectl create cm literaltest --from-literal=PORT=8080 --from-literal=PASSWORD=123456 

基于yaml文件創(chuàng)建configmap

這種就不說了,這是官網(wǎng)上的一個示例,有興趣可以去看看

鏈接:https://kubernetes.io/zh/docs/concepts/configuration/configmap/

使用valueFrom定義環(huán)境變量

適合配置參數(shù)比較少的地方

我們先創(chuàng)建一個deploy資源方便測試,–dry-run的作用是只生成yaml文件而不創(chuàng)建資源

kubectl create deployment dp-cm --image=nginx --dry-run=client -o yaml > dp-cm.yaml

簡單修改一下后剩余的yaml文件

[root@k8s-master01 configmap]# cat dp-cm.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: dp-cm
  name: dp-cm
spec:
  replicas: 1
  selector:
    matchLabels:
      app: dp-cm
  strategy: {}
  template:
    metadata:
      labels:
        app: dp-cm
    spec:
      containers:
      - image: nginx
        name: nginx

我們分別添加一個傳統(tǒng)的環(huán)境變量和使用configmap定義一個

    spec:
      containers:
      - image: nginx
        name: nginx
        env:
        - name: TEST_ENV
          value: test_env
        - name: TEST_X
          valueFrom:
            configMapKeyRef:
              name: envfile
              key: hehe

env下第一個環(huán)境變量是我們按照傳統(tǒng)模式定義;第二個是在configmap中取值,先看一下效果

[root@k8s-master01 configmap]# kubectl create -f dp-cm.yaml 
deployment.apps/dp-cm created
[root@k8s-master01 configmap]# kubectl exec dp-cm-f8c48c84c-zvcwt -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=dp-cm-f8c48c84c-zvcwt
NGINX_VERSION=1.21.6
NJS_VERSION=0.7.2
PKG_RELEASE=1~bullseye
TEST_ENV=test_env
TEST_X=haha

最后兩個分別是我們直接定義的變量和引用configmap中的變量如果引用多個變量只需要在后面添加定義即可

        - name: TEST_X
          valueFrom:
            configMapKeyRef:
              name: envfile
              key: hehe
        - name: TEST_Y
          valueFrom:
            configMapKeyRef:
              name: envfile
              key: name              

注意:如果引用的變量不存在會報錯,Pod創(chuàng)建不成功

使用envfrom批量生成環(huán)境變量

    spec:
      containers:
      - image: nginx
        name: nginx
        envFrom:
        - configMapRef:
            name: envfile

更新一下Pod,然后看一下結果

[root@k8s-master01 configmap]# kubectl replace -f dp-cm.yaml 
deployment.apps/dp-cm replaced
[root@k8s-master01 configmap]# kubectl exec dp-cm-8565c44587-x8k62 -- env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=dp-cm-8565c44587-x8k62
NGINX_VERSION=1.21.6
NJS_VERSION=0.7.2
PKG_RELEASE=1~bullseye
age=25
hehe=haha
name=yy
TEST_ENV=test_env

可以看到后面三行小寫名稱的就是我們envfileconfigMap中的內(nèi)容

當一個Pod中變量有直接定義的也有從configMap定義時,我們可以加prefix前綴進行區(qū)分:

    spec:
      containers:
      - image: nginx
        name: nginx
        envFrom:
        - configMapRef:
            name: envfile
          prefix: fromCm_
        env:
        - name: TEST_ENV
          value: test_env

以文件形式掛載ConfigMap

我們事先創(chuàng)建了一個redis-conf的cm副本,然后掛載到下面文件的Pod中

    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: redisconf
          mountPath: /etc/config
      volumes:
      - name: redisconf
        configMap:
          name: redis-conf

上面這部分內(nèi)容中volumes下有兩個name,第一個是需要掛載到Pod的名稱,第二個是configMap的名稱,已經(jīng)做了區(qū)分了。執(zhí)行yaml文件,進入Pod內(nèi)部查看一下掛載情況

# 創(chuàng)建Pod
[root@k8s-master01 ~]# kubectl create -f dp-cm.yaml 
# 進入到Pod中查看掛載情況
[root@k8s-master01 ~]# kubectl exec -ti dp-cm-77b4666649-jd4sc -- bash
root@dp-cm-77b4666649-jd4sc:/# cd /etc/config/
root@dp-cm-77b4666649-jd4sc:/etc/config# ls
redis-conf
root@dp-cm-77b4666649-jd4sc:/etc/config# cat redis-conf 
hehe 123123
# 可以看到我們之前創(chuàng)建的文件已經(jīng)掛載好了

在線編輯cm文件內(nèi)容,掛載到Pod中的文件也會隨著更改

[root@k8s-master01 ~]# kubectl edit cm redis-conf 
[root@k8s-master01 ~]# kubectl get cm redis-conf -o yaml 
  redis-conf: |
    hehe 23412423412
[root@k8s-master01 ~]# kubectl exec -ti dp-cm-77b4666649-jd4sc -- bash
root@dp-cm-77b4666649-jd4sc:/# cat /etc/config/redis-conf 
hehe 23412423412
# Pod中的文件也隨著修改了

防止覆蓋操作

比如我們有一個nginx-conf的configMap要掛載到nginx的/etc/nginx目錄下,如果直接操作的話會發(fā)生覆蓋/etc/nginx下所有內(nèi)容,導致Pod報錯。
所以需要加上subPath來防止內(nèi)容會覆蓋,如下:

    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: nginxconf
          mountPath: /etc/nginx/nginx.conf
          subPath: nginx.conf  # 這樣只會對這一個文件進行覆蓋
      volumes:
      - name: nginxconf
        configMap:
          name: nginx-conf

自定義文件名與授權

使用item自定義文件名:相當于做一個軟連接

      volumes:
      - name: redisconf
        configMap:
          name: redis-conf
          items:
          - key: redis.conf
            path: redis2.conf

使用defaultMode給ConfigMap中文件進行權限管理

      volumes:
      - name: redisconf
        configMap:
          name: redis-conf
          items:
          - key: redis.conf
            path: redis2.conf
            mode: 0644 # 具體文件權限,優(yōu)先級高
          defaultMode: 0666 # configMap的默認權限

熱更新操作

如果是通過yaml文件創(chuàng)建的,只需要在yaml文件中修改,然后kubectl replace更新即可

如果是通過命令創(chuàng)建的話:

可以把cm導成yaml文件進行修改,然后更新,但是可能會出現(xiàn)錯誤,不建議。

還可以修改創(chuàng)建cm前使用的原始文件,比如nginx.conf文件,然后利用--dry-run=client生成一個yaml文件,然后進行更新。如下:

kubectl create cm nginx-conf --from-file=nginx.conf --dry-run=client -oyaml | kubectl replace -f -

使用限制

  • 需要提前創(chuàng)建ConfigMap或者Secret
  • 引用的Key必須存在
  • envFrom、valueFrom無法熱更新操作
  • envFrom配置環(huán)境變量,如果Key無效,會忽略無效的Key
  • 資源需要在同一個命名空間
  • subPath也是無法熱更新的

內(nèi)容不可變

ConfigMap或Secret中加入以下內(nèi)容,執(zhí)行后不可再修改資源

immutable: ture

以上就是配置分離:ConfigMap的詳細內(nèi)容,更多關于配置分離:ConfigMap的資料請關注腳本之家其它相關文章!

相關文章

  • kubernetes YAML文件的使用

    kubernetes YAML文件的使用

    這篇文章主要介紹了kubernetes YAML文件的使用,幫助大家更好的理解和學習使用kubernetes,感興趣的朋友可以了解下
    2021-04-04
  • 如何給k8s集群里的資源打標簽

    如何給k8s集群里的資源打標簽

    k8s集群,節(jié)點如果有多個角色,需要標記出來,可以給對應的節(jié)點打上標簽,方便后續(xù)了解節(jié)點的功能,這篇文章主要介紹了如何給k8s集群里的資源打標簽,需要的朋友可以參考下
    2023-02-02
  • kubernetes 使用jq命令對資源配置查看方式

    kubernetes 使用jq命令對資源配置查看方式

    這篇文章主要介紹了kubernetes 使用jq命令對資源配置查看方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 理解k8s控制器DaemonSet創(chuàng)建及使用場景

    理解k8s控制器DaemonSet創(chuàng)建及使用場景

    這篇文章主要為大家介紹了k8s控制器DaemonSet創(chuàng)建及使用場景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • IoT?邊緣集群Kubernetes?Events告警通知進一步配置詳解

    IoT?邊緣集群Kubernetes?Events告警通知進一步配置詳解

    這篇文章主要為大家介紹了IoT?邊緣集群Kubernetes?Events告警通知進一步配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • 淺談Spark RDD API中的Map和Reduce

    淺談Spark RDD API中的Map和Reduce

    rdd是什么?如何創(chuàng)建?什么是map和reduce?本文就這些問題向大家作了一些分析,供大家參考,如有不足,歡迎指出。
    2017-10-10
  • 詳解consul的安裝和配置

    詳解consul的安裝和配置

    這篇文章主要介紹了詳解consul的安裝和配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • kubernetes?k8s?CRD自定義資源學習筆記

    kubernetes?k8s?CRD自定義資源學習筆記

    這篇文章主要介紹了kubernetes?k8s?CRD自定義資源學習筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • Kubernetes?權限管理認證鑒權詳解

    Kubernetes?權限管理認證鑒權詳解

    這篇文章主要為大家介紹了Kubernetes?權限管理認證鑒權詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • tkestack/gpu-manager在k8s1.23版本之后的使用方法

    tkestack/gpu-manager在k8s1.23版本之后的使用方法

    這篇文章主要介紹了tkestack/gpu-manager在k8s1.23版本之后的使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04

最新評論