Helm 通常被称为 Kubernetes 的软件包管理器,它简化了 Kubernetes 集群内应用程序的部署和管理。本指南将引导您使用 Helm 部署微服务应用程序,并说明创建 Helm 图表、管理依赖项和部署多服务应用程序等关键概念。
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 应用程序的部署和管理,使其成为云原生开发的强大工具。
推荐
原创不易,随手关注或者”在看“,诚挚感谢!