使用DigitalOcean上Kubernetes部署第一个微服务

1.Docker和K8S介绍

Kubernetes and Docker

Docker: Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。Docker公司出品,你没有看错,Docker有个Docker Inc公司。

Kubernetes: k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。Google出品。

2.代码内容

代码内容相对比较简单就是采用Node.js写了一个文章服务,主要为了演示使用,数据库都没有。后端代码内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
const express = require('express');
const bodyParser = require('body-parser');
const { randomBytes } = require('crypto');
const cors = require('cors');
const axios = require('axios');
const app = express();
app.use(bodyParser.json());
app.use(cors());
const posts = {"1001" : {"id": "1001","title": "hello world."}};
app.get('/posts', (req, res) => {
res.send(posts);
});
app.post('/posts', async (req, res) => {
const id = randomBytes(4).toString('hex');
const { title } = req.body;

posts[id] = {
id,
title
};
res.status(201).send(posts[id]);
});


app.listen(4000, () => {
console.log('Listening on 4000');
});

3.本地构建镜像

前提本地电脑成功按照Docker。并且当前代码目录下还有一个Dockerfile用来构建镜像。Dockerfile代码如下,学习过基本Dockerfile语法就很清楚每行代码的作用。

1
2
3
4
5
6
7
FROM node:alpine
WORKDIR /app
COPY package.json ./
RUN npm install
COPY ./ ./

CMD ["npm", "start"]
1
2
docker build -t posts:1.0.1 .

注意最后有一个 **.**,代表使用当前目录dockerfile文件进行打镜像。

4.推送镜像到Container Registry

前提是在DO上开通Container Registry服务。先使用docker tag命令把本地镜像按照要求格式打上标签。

1
2
docker tag posts:1.01 registry.digitalocean.com/bage88/posts:1.0.1
docker push registry.digitalocean.com/bage88/posts:1.0.1

registry.digitalocean.com/bage88 是我在DO上创建镜像仓库。同时因为我本地按照了doctl,我登录docker仓库不是官网的docker hub,而是do的registery。登录命令如下:

1
doctl registry login

5.使用Kubernetes部署应用镜像

参考连接:https://docs.digitalocean.com/tutorials/build-deploy-first-image/

1
kubectl create deployment my-posts-service --image=registry.digitalocean.com/bage88/posts:1.0.1

PS:使用这种方式,不能自动生成yaml文件,建议部署的时候使用代码仓库的里面deployment.yaml文件进行部署,后续集成CICD时候,可以自动更新yaml文件里面镜像的版本号,后续文章会写。

以上是部署好了第一个微服务,还需要添加LB将服务暴露到公网,供用户访问。命令如下:

1
kubectl expose deployment my-python-app --type=LoadBalancer --port=4000 --target-port=4000

port=4000是代表公网暴露的端口,这个端口可以修改,比如8080之类的,target-port=4000是该服务运行的端口,4000。代码里面我们监听也是4000端口。

6.访问服务

访问地址:http://139.59.218.158:4000/posts

我用Postman测试提交了第二个文章。效果如下:

7.使用资源

DO最大的好处是都是按时计费的,我做完这个小demo,就可以销毁掉这个k8s集群。

1个LB,1个Clusters。这个Cluster使用2个主机,每个主机分别跑了一个Node节点。

Droplets(云主机)列表。

参考连接

https://docs.digitalocean.com/products/container-registry/quickstart/#push-to-your-registry

https://docs.digitalocean.com/products/container-registry/quickstart/#push-to-your-registry


使用DigitalOcean上Kubernetes部署第一个微服务
https://blog.liangbenshu.cn/2023/05/19/deploy-first-microservice-on-kubernetes/
作者
liminjun
发布于
2023年5月19日
许可协议