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
/ #
相关推荐
张烫麻辣亮。1 小时前
【教程】使用docker+Dify搭建一个本地知识库
运维·docker·容器
不是笨小孩i1 小时前
如何使用Docker一键本地化部署LibrePhotos搭建私有云相册
运维·docker·容器
Dontla7 小时前
Docker run --add-host参数解析(在容器启动时向/etc/hosts文件中添加自定义的主机名与IP映射)(适用于临时调试或测试)
tcp/ip·docker·容器
西西小飞龙7 小时前
Docker和K8S中pod、services、container的介绍和关系
docker·容器·kubernetes
元气满满的热码式7 小时前
Docker数据卷操作实战
linux·运维·docker·云原生·容器
放情17 小时前
Ubutu部署WordPress
ubuntu·云原生
飞火流星0202718 小时前
docker安装etcd:docker离线安装etcd、docker在线安装etcd、etcd镜像下载、etcd配置详解、etcd常用命令、安装常见问题总结
docker·容器·etcd
you来有去20 小时前
记录一下在k3s快速创建gitlab
java·kubernetes·gitlab