天翼云-cce集群-应用部署手册
在没有cicd的情况下,如何将应用部署到天翼云cce集群。
部署步骤
- 构建docker镜像(前端、后端)
- 在天翼云-cce集群中创建命名空间
- 在天翼云-cce集群中部署后端服务
- 在天翼云-cce集群中部署前端服务
构建docker镜像
后端
编写Dockerfile
java后端服务Dockerfile 示例
FROM 192.168.30.106/library/openjdk:11.0.13-jre
WORKDIR /app
# 须替换COPY jar包的源路径
COPY darksmoke-docking-server/target/darksmoke-docking-server-0.0.1-SNAPSHOT.jar ./app.jar
CMD [ "java", "-jar", "app.jar" ]
Dockerfile 文件存储路径规范
一个git仓库单服务或单体应用类型,此类情况Dockerfile通常存放于git仓库根目录下/Dockerfile
一个git仓库多服务类型,此类情况Dockerfile通常存放于/Dockerfiles/Dockerfile-xxxx(xxxx替换为服务名称)参考 http://192.168.30.109/uav/sd/uav-fssd/-/tree/master/Dockerfiles?ref_type=heads
构建镜像
# 克隆git仓库并进入仓库目录
cd vuav-water
# 构建源码
mvn package
# 构建镜像
docker build -t registry.cn-gdgz1.ctyun.cn/hn-soft/ai-detect/uav-water:0.0.21 -f Dockerfile .
将Docker镜像推送到天翼云仓库
# 登录天翼云-镜像仓库
docker login -u {username} -p {password} {url}
# 推送镜像
docker push {url}/hn-soft/ai-detect/uav-water:0.0.21
前端
编写Dockerfile
**前端服务Dockerfile **
FROM 192.168.30.106/library/node:12.22.6 AS build
WORKDIR /app
COPY . .
RUN npm config set registry http://192.168.30.106:8081/repository/npm-public/
RUN npm install
RUN npm run build:prod
# 使用 Nginx 作为生产环境的服务器
FROM 192.168.30.106/library/nginx:1.27
# 复制构建的文件到 Nginx 的默认静态文件目录
COPY --from=build /app/dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
Dockerfile 文件存储路径规范
- 一个git仓库单服务或单体应用类型,此类情况Dockerfile通常存放于git仓库根目录下/Dockerfile
构建镜像
找一台装有docker的linux主机
# 克隆git仓库并进入仓库目录
git clone http://192.168.30.109/ai-detect/water/uav-water-web.git
# 进入仓库目录
cd uav-water-web
# 构建镜像
docker build -t {url}/hn-soft/ai-detect/uav-water-web:0.0.21 -f Dockerfile .
在天翼云-cce集群中创建命名空间
创建命名空间
命名空间的作用主要是用于隔离不同的应用,与gitlab的组类似。
进入天翼云控制台 –> 选择 云容器引擎 CCE –> 如下图
创建命名空间,生产环境命名规则 prod-xxxx
部署后端应用
根据下图中 标注的步骤顺序操作。
- 选择命名空间
- 点击工作负载
- 点击无状态工作负载
- 创建工作负载
选择或切换命名空间
创建工作负载
填写工作负载基本信息
- 工作负载名称: 一般是应用名称
- 副本数 :根据需要是否设置多副本
填写容器配置
- 容器名称 统一都是app
- 镜像名称 填入上面推送到天翼云-镜像库的镜像地址
- 填写容器端口映射
存储挂载
- 配置中心-配置字典-创建ConfigMap
- 添加条目-填写key名称(application.yml/application-prod.yml)-将配置文件粘贴到右边-保存
服务配置
- 填写服务端口
创建工作负载
查看容器组是否就绪
待容器组ready后,此容器才能对外提供服务。如果始终不ready则须查看日志或事件进行排查。
部署前端应用
前端应用通常是编译好的纯静态文件,通常使用nginx进行托管。在容器中则需要使用nginx的基础镜像进行打镜像,详情见前面的章节 构建前端镜像
。另外由于前后端使用同一个域名的话,则需要在前端的容器中配置nginx的反向代理,反向代理的配置是nginx原生的配置文件语法。为了比较灵活的处理,在构建前端镜像时并没有将nginx的配置文件写死到镜像中,那么在k8s中配置文件的处理通常使用configmap资源对象进行配置,而后将其挂载到容器中的某个路径。所以下面我们将先创建一个nginx配置文件的configmap(配置字典)。
创建nginx反代配置
准备nginx配置文件
apiVersion: v1
kind: ConfigMap
metadata:
# name通常为应用名称
name: uav-water-web
# 创建的目标命名空间,必须跟应用在同一个命名空间中
namespace: prod-ai-detect
data:
default.conf: |
server {
listen 80;
# 这里需要修改后端服务的接口路径
location ^~ /uav-water/ {
# 这里需要根据情况修改为后端应用的服务名称及端口和接口路径
proxy_pass http://uav-water:8080/uav-water/;
proxy_set_header Host jeecg-boot-system;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
root /usr/share/nginx/html/;
index index.html index.htm;
}
}
创建nginx配置文件configmap(配置字典)
将如上准备好的文本文件复制一下稍后贴入输出窗口。
创建前端应用
填写基本信息
- 工作负载名称:通常是应用名称
- 副本数: 根据需要配置副本数量
配置容器信息
- 名称: 统一为app
- 容器镜像: 为如上章节构建的前端docker镜像
配置存储挂载
- 数据卷名称
- 选择配置字典
- 选择上面创建的配置字典
- 填写挂载路径
配置服务信息
配置路由
点击保存
等待服务就绪
配置域名解析
在域名提供商系统上将域名解析到14.116.214.129即可访问。
给pod配置时区
运维操作
镜像同步至天翼云镜像仓库
前置条件,在内网以及打好镜像并推送到192.168.30.106上。
# ssh到192.168.30.124
# 用户名密码:root/28099668#hn
# !!! 请注意这台机器有专门的用处,请不要操作与同步镜像无关的操作
# 同步镜像
sync_image 192.168.30.106/shucaiyi/scy-api:v1.0.1-prod