学习笔记二十九:K8S配置管理中心Configmap实现微服务配置管理

这篇具有很好参考价值的文章主要介绍了学习笔记二十九:K8S配置管理中心Configmap实现微服务配置管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Configmap概述

Configmap是k8s中的资源对象,用于保存非机密性的配置的,数据可以用key/value键值对的形式保存,也可通过文件的形式保存。

Configmap能解决哪些问题?

我们在部署服务的时候,每个服务都有自己的配置文件,如果一台服务器上部署多个服务:nginx、tomcat、apache等,那么这些配置都存在这个节点上,假如一台服务器不能满足线上高并发的要求,需要对服务器扩容,扩容之后的服务器还是需要部署多个服务:nginx、tomcat、apache,新增加的服务器上还是要管理这些服务的配置,如果有一个服务出现问题,需要修改配置文件,每台物理节点上的配置都需要修改,这种方式肯定满足不了线上大批量的配置变更要求。 所以,k8s中引入了Configmap资源对象,可以当成volume挂载到pod中,实现统一的配置管理。

学习笔记二十九:K8S配置管理中心Configmap实现微服务配置管理,CKA学习笔记,学习,笔记,kubernetes

  • Configmap是k8s中的资源, 相当于配置文件,可以有一个或者多个Configmap;
  • Configmap可以做成Volume,k8s pod启动之后,通过 volume 形式映射到容器内部指定目录上;
  • 容器中应用程序按照原有方式读取容器特定目录上的配置文件。
  • 在容器看来,配置文件就像是打包在容器内部特定目录,整个过程对应用没有任何侵入。

Configmap应用场景

  • 使用k8s部署应用,当你将应用配置写进代码中,更新配置时也需要打包镜像,configmap可以将配置信息和docker镜像解耦,以便实现镜像的可移植性和可复用性,因为一个configMap其实就是一系列配置信息的集合,可直接注入到Pod中给容器使用。configmap注入方式有两种,一种将configMap做为存储卷,一种是将configMap通过env中configMapKeyRef注入到容器中。
  • 使用微服务架构的话,存在多个服务共用配置的情况,如果每个服务中单独一份配置的话,那么更新配置就很麻烦,使用configmap可以友好的进行配置共享。

局限性

  • ConfigMap在设计上不是用来保存大量数据的。在ConfigMap中保存的数据不可超过1 MiB。如果你需要保存超出此尺寸限制的数据,可以考虑挂载存储卷或者使用独立的数据库或者文件服务。

Configmap创建方法

命令行直接创建

直接在命令行中指定configmap参数创建,通过–from-literal指定参数

kubectl create configmap tomcat-config --from-literal=tomcat_port=8080 --from-literal=server_name=myapp.tomcat.com
kubectl describe configmap tomcat-config
Name:         tomcat-config
Namespace:    default
Labels:       <none>
Annotations:  <none>
Data
====
server_name:
----
myapp.tomcat.com
tomcat_port:
----
8080
Events:  <none>

通过文件创建

通过指定文件创建一个configmap,–from-file=<文件>

vim nginx.conf
server {
  server_name www.nginx.com;
  listen 80;
  root /home/nginx/www/
}
#定义一个key是www,值是nginx.conf中的内容
kubectl create configmap www-nginx --from-file=www=./nginx.conf
kubectl describe configmap www-nginx
Name:         www-nginx
Namespace:    default
Labels:       <none>
Annotations:  <none>

Data
====
www:
----
server {
  server_name www.nginx.com;
  listen 80;
  root /home/nginx/www/
}

指定目录创建configmap

mkdir test-a
cd test-a/
cat my-server.cnf 
server-id=1
cat my-slave.cnf 
server-id=2

指定目录创建configmap

kubectl create configmap mysql-config --from-file=/root/test-a/

查看configmap详细信息

