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
/ #
相关推荐
L02082421 小时前
Kubernetes Ingress|CNI 网络模型|Calico 网络策略|Pod 调度器完整实战教程
运维·网络·云原生·容器·kubernetes
吴声子夜歌1 天前
Kubernetes权威指南——Kubernetes安装配置指南(网络配置)
网络·容器·kubernetes
闲云野鹤在人间1 天前
Kubernetes Pod Scheduler 详解
云原生·容器·kubernetes
刘马想放假1 天前
Copyparty 轻量文件共享:Docker Compose 部署、权限与多协议使用全指南
docker·容器
切糕师学AI1 天前
Kubernetes 探针全解析:启动探针、存活探针与就绪探针(Startup/Liveness/Readiness Probe)
容器·kubernetes·探针·probe
xianyuCcCcCCCcc1 天前
Kubernetes :健康检查、认证授权与可视化面板
运维·云原生·kubernetes·dashboard
fb_123451 天前
K8s调度实战全景-Pod调度与资源管控
云原生·容器·kubernetes
吴声子夜歌1 天前
Kubernetes权威指南——Kubernetes安装配置指南(二进制文件安装)
容器·kubernetes
江华森1 天前
Kubernetes集群部署实战:使用kubeadm在4台ECS服务器上搭建K8s v1.31集群
云原生·容器·kubernetes