使用 Kubernetes 上的 Helm 部署微服务应用程序

Helm 通常被称为 Kubernetes 的软件包管理器,它简化了 Kubernetes 集群内应用程序的部署和管理。本指南将引导您使用 Helm 部署微服务应用程序,并说明创建 Helm 图表、管理依赖项和部署多服务应用程序等关键概念。

a0a663ac779ddc86f87b25debefb83b2.png

1

   

先决条件

在开始之前,请确保您已安装以下工具:

  • kubectl:Kubernetes 命令行工具。

  • minikube:用于开发和测试的本地 Kubernetes 集群。

  • Docker:用于构建容器镜像。

  • Helm:Kubernetes 包管理器。

2

   

概述

我们将部署一个由两个微服务组成的示例应用程序:

  • 前端服务:与后端服务通信的简单 Web 应用程序。

  • 后端服务:返回消息的 API。

我们将使用 Helm 将这些服务打包成图表,管理它们的依赖关系,并将它们部署到 Kubernetes 集群。

2.1

   

步骤 1:构建 Docker 镜像

首先,我们需要为前端和后端服务创建 Docker 镜像。

后端服务创建一个简单的 Node.js 后端服务:

// backend/server.js
const express = require('express');
const app = express();


app.get('/api/message', (req, res) => {
    res.json({ message: 'Hello from the backend!' });
});


const port = 3000;
app.listen(port, () => {
    console.log(`Backend service running on port ${port}`);
});

Dockerfile 为后端创建 :

/ backend/Dockerfile /

FROM node:14
WORKDIR /app
COPY server.js .
RUN npm install express
EXPOSE 3000
CMD ["node", "server.js"]

前端服务为前端服务创建一个简单的 HTML 文件:

<!-- frontend/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Frontend Service</title>
</head>
<body>
    <h1>Frontend Service</h1>
    <div id="message"></div>
    <script>
        fetch('/api/message')
            .then(response => response.json())
            .then(data => {
                document.getElementById('message').innerText = data.message;
            });
    </script>
</body>
</html>

为前端创建一个 Dockerfile:

# frontend/Dockerfile
FROM nginx:alpine
COPY index.html /usr/share/nginx/html

构建 Docker 镜像导航到每个服务目录并构建 Docker images:在后端目录中 docker build -t backend-service 在前端目录中 docker build -t frontend-service

2.2

   

第 2 步:创建 Helm Charts

为后端服务创建 Helm 图表导航到工作目录并创建一个新的 Helm 图表:

helm create backend

此命令生成基本的 Helm 图表结构。修改该 backend/templates/deployment.yaml 文件以适合我们的后端服务:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-backend
spec:
  replicas: 2
  selector:
    matchLabels:
      app: {{ .Release.Name }}-backend
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}-backend
    spec:
      containers:
      - name: backend
        image: backend-service
        ports:
        - containerPort: 3000

修改 backend/templates/service.yaml 文件:

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}-backend
spec:
  selector:
    app: {{ .Release.Name }}-backend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 3000

为前端服务创建 Helm Chart 类似地,为前端服务创建 Helm 图表:

helm create frontend

修改 frontend/templates/deployment.yaml 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-frontend
spec:
  replicas: 2
  selector:
    matchLabels:
      app: {{ .Release.Name }}-frontend
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}-frontend
    spec:
      containers:
      - name: frontend
        image: frontend-service
        ports:
        - containerPort: 80

修改 frontend/templates/service.yaml 文件:

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}-frontend
spec:
  selector:
    app: {{ .Release.Name }}-frontend
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

2.3

   

步骤 3:使用 Helm 进行部署

启动你的 Minikube 集群:

minikube start

部署后端服务导航到后端目录并安装图表:

helm install backend ./backend

部署前端服务导航到前端目录并安装图表:

helm install frontend ./frontend

2.4

   

步骤 4:设置 Ingress

为了向外部公开前端服务,我们将设置一个入口。

在 Minikube 中启用 Ingress 启用 ingress 插件:

minikube addons enable ingress

创建入口资源创建 ingress 资源以将流量路由到前端服务:

# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: frontend-ingress
spec:
  rules:
  - host: frontend.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend
            port:
              number: 80

应用入口配置:

kubectl apply -f ingress.yaml

向您的 /etc/hosts 文件添加一个条目以映射 frontend.local 到 Minikube IP:

echo "$(minikube ip) frontend.local" | sudo tee -a /etc/hosts

2.5

   

步骤 5:验证部署

通过导航到 ,在浏览器中访问前端服务 http://frontend.local。您应该会看到前端页面显示从后端服务获取的消息 ( http://frontend.local。您应该会看到前端页面显示从后端服务获取的消息 )。

3

   

结论

在本指南中,我们使用 Helm 在 Kubernetes 上部署了一个微服务应用程序,演示了创建 Helm 图表、管理依赖项和设置入口等中级概念。Helm 简化了 Kubernetes 应用程序的部署和管理,使其成为云原生开发的强大工具。

推荐

A Big Picture of Kubernetes

Kubernetes入门培训(内含PPT)


原创不易,随手关注或者”在看“,诚挚感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值