麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
1116
2023-04-25
多套环境的数据库隔离,域名访问,差异化配置,香!快解锁!
本文主要介绍 Zadig 服务管理的变量配置能力,通过一套配置,实现多环境的隔离:
数据库隔离:每个环境的业务数据独立存放在不同的数据库中,互不影响差异化域名访问:使用不同的域名地址访问不同的环境差异化业务配置:业务配置管理在 Nacos、Apollo 等配置中心,不同的环境使用不同的配置
数据库隔离
适用:不同环境的业务数据互相隔离,一个数据库对应多个连接地址,或连接不同的数据库均适用。
配置服务变量
如图中 vote 服务,该服务数据库相关配置被管理在 ConfigMap 中的,并通过 volume 挂载到应用中。在 Zadig 中,我们将数据库配置项抽取为 Zadig 的全局变量 mgo_addr 和 mgo_db,并为其配置默认值。
mgo_addr 默认值设置:220.16.0.43,可根据实际情况进行配置。mgo_db 默认值设置:$Product$_$EnvName$_vote ,这里我们用到了系统内置全局变量 $Product$、$EnvName$,分别表示项目名称和环境名称。
变量配置生效
创建环境时,配置中的变量可以使用默认值,也可以重新指定。
环境创建时,变量会被自动渲染,效果如下图。在 dev 环境中被渲染为:simple-vote-service-dev-vote,qa 环境中被渲染为:simple-vote-service-qa-vote
图例中服务 K8s YAML 配置如下:
apiVersion: apps/v1kind: Deploymentmetadata: labels: app: vote name: vote-rc-originspec: replicas: 1 selector: matchLabels: app: vote version: rc-origin template: metadata: labels: app: vote version: rc-origin spec: containers: - image: dockersamples/examplevotingapp_vote:before name: vote-e2e ports: - containerPort: 80 name: vote volumeMounts: - name: config-volume mountPath: /app/config volumes: - name: config-volume configMap: name: vote-config---apiVersion: v1kind: ConfigMapmetadata: name: vote-configdata: SERVICE_MGO_ADDR: {{.mgo_addr}} SERVICE_MGO_DB: {{.mgo_db}} SERVICE_MGO_MODE: strong
差异化域名访问
适用:在 Zadig 中创建多套环境,使用不同的域名访问不同的环境
配置泛域名
配置服务变量
创建环境时,系统会自动渲染变量,效果图示如下。
图例中服务的 K8s YAML 配置如下:
差异化业务配置
适用:服务的业务配置在第三方配置中心管理(比如 Nacos、Apollo 等),不同环境使用不同的配置项。下面以一套 Apollo 配置中心举例,通过 Zadig 管理和使用不同环境的业务配置。
配置服务变量
以 myapp 服务为例,我们需要在 Zadig 中设置 Apollo 配置参数与 Zadig 环境变量的对应关系。
在 Zadig 中定义的配置项(可以根据情况进行设置):
APOLLO_APP_NAMESPACE:Apollo 配置中心的命名空间(Namespace),使用 Zadig 自定义变量 apollo_app_namespace 为其赋值,默认值设为 zadig.devAPOLLO_APP_ID:Apollo 配置中心的应用(Application),使用 Zadig 系统内置变量 $Service$ 为其赋值。APOLLO_APP_ENV:Apollo 配置中心的环境(Enviroment),使用 Zadig 系统内置变量 $EnvName$ 为其赋值。APOLLO_APP_CLUSTER:Apollo 配置中心中的集群(Cluster),用 Zadig 自定义变量 apollo_app_cluster 为其赋值,默认值设为 local。
变量配置生效
当环境拉起或myapp 服务启动时,会去相应的配置中心获取服务配置。
uat 环境效果:
qa 环境效果:
图例中服务的 K8s YAML 配置如下:
小结
参考链接:
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。