【Kubernetes资源篇】ConfigMap配置管理中心详解

这篇具有很好参考价值的文章主要介绍了【Kubernetes资源篇】ConfigMap配置管理中心详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、ConfigMap配置中心理论知识

1、ConfigMap配置中心简介

官方中文参考文档:

ConfigMap是API对象,用于存放明文(非机密性)数据保存到键值对中,可以使用环境变量、命令行参数或者存储卷方式应用到Pod中,ConfigMap相当于Pod中程序的配置文件,通过修改ConfigMap内容来修改程序的配置。

2、ConfigMap局限性

ConfigMap在设计上不是用来存储大量数据的,所以在ConfigMap中保存的数据不能超过1MiB。

二、创建ConfigMap的四种方式

1、第一种:通过命令行创建ConfigMap

创建 名为 mysql.conf 的 configmap

kubectl create configmap mysql.conf --from-literal=datadir=/var/lib/mysql --from-literal=socket=/var/lib/mysql/mysql.sock

查看 configmap详细信息:

kubectl describe cm  mysql.conf

【Kubernetes资源篇】ConfigMap配置管理中心详解,# 3-Kubernetes容器编排,kubernetes,容器,云原生,configmap

2、第二种:通过指定文件创建ConfigMap

首先创建nginx.conf文件,针对nginx.conf文件创建configmap

vim nginx.conf

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

创建 名为 nginx.conf 的 configmap,使用--from-file 参数指定文件位置

kubectl create configmap nginx.conf --from-file=www=./nginx.conf

查看详细信息:定义key=www,value=./nginx.conf 中的内容

kubectl describe cm nginx.conf

【Kubernetes资源篇】ConfigMap配置管理中心详解,# 3-Kubernetes容器编排,kubernetes,容器,云原生,configmap

3、第三种:通过指定目录创建ConfigMap

首先创建config目录,目录中创建nginx、mysql配置文件,使用--from-file参数指定config目录。

mkdir config && cd config

vim nginx.conf

