当前位置: 首页 > article >正文

15 章 在微服务中服务众多如何实践他们复杂的依赖关系进行 helm安装

让我们通过一个实际的例子来详细讲解如何将 wait-for-dependencies Job 结合到一个 Web 服务的 Helm Chart 中。假设你有一个 Web 服务 my-web-service,它依赖于一个 MySQL 数据库和一个 Nacos 配置服务。

场景

我们有以下服务:

  • 数据库服务: mysql-service,监听端口 3306
  • Nacos 服务: nacos-service,监听端口 8848
  • Web 服务: my-web-service,监听端口 8080

我们希望在 Helm Chart 部署 my-web-service 之前确保数据库和 Nacos 服务都已经就绪。

Helm Chart 结构

假设你的 Helm Chart 目录结构如下:

my-web-service-chart/
├── charts/
├── templates/
│   ├── deployment.yaml
│   ├── service.yaml
│   ├── wait-for-dependencies-job.yaml
├── values.yaml
├── Chart.yaml

wait-for-dependencies-job.yaml

templates/ 目录下创建 wait-for-dependencies-job.yaml 文件,内容如下:

apiVersion: batch/v1
kind: Job
metadata:
  name: wait-for-dependencies
  annotations:
    "helm.sh/hook": post-install
spec:
  template:
    spec:
      containers:
      - name: wait
        image: alpine:latest
        command: ["sh", "-c", "apk add --no-cache netcat-openbsd && while ! nc -z mysql-service 3306; do sleep 5; done; while ! nc -z nacos-service 8848; do sleep 5; done; echo 'Dependencies are ready'"]
      restartPolicy: Never

deployment.yaml

这是 my-web-service 的 Deployment 配置。在 templates/ 目录下创建 deployment.yaml 文件,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-web-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-web-service
  template:
    metadata:
      labels:
        app: my-web-service
    spec:
      containers:
      - name: my-web-service
        image: my-web-service-image:latest
        ports:
        - containerPort: 8080
        env:
        - name: DATABASE_URL
          value: "jdbc:mysql://mysql-service:3306/mydb"
        - name: NACOS_SERVER
          value: "nacos-service:8848"

service.yaml

templates/ 目录下创建 service.yaml 文件,定义 Web 服务的 Service,内容如下:

apiVersion: v1
kind: Service
metadata:
  name: my-web-service
spec:
  selector:
    app: my-web-service
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

values.yaml

values.yaml 中,可以配置服务相关的参数,比如数据库和 Nacos 的配置。但在这个简单的例子中,我们不需要做额外的配置。

使用 Helm 安装 Chart

确保你的 Helm Chart 已经准备好并且包含上述文件。然后使用 Helm 安装 Chart:

helm install my-web-service ./my-web-service-chart

流程说明

  1. wait-for-dependencies-job.yaml: 这个 Job 会在 Helm Chart 的 post-install 阶段运行。它会检查 mysql-servicenacos-service 的端口是否开放。如果端口未开放,它会每 5 秒重试一次,直到服务就绪。
  2. deployment.yaml: 定义了 my-web-service 的 Deployment。它会在 wait-for-dependencies Job 成功执行后启动。确保数据库和 Nacos 服务都已准备好,Web 服务才会启动。
  3. service.yaml: 为 my-web-service 创建了一个 Service,暴露端口供外部访问。

总结

  • Job 的作用: 确保依赖服务(数据库和 Nacos)在 Web 服务启动之前已经就绪。
  • Job 执行: wait-for-dependencies Job 在 Helm 的 post-install 阶段执行,等待所有依赖服务的端口开放。
  • Web 服务启动: 只有在 Job 成功执行后,my-web-service 的 Deployment 才会启动,确保所有依赖服务可用。

这样,你可以确保 Web 服务在其依赖的服务完全可用之后才会启动,避免启动时出现连接失败的问题。


http://www.kler.cn/a/300210.html

相关文章:

  • 雷电9最新版安装Magisk+LSPosd(新手速通)
  • C++语言的区块链
  • Decode Global专注金融创新,构建便捷的交易平台
  • 卸载和安装Git小乌龟、git基本命令
  • 音频入门(一):音频基础知识与分类的基本流程
  • 智能新浪潮:亚马逊云科技发布Amazon Nova模型
  • Robust Image Denoising through Adversarial Frequency Mixup
  • SPI驱动学习四(通过SPI操作外设模块)
  • QT作业3
  • SprinBoot+Vue宠物店管理系统的设计与实现
  • k8s笔记
  • Android - NDK: 在jni层生成java层对象,并调用java层的方法
  • C++ STL-deque容器入门详解
  • Android简易图片浏览器
  • 【CanMV K230 AI视觉】 人体检测
  • 使用ROS2 控制 Isaac Sim 中的机械臂运动
  • QQ频道机器人零基础开发详解(基于QQ官方机器人文档)[第三期]
  • Go-ecc加密解密详解与代码_ecdsa
  • mac安装spark
  • 算法知识点————双指针【删除重复元素】【反转链表】
  • Azure AI Search 中的二进制量化:优化存储和加快搜索速度
  • 简洁直白的github快速入门教程(云主机)
  • elementui Cascader 级联选择器的使用总结
  • 你真的懂吗系列——串口通信
  • uniapp ios sticky定位,内部 u-tabs(包含scroll-view)消失问题
  • 【QT】基础入门学习