kubectl describe configmap mysql-config
Name:         mysql-config
Namespace:    default
Labels:       <none>
Annotations:  <none>
Data
====
my-server.cnf:
----
server-id=1
my-slave.cnf:
----
server-id=2
Events:  <none>

编写configmap资源清单YAML文件

cat mysql-configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql
  labels:
    app: mysql
data:
  master.cnf: |
    [mysqld]
    log-bin
    log_bin_trust_function_creators=1
    lower_case_table_names=1
  slave.cnf: |
    [mysqld]
    super-read-only
    log_bin_trust_function_creators=1

使用Configmap

通过环境变量引入:使用configMapKeyRef

创建一个存储mysql配置的configmap

cat mysql-configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql
  labels:
    app: mysql
data:
    log: "1"
    lower: "1"
kubectl apply -f mysql-configmap.yaml

创建pod,引用Configmap中的内容

cat mysql-pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod
spec:
  containers:
  - name: mysql
    image: busybox
    command: [ "/bin/sh", "-c", "sleep 3600" ]
    env:
    - name: log_bin   #定义环境变量log_bin
      valueFrom: 
        configMapKeyRef:
          name: mysql     #指定configmap的名字
          key: log #指定configmap中的key
    - name: lower   #定义环境变量lower
      valueFrom:
        configMapKeyRef:
          name: mysql
          key: lower
  restartPolicy: Never
kubectl apply -f mysql-pod.yaml
kubectl exec -it mysql-pod -- /bin/sh
/ # printenv 
log_bin=1
lower=1

通过环境变量引入:使用envfrom

cat mysql-pod-envfrom.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod-envfrom
spec:
  containers:
  - name: mysql
    image: busybox
    imagePullPolicy: IfNotPresent
    command: [ "/bin/sh", "-c", "sleep 3600" ]
    envFrom: 
    - configMapRef:
       name: mysql     #指定configmap的名字
  restartPolicy: Never
kubectl apply -f mysql-pod-envfrom.yaml
kubectl exec -it mysql-pod-envfrom -- /bin/sh
/ # printenv
lower=1
log=1

把configmap做成volume,挂载到pod

cat mysql-configmap.yaml 
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql
  labels:
    app: mysql
data:
    log: "1"
    lower: "1"
    my.cnf: |
      [mysqld]
      Welcome=haha
kubectl apply -f mysql-configmap.yaml
cat mysql-pod-volume.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: mysql-pod-volume
spec:
  containers:
  - name: mysql
    image: busybox
    command: [ "/bin/sh","-c","sleep 3600" ]
    volumeMounts:
    - name: mysql-config
      mountPath: /tmp/config
  volumes:
  - name: mysql-config
    configMap:
      name: mysql
  restartPolicy: Never
kubectl apply -f mysql-pod-volume.yaml
kubectl exec -it mysql-pod-volume -- /bin/sh
/ # cd /tmp/config/
/tmp/config # ls
log    lower   my.cnf

Configmap热更新

kubectl edit configmap mysql
# 把logs: “1”变成log: “2”

学习笔记二十九:K8S配置管理中心Configmap实现微服务配置管理,CKA学习笔记,学习,笔记,kubernetes

kubectl exec -it mysql-pod-volume -- /bin/sh
/ # cat /tmp/config/log 
2

发现log值变成了2,更新生效了
更新 ConfigMap 后:使用该 ConfigMap 挂载的 Env 不会同步更新
使用该 ConfigMap 挂载的 Volume 中的数据需要一段时间(实测大概10秒)才能同步更新文章来源地址https://www.toymoban.com/news/detail-741746.html

