使用k8s部署项目的流程

容器交付流程

image-20220205084826604

k8s部署项目的流程:

image-20220205085018910

案例:交付一个java应用程序

项目地址:https://github.com/lizhenliang/tomcat-java-demo.git

1. 制作镜像

1.1 编写dockerfile

使用dockerfile的多阶段构建

1.2 构建镜像到本地

测试镜像:

1.3 创建harbor项目

image-20220206160543078
·
image-20220206160828222

1.4 登录harbor

注意,如果使用HTTP访问harbor,需要将harbor加入到docker的http仓库白名单中

1.5 推送镜像到harbor

  1. 在habor界面可以看到镜像推送的命令

    image-20220206162035724
  2. 给镜像打tag,并推送到harbor

  3. 查看harbor项目

    image-20220206162249579

1.6 配置harbor凭据到k8s Secret中

将harbor的登录凭据保存到k8s Secret中,以供k8s服务拉取镜像使用:

可以通过如下方式在拉取镜像时使用:

使用kubectl get secrets可以查看Secret是否被正常创建:

2. 使用控制器部署镜像

2.1 部署项目依赖的Mysql数据库

注意,不建议在k8s中部署数据库:

  1. Mysql 属于重量级应用(负载高、吃资源、部署复杂)

  2. Mysql部署难度大,主要针对集群方式,每个集群的角色不同,需要使用StatefulSet

  3. Mysql是比较稳定的服务,极少会更新,享受不到k8s的特性

  4. 对服务性能会有一定的衰减,但是Mysql对性能要求很高

  5. 可以在k8s中部署单节点,可以享受k8s的快速部署


创建如下mysql deployment资源清单文件 mysql.yml(mysql5.7版本,不支持arm64):


执行部署并查看部署结果:

测试mysql是否正常连接(使用mysql-client镜像):

2.2 导入项目sql文件

准备sql文件:https://github.com/lizhenliang/tomcat-java-demo/blob/master/db/tables_ly_tomcat.sql

将该sql文件下载并拷贝到mysql-client中:

在mysql-client中使用mysql命令导入到数据库中:

2.3 创建ConfigMap保存项目配置文件

创建一个ConfigMap,它拥有一个 application.yml键,用于对应spring-boot项目的根配置,其内容拷贝自 https://github.com/lizhenliang/tomcat-java-demo/blob/master/src/main/resources/application.yml :

2.4 创建deployment

一般必须配置的几个属性:

  1. 环境变量

  2. 资源配额 (重要)

  3. 健康检查

  4. 卷挂载点

3. 对外暴露应用

3.1 配置Service

3.2 配置Ingress

3.3 增加公网负载均衡

image-20220208104847193

最后更新于

这有帮助吗?