美文网首页
configmMap

configmMap

作者: 会倒立的香飘飘 | 来源:发表于2021-04-01 16:40 被阅读0次

    一,configMap

    ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。

    ConfigMap 将您的环境配置信息和 容器镜像 解耦,便于应用配置的修改。

    注意:

    ConfigMap 并不提供保密或者加密功能。 如果你想存储的数据是机密的,请使用 Secret, 或者使用其他第三方工具来保证你的数据的私密性,而不是用 ConfigMap。

    ConfigMap 对象

    ConfigMap 是一个 API 对象, 让你可以存储其他对象所需要使用的配置。 和其他 Kubernetes 对象都有一个 spec 不同的是,ConfigMap 使用 databinaryData 字段。这些字段能够接收键-值对作为其取值。databinaryData 字段都是可选的。data 字段设计用来保存 UTF-8 字节序列,而 binaryData 则 被设计用来保存二进制数据作为 base64 编码的字串。

    ConfigMap 的名字必须是一个合法的 DNS 子域名

    databinaryData 字段下面的每个键的名称都必须由字母数字字符或者 -_. 组成。在 data 下保存的键名不可以与在 binaryData 下 出现的键名有重叠。

    从 v1.19 开始,你可以添加一个 immutable 字段到 ConfigMap 定义中,创建 不可变更的 ConfigMap

    创建一个configmap

    使用命令行创建configmap
    使用kubectl create configmap -h 查看

    Examples:
      # Create a new configmap named my-config based on folder bar
      kubectl create configmap my-config --from-file=path/to/bar
      
      # Create a new configmap named my-config with specified keys instead of file basenames on disk
      kubectl create configmap my-config --from-file=key1=/path/to/bar/file1.txt
    --from-file=key2=/path/to/bar/file2.txt
      
      # Create a new configmap named my-config with key1=config1 and key2=config2
      kubectl create configmap my-config --from-literal=key1=config1 --from-literal=key2=config2
      
      # Create a new configmap named my-config from the key=value pairs in the file
      kubectl create configmap my-config --from-file=path/to/bar
      
      # Create a new configmap named my-config from an env file
      kubectl create configmap my-config --from-env-file=path/to/bar.env
    
    
    直接给定键值
    root@master:~# kubectl create configmap nginx-config --from-literal=nginx_port=8080 --from-literal=server_name=myapp.linux.com
    configmap/nginx-config created
    

    查看comfigmap

    root@master:~# kubectl get cm
    NAME           DATA   AGE
    nginx-config   2      85s
    
    root@master:~# kubectl describe cm nginx-config 
    Name:         nginx-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    nginx_port:
    ----
    8080
    server_name:
    ----
    myapp.linux.com
    Events:  <none>
    
    使用文件创建

    简单创建一个文件

    root@master:~# cat www.conf 
    server {
           server_name myapp.linux.com;
           listen 80;
           root /data/web/html/;
    }
    

    创建configmap

    root@master:~# kubectl create configmap nginx-www --from-file=./www.conf 
    #注:
    --from-file=./www.conf
    这里也会被组织成键值数据可以是  --from-file=www=./www.conf 也这里键就是www值就是文件类容 可以是--from-file=./www.conf 这里不指定键文件名当键文件内容当值
    root@master:~# kubectl get cm
    NAME           DATA   AGE
    nginx-config   2      17m
    nginx-www      1      6m3s
    查看cm详细内容
     root@master:~# kubectl describe cm nginx-www 
    Name:         nginx-www
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    www.conf:
    ----
    server {
           server_name myapp.linux.com;
           listen 80;
           root /data/web/html/;
    }
    
    Events:  <none>
    
    
    使用环境变量的方式引用configmap
    vim config-pod.yaml 
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-config-1
      namespace: default
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
        env:
        - name: NGINX_SERVER_PORT
          valueFrom:
            configMapKeyRef:
              name: nginx-config
              key: nginx_port
        - name: NGINX_SERVER_NAME
          valueFrom: 
            configMapKeyRef:
              name: nginx-config
              key: server_name
    root@master:~# kubectl apply -f config-pod.yaml 
    root@master:~# kubectl get pods 
    NAME           READY   STATUS    RESTARTS   AGE
    pod-config-1   1/1     Running   0          101s
    登录到pod中查看变量
    root@master:~# kubectl exec -it  pod-config-1 -- /bin/sh
    / # env
    MYAPP_SVC_PORT_80_TCP_ADDR=10.98.57.156
    KUBERNETES_PORT=tcp://10.96.0.1:443
    KUBERNETES_SERVICE_PORT=443
    MYAPP_SVC_PORT_80_TCP_PORT=80
    HOSTNAME=pod-config-1
    SHLVL=1
    MYAPP_SVC_PORT_80_TCP_PROTO=tcp
    HOME=/root
    NGINX_SERVER_PORT=8080  #看这里已经传递进来了
    NGINX_SERVER_NAME=myapp.linux.com
    MYAPP_SVC_PORT_80_TCP=tcp://10.98.57.156:80
    TERM=xterm
    NGINX_VERSION=1.12.2
    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
    MYAPP_SVC_SERVICE_HOST=10.98.57.156
    KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
    KUBERNETES_SERVICE_PORT_HTTPS=443
    PWD=/
    KUBERNETES_SERVICE_HOST=10.96.0.1
    MYAPP_SVC_SERVICE_PORT=80
    MYAPP_SVC_PORT=tcp://10.98.57.156:80
    
    

    如果使用edit修改了configmap Pod里的变量是不会改变的,因为pod是创建时引用的环境变量,使用存储卷的方式是可以实时更新的,

    使用存储卷的方式传递
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-config-2
      namespace: default
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1
        ports:
        - name: http
          containerPort: 80
        volumeMounts:
        - name: nginxconf
          mountPath: /etc/nginx/config.d
          readOnly: true
      volumes:
      - name: nginxconf
        configMap:
          name: nginx-config 
    

    创建pod

    kubectl apply -f config-pod-2.yaml
    

    查看pod

    root@master:~# kubectl get pods
    NAME           READY   STATUS    RESTARTS   AGE
    pod-config-2   1/1     Running   0          2m55s
    

    登录到pod中查看:

    root@master:~# kubectl exec -it pod-config-2 -- /bin/sh
    
    / # cd /etc/nginx/config.d/
    /etc/nginx/config.d # ls -l 
    total 0
    lrwxrwxrwx    1 root     root            17 Mar 29 07:30 nginx_port -> ..data/nginx_port
    lrwxrwxrwx    1 root     root            18 Mar 29 07:30 server_name -> ..data/server_name
    /etc/nginx/config.d # cat nginx_port 
    8080/etc/nginx/config.d # 
    

    使用edit修改configmap

    root@master:~# kubectl edit cm nginx-config 
    configmap/nginx-config edited
    root@master:~# kubectl describe cm nginx-config 
    Name:         nginx-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    nginx_port:
    ----
    8085
    server_name:
    ----
    myapp.linux.com
    Events:  <none>
    
    

    在登陆pod查看已经修改了

    root@master:~# kubectl exec -it pod-config-2 -- /bin/sh
    / # cd /etc/nginx/config.d/
    /etc/nginx/config.d # ls 
    nginx_port   server_name
    /etc/nginx/config.d # cat nginx_port 
    8085/etc/nginx/config.d # 
    

    相关文章

      网友评论

          本文标题:configmMap

          本文链接:https://www.haomeiwen.com/subject/cqryhltx.html