【微服务部署】02-配置管理

news/2024/5/19 23:39:58 标签: 微服务, .netcore, 后端, 开发语言

文章目录

    • 1.ConfigMap
      • 1.1 创建ConfigMap方式
      • 1.2 使用ConfigMap的方式
      • 1.3 ConfigMap使用要点建议
    • 2 分布式配置中心解决方案
      • 2.1 什么时候选择配置中心
      • 2.2 Apollo配置中心系统的能力
        • 2.2.1 Apollo创建配置项目
        • 2.2.2 项目使用
        • 2.2.3 K8s中使用Apollo

1.ConfigMap

ConfigMap是K8s提供的内置的配置管理的方案

1.1 创建ConfigMap方式

  • 从文件夹创建
  • 从文件创建
  • 从键值对 ⇒ 提供一个键值对的文件,将键值对的文件内容作为ConfigMap的Key和Value

1.2 使用ConfigMap的方式

  • 映射为文件 ⇒ 将ConfigMap的Key的value映射为文件
  • 映射为环境变量
  • 映射为命令行参数

1.3 ConfigMap使用要点建议

  • 版本化管理配置文件,以支持快速回滚
  • 共享配置使用环境变量注入

ConfigMap的创建脚本代码

// 创建ConfigMap映射
kubectl create configmap geektime-ordering-api-config --from-file=geektime-ordering-api/configs -o yaml --dry-run | kubectl apply -f - 
kubectl create configmap geektime-identity-api-config --from-file=geektime-identity-api/configs -o yaml --dry-run | kubectl apply -f - 
kubectl create configmap geektime-mobile-apiaggregator-config --from-file=geektime-mobile-apiaggregator/configs -o yaml --dry-run | kubectl apply -f - 
kubectl create configmap geektime-config --from-env-file=env.txt -o yaml --dry-run | kubectl apply -f - 
kubectl create configmap geektime-mobile-gateway-config --from-file=geektime-mobile-gateway/configs -o yaml --dry-run | kubectl apply -f - 
kubectl create configmap geektime-healthcheckshost-config --from-file=geektime-healthcheckshost/configs -o yaml --dry-run | kubectl apply -f - 

helm install geektime-ordering-api .\charts\geektime-ordering-api -n default
helm install geektime-identity-api .\charts\geektime-identity-api -n default
helm install geektime-mobile-apiaggregator .\charts\geektime-mobile-apiaggregator -n default
helm install geektime-mobile-gateway .\charts\geektime-mobile-gateway -n default
helm install geektime-healthcheckshost  .\charts\geektime-healthcheckshost -n default

"Any key to exit"  ;
Read-Host | Out-Null ;
Exit

create configmap geektime-ordering-api-config 创建名为geektime-ordering-api-config的ConfigMap
from-file指定一个目录,将该目录下的所有文件的文件名做为Key,文件内容为Value映射到ConfigMapp中

–from-env-file=env.txt -o yaml --dry-run | kubectl apply -f - 通过Key-Value键值对方式创建ConfigMap,比较使用用于定义公共的环境变量

ConfigMap的使用
定义了两种方式使用ConfigMap的方式,一种是将其映射到环境变量中,

env:
    - name: ENV_ABC // 环境变量映射方式
      valueFrom:
        configMapKeyRef:
          name: geektime-config
          key: ENV_ABC
volumeMounts://存储卷映射方式,将文件映射到当前应用目录下
            - mountPath: "/app/appsettings.json"
              name: appsettings
              subPath: appsettings-{{.Chart.AppVersion}}.json //subPath指的是ComfigMap的Key

....

volumes: // 定义存储卷
        - name: appsettings
          configMap:
              name: {{ include "geektime-mobile-gateway.fullname" . }}-config

定义名为ENV_ABC的环境变量,valueFrom定义的是configMapKeyRef,也就是通过之前定义的名为geektime-config的ConfigMap,取它的Key值为ENV_ABC

存储卷定义方式,首先定义一个存储卷volumes,通过过将ConfigMap映射到存储卷,意味着这个名为appsettings的存储卷下面会有ConfigMap中的appsetting配置文件

subPath: appsettings-{{.Chart.AppVersion}}.json 这里使用了Chart.AppVersion变量,是因为建议的做法是镜像的版本和配置的版本以及Helm的版本都应该是一致的,这样在修改Helm版本后就能读到对应的匹配值版本

如果配置的是环境变量时,如果配置发生变更,需要重启应用程序才能获取到新的配置信息

2 分布式配置中心解决方案

2.1 什么时候选择配置中心

  • 多项目组并行协作
  • 运维开发分工职能明确
  • 对风险控制有更高诉求
  • 对线上配置热更新有诉求

