您现在的位置是:首页 > 文章详情

Zadig 简化 K8s YAML ,实现上千微服务自动化运维

日期:2024-07-11点击:194

在云原生微服务架构中,企业能够享受到更高的可用性和扩展性,这对于满足业务的快速迭代至关重要。然而,管理大量服务的 YAML 配置成为了一项挑战:服务间的配置细微差别要求频繁复制粘贴,而为不同的部署环境(如开发、测试、预发布等)定制配置又会导致 YAML 文件数量激增。

为了解决这些问题,Zadig 提供了高效的服务配置管理方案:

  1. 支持从现有 Kubernetes 集群批量导入服务,实现服务配置的快速迁移。
  2. 允许将多个服务配置文件整合至代码库,并同步至 Zadig,以批量创建服务。
  3. 提供服务模板功能,通过定义模板和少量参数,简化服务的创建过程。

本文将详细介绍如何应用 Zadig 的这些功能,以实现微服务的高效管理和自动化运维。

从现有 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/v1 kind: Deployment metadata: 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: v1 kind: Service metadata: 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 通过其强大的批量接入功能和 Kubernetes YAML 服务模板,显著减轻了维护服务配置文件的认知负担。这使得工程师得以摆脱繁琐的配置管理工作,加速步入云原生 DevOps 的高效路径,从而将更多精力投入到创造实际业务价值中去。

扫码即刻咨询
解锁企业专属最佳实践方案!

Zadig 在 Github / Zadig 在 Gitee

推荐阅读:
原文链接:https://my.oschina.net/koderover/blog/11455502
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章