到了这里,关于学习笔记二十九:K8S配置管理中心Configmap实现微服务配置管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 学习笔记三十一:k8s安全管理:认证、授权、准入控制概述SA介绍

    认证基本介绍:kubernetes主要通过APIserver对外提供服务,那么就需要对访问apiserver的用户做认证,如果任何人都能访问apiserver,那么就可以随意在k8s集群部署资源,这是非常危险的,也容易被黑客攻击渗透,所以需要我们对访问k8s系统的apiserver的用户进行认证,确保是合法的符

    2024年02月06日
    浏览(31)
  • 商城-学习整理-集群-K8S-集群环境部署(二十四)

    MySQL-MMM是Master-MasterReplicationManagerforMySQL(mysql主主复制管理器)的简称,是Google的开源项目。 (Perl脚本)。MMM基于MySQL Replication做的扩展架构,主要用来监控mysql主主复制并做失败转移。其原理是将真实数据库节点的IP(RIP)映射为虚拟IP(VIP)集。mysql-mmm的监管端会提供多个

    2024年02月11日
    浏览(35)
  • 【K8S 】K8S配置资源管理

    1、概念 用来保存密码。token,敏感的K8S资源 这类数据可以直接存放在镜像中,但是放在Secret中可以更方便的控制,减少暴露的风险 Secret:保存加密的信息 2、Secret类型: docker-registry:存储docker仓库的认证信息,以及docker的组件认证信息(私有) generic:是Secret的默认模式,

    2024年01月17日
    浏览(35)
  • k8s-配置与存储-配置管理

    在前面已经提到,容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,kubernetes引入了Volume的概念。 Volume是Pod中能够被多个容器访问的共

    2024年02月21日
    浏览(27)
  • K8S学习指南(49)-k8s的证书管理

    Kubernetes(K8s)是一款开源的容器编排平台,具有强大的集群管理和安全机制。在Kubernetes集群中,证书管理是一个关键的安全组成部分,用于保障集群通信的安全性和可信度。本文将深入讨论Kubernetes中的证书管理,包括证书的生成、颁发、续期以及如何在实际应用中进行合理

    2024年01月17日
    浏览(30)
  • k8s学习笔记(二):k8s的组件介绍

    Master:是 集群的网关和中枢枢纽 ,主要作用: 暴露API接口,跟踪其他服务器的健康状态、以最优方式调度负载,以及编排其他组件之间的通信 。单个的Master节点可以完成所有的功能,但是考虑单点故障的痛点,生产环境中通常要部署多个Master节点,组成Cluster。包括所有的

    2024年02月04日
    浏览(35)
  • (五)k8s实战-配置管理

    使用 kubectl create configmap -h 查看示例,构建 configmap 对象 案例1:使用键值对类型的ConfigMap 添加到env文件内 使用: 案例2:使用文件类型的ConfigMap 添加到指定目录内 使用: 与 ConfigMap 类似,用于存储配置信息,但是主要用于存储敏感信息、需要加密的信息,Secret 可以提供数据

    2024年02月11日
    浏览(28)
  • k8s---配置资源管理

    目录 内容预知 secret资源配置 secert的几种模式 pod如何来引用secret 陈述式创建secret 声明式+base64编码配置secret 将secret用vlumes的方式挂载到pod中 传参的方式将环境变量导入pod 如何通过secret加密方式获取仓库密码 configmap的资源配置 陈述式创建configmap资源配置 声明式配置configma

    2024年01月21日
    浏览(41)
  • k8s配置资源管理

    Secret Configmap Secret :保存密码,token,敏感的k8s资源 这类数据可以存放在镜像当中,但是防止secret当中可以更方便控制,减少暴露的风险 保存加密的信息 Docker-registry: 存储docker仓库认证信息,以及docker组件认证成功(私有) Generic: 是secret的默认模式,opaque base64加密编码的

    2024年01月21日
    浏览(40)
  • k8s- 配置资源管理

    配置资源管理 //Secret Secret 是用来保存密码、token、密钥等敏感数据的 k8s 资源,这类数据虽然也可以存放在 Pod 或者镜像中,但是放在 Secret 中是为了更方便的控制如何使用数据,并减少暴露的风险。 Secret 有四种类型:  ●kubernetes.io/service-account-token:由 Kubernetes 自动创建,

    2024年02月16日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包