本文主要介绍 Zadig 服务管理的变量配置能力,通过一套配置,据库实现多环境的隔离隔离:
适用:不同环境的业务数据互相隔离,一个数据库对应多个连接地址,或连接不同的数据库均适用。
如图中 vote 服务,该服务数据库相关配置被管理在 ConfigMap 中的,并通过 volume 挂载到应用中。在 Zadig 中,我们将数据库配置项抽取为 Zadig 的全局变量 mgo_addr 和 mgo_db,并为其配置默认值。
创建环境时,配置中的变量可以使用默认值,也可以重新指定。
环境创建时,变量会被自动渲染,效果如下图。在 dev 环境中被渲染为:simple-vote-service-dev-vote,qa 环境中被渲染为:simple-vote-service-qa-vote
图例中服务 K8s YAML 配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: vote
name: vote-rc-origin
spec:
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: v1
kind: ConfigMap
metadata:
name: vote-config
data:
SERVICE_MGO_ADDR: { { .mgo_addr}}
SERVICE_MGO_DB: { { .mgo_db}}
SERVICE_MGO_MODE: strong
适用:在 Zadig 中创建多套环境,使用不同的域名访问不同的环境
给集群入口配置一个泛域名,比如:*.koderover.com,确保域名 DNS 正确解析到集群 Ingress 控制器 [1] LoadBalancer 的外网 IP 上。
此例中为业务入口配置外网访问地址 host ,Zadig 中配置全局变量: { { .domain}},Value 设为:vote-$EnvName$.koderover.com
创建环境时,系统会自动渲染变量,效果图示如下。
图例中服务的 K8s YAML 配置如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: vote
name: vote-rc-origin
spec:
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
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: vote
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 100m
spec:
rules:
- host: { { .domain}}
http:
paths:
- path: /
backend:
serviceName: vote
servicePort: 5000
适用:服务的业务配置在第三方配置中心管理(比如 Nacos、Apollo 等),不同环境使用不同的配置项。下面以一套 Apollo 配置中心举例,通过 Zadig 管理和使用不同环境的业务配置。
配置服务变量
以 myapp 服务为例,我们需要在 Zadig 中设置 Apollo 配置参数与 Zadig 环境变量的对应关系。
在 Zadig 中定义的配置项(可以根据情况进行设置):
变量配置生效
当环境拉起或myapp 服务启动时,会去相应的配置中心获取服务配置。
uat 环境效果:
qa 环境效果:
图例中服务的 K8s YAML 配置如下:
apiVersion: v1
kind: Service
metadata:
name: a
labels:
app: a
spec:
ports:
- name: http
port: 80
targetPort: 8080
selector:
app: a
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: a
labels:
app: a
spec:
selector:
matchLabels:
app: a
replicas: 1
template:
metadata:
labels:
app: a
spec:
containers:
- name: myapp-1
image: koderover.tencentcloudcr.com/koderover-demo/myapp-1:v0.1__linux_amd64
imagePullPolicy: Always
command: ["/myapp-1"]
args: ["--downstream-addr", "$(DOWNSTREAM_ADDR)", "--headers", "$(HEADERS)"]
env:
- name: DOWNSTREAM_ADDR
value: "b"
- name: HEADERS
value: "x-request-id"
- name: APOLLO_APP_NAMESPACE
value: { { .apollo_app_namespace}}
- name: APOLLO_APP_ID
value: $Service$
- name: APOLLO_APP_ENV
value: $EnvName$
- name: APOLLO_APP_CLUSTER
value: { { .apollo_app_cluster}}
ports:
- containerPort: 8080
resources:
limits:
cpu: 100m
memory: 100Mi
本文主要阐述了如何使用 Zadig 中的变量能力来更高效的配置环境,只需要维护一份配置就可以实现不同环境的业务数据隔离、差异化域名、差异化业务配置等能力。当环境数量需求高时,可大大降低服务配置的管理负担。除了文中提及到的变量,可阅 变量配置 | Zadig 文档 [2] 解锁更多。社区小伙伴日常使用中还发现哪些让人 Aha 或者不爽的姿势,欢迎戳论坛 https://community.koderover.com/top 分享你的场景~
[1] https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress-controllers/
[2] https://docs.koderover.com/zadig/v1.13.0/project/service/k8s/#变量配置
责任编辑:武晓燕 来源: KodeRover 数据库隔离域名(责任编辑:百科)
大生农业金融(01103.HK)发布公告:年度公司持有人应占亏损11.25亿元
春光科技(603657.SH):拟使用不超2.亿元闲置自有资金进行委托理财
Devolver Digital将在下周直播宣布中把游戏延期