user  nginx;
worker_processes  auto;
error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    keepalive_timeout  65;
    include /etc/nginx/conf.d/*.conf;
}

vim my.cnf

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
!includedir /etc/my.cnf.d

指定 config 目录创建 configmap

kubectl create cm config --from-file=./config

查看详细信息:key会以目录中文件名进行命名

kubectl describe cm config

【Kubernetes资源篇】ConfigMap配置管理中心详解,# 3-Kubernetes容器编排,kubernetes,容器,云原生,configmap

4、第四种:通过YAML资源清单创建ConfigMap

创建 db-config configmap,定义master.cnf ,slave.cnf Key

cat db-config.yaml 
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: db-config
  labels:
    app: db
data:
  master.cnf: |
   [mysqld]
   datadir=/var/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   symbolic-links=0
   server-id=1
  slave.cnf: |
   [mysqld]
   datadir=/var/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   symbolic-links=0
   server-id=2

执行YAML文件:

kubectl apply -f db-config.yaml

查看db-config configmap详细信息:

kubectl describe cm db-config

【Kubernetes资源篇】ConfigMap配置管理中心详解,# 3-Kubernetes容器编排,kubernetes,容器,云原生,configmap

三、使用ConfigMap的三种方式

上面是通过key/value方式定义配置文件信息,下面来学习一下,如何引用配置文件。

1、第一种:使用环境变量引入-configMapKeyRef方式

创建名为nginx-config 的configmap:

cat nginx-config.yaml 
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
  labels:
    app: nginx
    env: uat
data:
  nginx.conf: |
    user  nginx;
    worker_processes  auto;
    error_log  /var/log/nginx/nginx-error.log notice;
    pid        /var/run/nginx.pid;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
        access_log  /var/log/nginx/access.log  main;
        sendfile        on;
        keepalive_timeout  65;
        include /etc/nginx/conf.d/*.conf;
    }
     

创建deployment资源,容器中引用nginx-config configmap的nginx.conf Key

cat web-nginx.yaml 

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-nginx
  labels:
    app: nginx
    env: uat
spec:
  replicas: 1
  selector:          # 关联标签
    matchLabels:
      app: nginx
      env: uat
  strategy:
    rollingUpdate:   # 更新策略
      maxSurge: 2
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: nginx
        env: uat
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        env:
        - name: nginxConfig    # 定义环境变量名称
          valueFrom:
            configMapKeyRef:
              name: nginx-config # 指定configmap名称
              key: nginx.conf    # 指定configmap中Key

执行YAML文件:

kubectl apply -f nginx-config.yaml
kubectl apply -f  web-nginx.yaml 

查看创建出来的资源信息:

kubectl get pods -l app=nginx
kubectl get configmap nginx-config

进入 被创建Pod中容器,查看变量信息:

kubectl exec -it web-nginx-84989c5546-6clp4  -- /bin/bash
printenv

【Kubernetes资源篇】ConfigMap配置管理中心详解,# 3-Kubernetes容器编排,kubernetes,容器,云原生,configmap

我们可以在创建Pod资源时使用command,来引用变量,进行启动操作,比如下面启动MongoDB操作。

command: ["/bin/mongod", "--bind_ip=$(变量名)"]

2、第二种:使用环境变量引入-envfrom方式

创建名为mysql-config 的configmap,其中定义了两个KEY

cat mysql-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
data:
  master.cnf: |
   [mysqld]
   datadir=/var/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   symbolic-links=0
   server-id=1
  slave.cnf: |
   [mysqld]
   datadir=/var/lib/mysql
   socket=/var/lib/mysql/mysql.sock
   symbolic-links=0
   server-id=2

创建Deployment,通过envfrom方式指定configmap,这种方式会引用configmap中所有的KEY为系统变量,由于只是演示envFrom方式特性,所有我这边使用 busybox 镜像演示,YAML资源清单如下:

cat envfrom_demo.yaml 

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: envfrom-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      name: envfrom-demo
  template:
    metadata:
      labels:
        name: envfrom-demo
    spec:
      containers:
      - name: envfrom-demo
        image: busybox:1.28.0
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 360000"]
        envFrom:
        - configMapRef:
            name: mysql-config    # 指定configmap名称

执行YAML文件:

kubectl apply -f mysql-config.yaml 
kubectl apply -f envfrom_demo.yaml 

查看创建出来的资源信息:

kubectl get pods -l name=envfrom-demo
kubectl get configmap mysql-config

进入容器查看变量信息:

kubectl exec -it envfrom-demo-6cf79bf4bc-4xvcc -- /bin/sh
printenv

【Kubernetes资源篇】ConfigMap配置管理中心详解,# 3-Kubernetes容器编排,kubernetes,容器,云原生,configmap

3、第三种:使用volume卷挂载

前两种都是使用环境变量方式引用配置的不会经常使用,最常用的还是使用卷挂载方式!

创建名为web的configmap,定义了两个KEY,分别为:nginx_8080.conf、nginx_9090.conf

cat web-config.yaml 
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: web
data:
  nginx_8080.conf: |
    server {
    listen 8080;
     location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
         }
    }
  nginx_9090.conf: |
    server {
    listen 9090;
     location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
         }
    }

使用nginx镜像,创建Deployment,并使用挂载configmap

cat web.yaml 

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-nginx
spec:
  replicas: 1
  selector:      
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      volumes:
      - name: web-config
        configMap:           # 定义卷,使用名为web的configmap
          name: web
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        volumeMounts:
        - name: web-config  # 挂载卷
          mountPath: /etc/nginx/conf.d/nginx_9090.conf   # 挂载路径
          subPath: nginx_9090.conf  # 只挂载configmap中的nginx_9090.confkey

执行YAML资源清单:

kubectl apply -f web-config.yaml
kubectl apply -f web.yaml

我将配置文件端口改为9090了,我们请求Nginx的9090端口,作为验证:

kubectl get pods -o wide
curl 10.244.235.234:9090

【Kubernetes资源篇】ConfigMap配置管理中心详解,# 3-Kubernetes容器编排,kubernetes,容器,云原生,configmap

OK,上面可以成功通过9090端口访问到nginx。

四、拓展知识

1、编辑ConfigMap

kubectl edit cm web

编辑并保存后,对于卷挂载方式,支持热加载(大约等10s)生效,会更新到容器配置中,但对于变量方式并不支持,需要重新删除创建,更改的数据才会生效。

2、删除ConfigMap

kubectl delete cm web

3、configMapKeyRef和envfrom方式引入变量区别?文章来源地址https://www.toymoban.com/news/detail-545009.html

  • configMapKeyRef是一种将ConfigMap中的数据作为环境变量注入到容器中的方式。它允许你在Pod的定义中引用ConfigMap中的特定键值对,并将其作为环境变量传递给容器。这种方式适用于将ConfigMap中的配置数据直接暴露给容器内的应用程序。
  • envFrom是一种将整个ConfigMap的数据作为环境变量注入到容器中的方式。它允许你在Pod的定义中引用一个或多个ConfigMap,并将它们的所有键值对作为环境变量传递给容器。这种方式适用于将多个相关的配置数据一次性注入到容器内。

到了这里,关于【Kubernetes资源篇】ConfigMap配置管理中心详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S:配置资源管理 Secret和configMap

    (1)Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 secret 中是为了更方便的控制如何使用数据,并减少暴露的风险 (2)类似挂载的方式,使用的时候调用即可 ①kubernetes.io/service-account-token 由Kubernetes自动创建

    2024年02月03日
    浏览(58)
  • Kubernetes配置 Pods 和容器—调整分配给容器的 CPU 和内存资源

    本页说明如何在不重启 Pod 或其容器的情况下调整分配给运行中 Pod 容器的 CPU 和内存资源。 Kubernetes 节点会基于 Pod 的  requests  为 Pod 分配资源, 并基于 Pod 的容器中指定的  limits  限制 Pod 的资源使用。 对于原地调整 Pod 资源而言: 针对 CPU 和内存资源的容器的  requests  和

    2024年02月13日
    浏览(46)
  • Kubernetes配置 Pods 和容器—将 Docker Compose 文件转换为 Kubernetes 资源

    你必须拥有一个 Kubernetes 的集群,同时你必须配置 kubectl 命令行工具与你的集群通信。 建议在至少有两个不作为控制平面主机的节点的集群上运行本教程。 我们有很多种方式安装 Kompose。首选方式是从最新的 GitHub 发布页面下载二进制文件。 Kompose 通过 GitHub 安装 只需几步,

    2024年02月12日
    浏览(49)
  • 飞天使-k8s知识点12-kubernetes资源对象5-Volume与ConfigMap等

    为什么需要volume ConfigMap Volume nfs挂载volume 持久卷的痛点 参考文档: 作者:又拍云 链接:https://juejin.cn/post/7186925237592653884 来源:稀土掘金

    2024年01月18日
    浏览(51)
  • Kubernetes ConfigMap - Secret - 使用ConfigMap来配置 Redis

    目录 ConfigMap : 参考文档:k8s -- ConfigMap - 简书 (jianshu.com)    K8S ConfigMap使用 - 知乎 (zhihu.com) ConfigMap的作用类型: 可以作为卷的数据来源:使用 ConfigMap 来配置 Redis | Kubernetes 可以基于文件创建 ConfigMap:配置 Pod 使用 ConfigMap | Kubernetes 可以基于目录创建 ConfigMap:配置 Pod 使用

    2024年02月15日
    浏览(39)
  • 【Kubernetes 系列】详解 ConfigMap 九种创建方式

    作者:半身风雪 上一节:配置 Java 微服务 内容简介:上一节主要学习使用 Kubernetes ConfigMaps 和 Secrets 设置环境变量,本节我们将学习,创建ConfigMap 的10种方式。 很多应用在其初始化或运行期间要依赖一些配置信息。大多数时候, 存在要调整配置参数所设置的数值的需求。

    2024年01月17日
    浏览(54)
  • Kubernetes系列-配置存储 ConfigMap & Secret

    在部署应用程序时,我们都会涉及到应用的配置,在容器中,如Docker容器中,如果将配置文件打入容器镜像,这种行为等同于写死配置,每次修改完配置,镜像就得重新构建。当然,我们也可以通过挂载包含该文件的卷进行配置管理和修改。而在k8s中,我们要讲一种更好的方

    2024年02月14日
    浏览(43)
  • kubernetes/k8s配置资源管理

    配置资源管理 Secret Configmap*.1.2加入新特征 1.18 Secret:保存密码,token,敏感的k8s资源 这类数据可以存放在镜像当中,但是防止secret可以更方便的控制,减少暴漏风险。 保存加密的信息 Secret的类型: docker-registry:存储docker仓库认证信息,以及docker组件的认证信息(私有的) generic:是

    2024年01月17日
    浏览(52)
  • 【Kubernetes资源篇】StatefulSet无状态服务管理入门实战详解

    官方中文参考文档 1、StatefulSet Pod控制器特性 StatefulSet(简写sts)也是K8S集群中的一种Pod资源管理器,与deployment Pod控制器不同的是,StatefulSet用于管理无状态程序,特性如下: 稳定的网络标识符:管理的Pod都拥有一个稳定的网络标识符。可以通过网络标识符进行访问。 有序部署

    2024年02月13日
    浏览(38)
  • 云原生Kubernetes:K8S配置资源管理

    目录 一、理论 1.Secret 2.Secret创建 3.Secret使用 4.Configmap 5.Configmap创建 6.Configmap使用 二、实验 1.Secret创建 2.Secret使用 3.Configmap创建 4.Configmap使用 三、问题 1.变量引用生成资源报错 2.查看pod日志失败 3.创建configmap报错 4.YAML创建configmap报错 5. 生成资源报错 6.文件挂载pod报错Error 四

    2024年02月07日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包