2.2 Apollo配置中心系统的能力

  • 权限与审计
  • 版本管理
  • 热更新
  • 原生支持Java、.Net客户端
  • 目前项目仍然很活跃

2.2.1 Apollo创建配置项目

前置条件,需要安装docker环境和docker-compose支持
在当前目录执行start.ps1,启动服务

dashboard:
http://localhost:8070

用户名: apollo
密码: admin

configServer:
http://localhost:8080

start.ps1文件内容

docker-compose up

Apollo页面
在这里插入图片描述

点击"创建项目",创建需要的项目

2.2.2 项目使用

  • 项目引用Apollo的包,Com.Ctrip.Framework.Apollo.Configuration
  • Program文件添加命名空间,并在CreateHostBuilder中注入
public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostBuilderContext, configurationBuilder) =>
                {
                    LogManager.UseConsoleLogging(Com.Ctrip.Framework.Apollo.Logging.LogLevel.Trace);// 定义日志级别
                    //var c = configurationBuilder.Build().GetSection("Apollo").Get<ApolloOptions>();
                    configurationBuilder.AddApollo(configurationBuilder.Build().GetSection("Apollo")).AddDefault(Com.Ctrip.Framework.Apollo.Enums.ConfigFileFormat.Properties);
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
  • 在appsetting.json配置Apollo接点
"Apollo": {
    "AppId": "geektime-mobile-gateway",// 应用程序在配置中心的唯一标识
    "Env": "DEV",
    "MetaServer": "http://172.168.190.76:8080",
    "ConfigServer": [ "http://172.168.190.76:8080" ]
  },

2.2.3 K8s中使用Apollo

  • 在配置中添加Apollo配置
"Apollo": {
      "AppId": "geektime-mobile-gateway",
      "Env": "DEV",
      "MetaServer": "http://192.168.67.76:8080",
      "ConfigServer": [ "http://192.168.67.76:8080" ]
    },
  • 构建镜像
  • 创建ConfigMap
  • 访问获取

http://www.niftyadmin.cn/n/4982302.html

相关文章

【App端】uni-app使用百度地图api和echarts省市地图下钻

目录 前言方案一&#xff1a;echarts百度地图获取百度地图AK安装echarts和引入百度地图api完整使用代码 方案二&#xff1a;echarts地图和柱状图变形动画实现思路完整使用代码 方案三&#xff1a;中国地图和各省市地图下钻实现思路完整使用代码 前言 近期的app项目中想加一个功…

Linux学习之权限

在学习Linux权限之前&#xff0c;我们先理解一下关于Linux内核与shell外壳之间的关系&#xff1a; shell命令以及运行原理 Linux严格意义上说的是一个操作系统&#xff0c;我们称之为“核心&#xff08;kernel&#xff09;“ &#xff0c;但我们一般用户&#xff0c;不能直接使…

【Vue3】transition-group 过渡列表

1. 基本使用 transition-group 和 transition 的用法基本上是一样的。 <template><div class"content"><button click"add">add</button><button click"pop">pop</button><div class"wrap"&…

测试数据库性能的工具知多少

有许多测试数据库性能的工具&#xff0c;以下是一些常用的工具&#xff1a; sysbench: 这是一个跨平台的基准测试工具&#xff0c;可以测试多种系统资源&#xff0c;包括CPU&#xff0c;内存&#xff0c;IO&#xff0c;和并发性。对于数据库测试&#xff0c;sysbench可以用来测…

uniapp 支持图片放大

<view class"list" v-for"(item, index) in urls" :key"index"><image :src"item" click"viewImg(item, index)" disabled></image></view> js // 预览大图 viewImg(data, index) {uni.previewImag…

非科班菜鸡算法学习记录 | 代码随想录算法训练营第49天||121. 买卖股票的最佳时机 122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 知识点&#xff1a;动规 状态&#xff1a;看思路ok 思路&#xff1a; 维护一个二维dp&#xff0c;dp【i】【0】表示第i1天不持有股票时候的情况&#xff1a; 有两种情况&#xff0c;昨天就不持有股票所以直接等于昨天&#xff0c;或者是今天卖出了…

华为OD机试 - MELON的难题 - 动态规划(Java 2023 B卷 100分)

目录 一、题目描述二、输入描述三、输出描述四、动态规划五、解题思路六、Java算法源码七、效果展示1、输入2、输出3、说明华为OD机试 2023B卷题库疯狂收录中,刷题点这里 一、题目描述 MELON有一堆精美的雨花石(数量为n,重量各异),准备送给S和W。MELON希望送给俩人的雨花石…