写点什么

稳!上千微服务如何快速接入 Zadig(K8s YAML 篇)

作者:KodeRover
  • 2022 年 6 月 28 日
  • 本文字数:2475 字

    阅读完需:约 8 分钟

稳!上千微服务如何快速接入 Zadig(K8s YAML 篇)

云原生微服务架构下,可以获得更高的可用性和扩展性,以满足业务快速迭代的需求,然而成百上千个服务的 YAML 配置管理问题成了老大难的事情:不同服务的配置差异极小,但是不得不复制粘贴;针对多样化部署环境(比如有开发环境、测试环境、预发布环境...)定制的服务配置更是导致 YAML 文件泛滥成灾...


Zadig 提供了几种高效管理服务配置的姿势:

  • 从现有 Kubernetes 批量导入多个服务,一键将已有服务配置平滑迁移

  • 将多个服务的配置文件组织在代码库中,从代码库同步现有服务配置,实现服务的批量创建

  • 将多个服务的配置文件抽象成服务模板,工程师只需填写和服务相关的少量参数,使用模板创建服务即可

下面将详细阐述这几种场景的具体接入方法。

从现有 Kubernetes 批量导入服务

适用:K8s YAML 类型项目的场景,可以直接从现有 K8s 集群的命名空间批量导入服务,几乎无迁移成本。

批量导入服务

  • 进入项目的服务模块 -> 点击新建按钮 -> 选择从 Kubernetes 导入

  • 选择服务所在的集群和命名空间 -> 添加服务 -> 选择配置类型及配置名称后导入。

支持导入以下资源 deployment/statefulset/service/ingress/secret/configmap/pvc 等

  • 导入成功后,可在 Zadig 平台中按需修改服务配置。

将服务加入到环境

  • 进入项目的环境 -> 点击添加服务 -> 选择从 NS 导入的服务即可批量将服务加入到已有环境中。


  • 查看环境

从代码库批量同步

适用:已存在大体量的 K8s YAML 服务,每个服务有单独的 YAML 配置。

将服务的 YAML 配置按照一定目录结构组织起来,通过 Zadig 批量同步,下面以 voting-demo 项目为例演示说明:

  • 源码:zadig/voting-app

  • 服务:该项目包括 5 个微服务(db/redis/result/vote/worker

  • 服务对应的配置文件:上述 5 个微服务的 K8s YAML 配置文件目录,如下所示:

zadig/examples/voting-app/freestyle-k8s-specifications├── db│   ├── db-deployment.yaml│   └── db-service.yaml├── redis│   ├── redis-deployment.yaml│   └── redis-service.yaml├── result│   ├── result-deployment.yaml│   └── result-service.yaml├── vote│   ├── vote-deployment.yaml│   └── vote-service.yaml└── worker    └── worker-deployment.yaml
复制代码

批量同步服务

  • 进入项目的服务模块 -> 点击从代码库同步 -> 选择代码库以及服务配置所在文件目录,点击同步

本例中即为 Zadig 库的 examples/voting-app/freestyle-k8s-specifications 目录

将服务加入到环境

  • 批量同步服务配置后系统会自动解析多个服务,效果如下图左侧边栏所示。

  • 进入项目的环境中 -> 点击添加服务 -> 选择从代码库同步的服务即可批量将服务加入到已有环境中。


  • 查看环境

使用服务模板创建

适用:已存在大体量的 K8s YAML 服务配置,多个服务的配置结构同构,不同服务配置的值存在细微差异(比如:不同服务的端口不同、数据库连接地址不同、所需 CPU/Memory 资源限制不同...)

下面以 multi-service-demo 项目的服务配置为例进行实践。该项目中包括三个服务 service1/service2/service3,通过分析这些服务的 K8s YAML 配置,抽象出服务模板,将不同服务有差异的配置提取为模板中的变量,即可得到服务模板 template.yaml

创建服务模板

  • 在项目预览页点击右上角的 模板库 -> K8s YAML 进入 K8s YAML 模板管理页面。



  • 点击 + 新建模板 -> 填写模板名称 multi-service-demo-template -> 填写模板内容 -> 填写自定义变量的值对模板赋默认值 -> 保存模板。

该例中的模板内容如下:

apiVersion: apps/v1kind: Deploymentmetadata:  name: $T-Service$  labels:     app.kubernetes.io/name: $T-Project$    app.kubernetes.io/instance: $T-Service$spec:  selector:    matchLabels:      app.kubernetes.io/name: $T-Project$      app.kubernetes.io/instance: $T-Service$  replicas: 2  template:    metadata:       labels:        app.kubernetes.io/name: $T-Project$        app.kubernetes.io/instance: $T-Service$    spec:      containers:        - name: $T-Service$          image: ccr.ccs.tencentyun.com/koderover-public/$T-Service$:latest          imagePullPolicy: Always           command:            - /workspace/$T-Service$          ports:            - protocol: TCP              containerPort: {{.port}}          resources:            limits:              memory: {{.memoryLimit}}              cpu: {{.cpuLimit}}---apiVersion: v1kind: Servicemetadata:  name: $T-Service$  labels:    app.kubernetes.io/name: $T-Project$    app.kubernetes.io/instance: $T-Service$spec:  type: NodePort  ports:    - protocol: TCP      port: {{.port}}      targetPort: {{.port}}
复制代码

使用模板新建服务

只需要填写服务名称,选择模板,填写若干变量即可快速创建服务。

  • 进入 multi-service-demo 项目的服务模块,点击使用模板新建服务。

  • 填写服务名称 service1 -> 选择模板 multi-service-demo-template -> 填写 service1服务在模板中的变量配置后新建即可。



重复上述步骤继续新建服务 service2service3

将服务加入到环境

至此这三个服务都被成功创建,进入项目的环境中 -> 点击添加服务 -> 选择服务即可批量将服务加入到已有环境中。





以上三种方式成功将服务接入 Zadig,接下来便可以使用 Zadig 强大的环境治理和工作流能力对服务进行构建部署、测试验证、持续交付等,推荐阅读:

结语

秉承着 do not block developers 的理念,Zadig 的批量接入能力及 K8s YAML 服务模板功能,极大程度降低服务 YAML 配置文件维护的心智负担,让工程师从繁琐的配置管理“脏活累活”中解放出来,进入云原生持续交付快车道,更多时间创造业务价值。


Zadig,让工程师更专注创造!欢迎加入 开源吐槽群🔥


Zadig on Github https://github.com/koderover/zadig

Zadig on Gitee https://gitee.com/koderover/zadig

发布于: 刚刚阅读数: 3
用户头像

KodeRover

关注

软件交付更丝滑~ 2022.04.06 加入

Zadig 是 KodeRover 团队基于 K8s 自主研发的开源分布式持续交付产品,重点解决企业级软件交付验证的痛点,并且 100% 开放源代码

评论

发布
暂无评论
稳!上千微服务如何快速接入 Zadig(K8s YAML 篇)_DevOps_KodeRover_InfoQ写作社区