Kubernetes 之 ConfigMap

Kubernetes 之 ConfigMap

ConfigMap 定义

ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pod 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。通过使用 ConfigMap 可以将你的配置数据和应用程序代码分开。

ConfigMap 的创建

  1. 直接在命令行中指定 Config 参数创建,通过--from-literal指定参数

    shell 复制代码
    kubectl create configmap mysql-config --from-literal=MYSQL_PORT=3306 --from-literal=MYSQL_ROOT_PASSWORD=passwd
    root@k8s-master1:~# kubectl get cm/mysql-config
    NAME           DATA   AGE
    mysql-config   2      10s
    root@k8s-master1:~# kubectl describe cm/mysql-config
    Name:         mysql-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    MYSQL_PORT:
    ----
    3306
    MYSQL_ROOT_PASSWORD:
    ----
    passwd
    
    BinaryData
    ====
    
  2. 通过指定文件创建,先创建一个nginx.conf文件,然后通过--from-file指令创建

    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        server {
            listen       80;
            server_name  localhost;
    
            location / {
                root   /usr/share/nginx/html;
                index  index.html index.htm;
            }
        }
    }
    
    shell 复制代码
    kubectl create configmap nginx-config --from-file nginx/nginx.conf
    root@k8s-master1:~# kubectl describe cm/nginx-config
    Name:         nginx-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    nginx.conf:
    ----
    worker_processes  1;\r
    \r
    events {\r
        worker_connections  1024;\r
    }\r
    \r
    http {\r
        include       /etc/nginx/mime.types;\r
        default_type  application/octet-stream;\r
    \r
        server {\r
            listen       80;\r
            server_name  localhost;\r
    \r
            location / {\r
                root   /usr/share/nginx/html;\r
                index  index.html index.htm;\r
            }\r
        }\r
    }
    
    BinaryData
    ====
    
    Events:  <none>
    
  3. 通过指定文件夹创建,先创建一个nginx文件夹,再创建一个index.html文件,然后把index.html文件和nginx.conf文件移动到nginx文件夹下,然后通过--from-file指令创建

    html 复制代码
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Nginx Test</title>
    </head>
    <body>
    Hello World
    </body>
    </html>
    shell 复制代码
    kubectl create configmap nginx-config --from-file nginx/
    root@k8s-master1:~# kubectl describe cm/nginx-config
    Name:         nginx-config
    Namespace:    default
    Labels:       <none>
    Annotations:  <none>
    
    Data
    ====
    index.html:
    ----
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Nginx Test</title>
    </head>
    <body>
    Hello World
    </body>
    </html>
    nginx.conf:
    ----
    worker_processes  1;\r
    \r
    events {\r
        worker_connections  1024;\r
    }\r
    \r
    http {\r
        include       /etc/nginx/mime.types;\r
        default_type  application/octet-stream;\r
    \r
        server {\r
            listen       80;\r
            server_name  localhost;\r
    \r
            location / {\r
                root   /usr/share/nginx/html;\r
                index  index.html index.htm;\r
            }\r
        }\r
    }
    
    BinaryData
    ====
    
  4. 通过 yaml 文件的方式创建

    shell 复制代码
    kubectl create -f configmap-mysql-nginx.yaml
    root@k8s-master1:~# kubectl describe cm/configmap-mysql-nginx
    Name:         configmap-mysql-nginx
    Namespace:    default
    Labels:       app=configmap-mysql-nginx
    Annotations:  <none>
    
    Data
    ====
    MYSQL_PORT:
    ----
    3306
    MYSQL_ROOT_PASSWORD:
    ----
    passwd
    index.html:
    ----
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Nginx Test</title>
    </head>
    <body>
      Hello World
    </body>
    </html>
    
    nginx.conf:
    ----
    worker_processes  1;
    
    events {
      worker_connections  1024;
    }
    
    http {
      include       /etc/nginx/mime.types;
      default_type  application/octet-stream;
    
      server {
        listen       80;
        server_name  localhost;
    
        location / {
          root   /usr/share/nginx/html;
          index  index.html index.htm;
        }
      }
    }
    
    
    BinaryData
    ====
    
    Events:  <none>
    

ConfigMap 使用

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-configmap
spec:
  containers:
    - name: configmap-test
      image: busybox
      command: [ "/bin/sh", "-c", "sleep 3600" ]
      env:
      - name: MYSQL_PORT
        valueFrom:
          configMapKeyRef:
            name: configmap-mysql-nginx
            key: MYSQL_PORT
      - name: MYSQL_ROOT_PASSWORD
        valueFrom:
          configMapKeyRef:
            name: configmap-mysql-nginx
            key: MYSQL_ROOT_PASSWORD
      envFrom:
        - configMapRef:
            name: service-config
      volumeMounts:
        - name: volume-configmap
          mountPath: /etc/nginx
  volumes:
    - name: volume-configmap
      configMap:
        name: configmap-mysql-nginx
  restartPolicy: Never
root@k8s-master1:~# kubectl exec -it pod-configmap -- /bin/sh
/ # env
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=pod-configmap
SHLVL=1
HOME=/root
MYSQL_ROOT_PASSWORD=passwd
SERVICE_NAME=configmap-test
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
MYSQL_PORT=3306
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
/ # ls -al /etc/nginx/
total 12
drwxrwxrwx    3 root     root          4096 Jun  1 02:16 .
drwxr-xr-x    1 root     root          4096 Jun  1 02:16 ..
drwxr-xr-x    2 root     root          4096 Jun  1 02:16 ..2024_06_01_02_16_52.4048032045
lrwxrwxrwx    1 root     root            32 Jun  1 02:16 ..data -> ..2024_06_01_02_16_52.4048032045
lrwxrwxrwx    1 root     root            17 Jun  1 02:16 MYSQL_PORT -> ..data/MYSQL_PORT
lrwxrwxrwx    1 root     root            26 Jun  1 02:16 MYSQL_ROOT_PASSWORD -> ..data/MYSQL_ROOT_PASSWORD
lrwxrwxrwx    1 root     root            17 Jun  1 02:16 index.html -> ..data/index.html
lrwxrwxrwx    1 root     root            17 Jun  1 02:16 nginx.conf -> ..data/nginx.conf
/ #
相关推荐
大G哥1 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
feng_xiaoshi1 小时前
【云原生】云原生架构的反模式
云原生·架构
妍妍的宝贝1 小时前
k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载
nginx·微服务·kubernetes
大道归简2 小时前
Docker 命令从入门到入门:从 Windows 到容器的完美类比
windows·docker·容器
爱跑步的程序员~2 小时前
Docker
docker·容器
福大大架构师每日一题3 小时前
23.1 k8s监控中标签relabel的应用和原理
java·容器·kubernetes
程序那点事儿3 小时前
k8s 之动态创建pv失败(踩坑)
云原生·容器·kubernetes
疯狂的大狗3 小时前
docker进入正在运行的容器,exit后的比较
运维·docker·容器
长天一色3 小时前
【Docker从入门到进阶】01.介绍 & 02.基础使用
运维·docker·容器
叶北辰CHINA4 小时前
nginx反向代理,负载均衡,HTTP配置简述(说人话)
linux·运维·nginx·http·云原生·https·负载均衡