引言
微服务架构因其灵活性、可扩展性和敏捷性而成为现代应用开发的主流选择,它使得团队能够独立开发、测试和部署应用的不同部分。然而,这种架构也带来了新的挑战,尤其是在服务间的协作和部署流程上。
在微服务的实际运行中,尽管每个服务在概念上是独立的,但它们却需要协同工作以完成业务流程。这导致在开发过程中,我们常常需要同时启动多个相关服务,甚至全部服务。在云原生环境中,每次代码变更都意味着需要为对应服务重新构建Docker镜像,并将其重新部署,这一过程不仅重复、繁琐,也增加了开发流程的复杂性。因此,为了适应微服务架构,我们必须重新思考和优化我们的开发流程。
Tilt
Tilt是一个专门为解决微服务开发痛点的工具包,提供服务可视化、自动编排、实时更新等功能。
安装
安装Tilt
curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
验证安装情况
➜ tilt version
v0.33.21, built 2024-11-08
使用
创建一个Node.js服务
const express = require('express');
const app = express();
const path = require('path');
app.use(express.static('public'));
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname + '/index.html'));
});
app.listen(8000, () => {
console.log('Server running at http://localhost:8000/');
});
创建Dockerfile
FROM node:20
WORKDIR /app
ADD . .
RUN yarn install
ENTRYPOINT [ "node", "/app/index.js" ]
创建K8s编排文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: example-nodejs
labels:
app: example-nodejs
spec:
selector:
matchLabels:
app: example-nodejs
template:
metadata:
labels:
app: example-nodejs
spec:
containers:
- name: example-nodejs
image: example-nodejs-image
ports:
- containerPort: 8000
创建Tiltfile
# -*- mode: Python -*
k8s_yaml('kubernetes.yaml')
k8s_resource('example-nodejs', port_forwards=8000)
docker_build('example-nodejs-image', '.')
启动服务
➜ tilt up --context orbstack
Tilt started on http://localhost:10350/
v0.33.21, built 2024-11-08
(space) to open the browser
(s) to stream logs (--stream=true)
(t) to open legacy terminal mode (--legacy=true)
(ctrl-c) to exit
--context 参数表示我正在使用的 Kubernetes 上下文是 orbstack
访问 http://localhost:10350/ 可以看到服务仪表盘
根据服务的配置,通过 http://localhost:8080/ 可以访问该 Node.js服务
点击某个服务可以查看其容器日志
修改代码并保存,可以看到服务镜像已经自动重新构建并部署
总结
通过使用Tilt工具,我们可以简化微服务开发的工作流程并让服务变得可视化,在多人协作时可以将开发环境、服务编排流程以代码的形式进行同步。