- 名词解释
- 部署流程
- 更新流程
- 1. 安装docker harbor私仓
- 2. 在docker harbor私仓中创建项目及账号
- 3. 创建数据库
- 4. 前端工程镜像打包,及推送至harbor私仓
- 1.安装工程依赖(首次)
- 2.打包
- 3.制作镜像
- 4.通过docker进行编译
- 5.推送镜像到私仓
- 6.登录私仓查看结果
- 5. 后端工程镜像打包,及推送至harbor私仓
- 1. IDE打包jar包
- 2. 制作镜像
- 3. 通过docker进行编译镜像
- 4. 推送镜像到私仓
- 5. 登录私仓查看结果
- 6. 编写k8s拉取镜像的yaml脚本
- 确定k8s部署的命名空间
- 登录kuboard管理工具
- 查看命名空间
- 前端工程
- 创建
Deployment.yaml
文件 - 后端工程
- 创建
Deployment.yaml
文件 - 配置后端路由
- Nacos配置
- k8s直接配置
- 7. kuboard操作并拉取镜像部署
- 登录kuboard管理工具
- 进入
ext
命名空间 - 从yaml创建
- k8s直接配置[可选]
- 8. 镜像、配置更新,部署运维等
- 镜像版本调整
- 镜像回滚
- 编辑yaml
名词解释
- 命名空间:服务运存在K8S集群的命名空间
- harbor私仓:docker 镜像私有仓库,存放多个项目及工程打包后的镜像、版本
- 工程镜像tag:通过
docker build
、docker push
命令构建镜像得到,K8S运行的Docker镜像版本 - 域名:服务访问的主入口,K8S需要通过域名来转发代理请求到各个服务
- 伪域名:在没有申请到域名的情况下,可以通过更改本机的host文件内,IP对应的英文名的形式,实现伪域名访问网站的功能。
- 服务入口:主入口下的二级目录;
部署流程
以若依前后端分离版本
为例
- 安装docker harbor私仓
- 在docker harbor私仓中创建项目及账号
- 创建数据库
- 前端工程镜像打包,及推送至harbor私仓
- 后端工程镜像打包,及推送至harbor私仓
- 编写k8s拉取镜像的yaml脚本
- kuboard操作并拉取镜像部署
更新流程
首次将前后端工程部署至k8s,需要配置如Dockerfile
、default.conf
、Deployment.yaml
等配置文件,但在后续更新过程中,在路由等配置不变的情况下,这些文件往往也不需要做什么调整,所以更新流程会比较简洁。
- 前端工程镜像打包,及推送至harbor私仓
- 后端工程镜像打包,及推送至harbor私仓
- k8s修改镜像版本,自动拉取及部署
1. 安装docker harbor私仓
为了便于管理及维护工程镜像版本,推荐使用harbor私仓管理工程迭代过程中的镜像源及版本
安装方式不具体讲解,请自行查阅资料
2. 在docker harbor私仓中创建项目及账号
根据研发管理体系,创建不同的项目及账号,将不同业务线、业务组按项目划分
注意:私仓中的项目需要为公开
项目,否则k8s无法从私有项目拉取镜像
这里不详细展开讲解创建项目步骤,请自行查阅资料。
本教程创建pi-lz
项目,作为后续存储镜像源。
3. 创建数据库
涉及到后端工程部署,对数据库在哪里没有特别要求,只要部署后能访问到即可。
注意:数据库需支持utf8mb4_general_ci
格式
创建数据库命令如下
CREATE DATABASE IF NOT EXISTS `数据库名` DEFAULT CHARACTER SET utf8mb4 COLLATE 'utf8mb4_general_ci';
4. 前端工程镜像打包,及推送至harbor私仓
前端工程打包镜像及推送harbor私仓步骤为:
- 安装工程依赖(首次)
- 打包
- 制作镜像
- 通过docker进行编译镜像
- 推送镜像到私仓
- 登录私仓查看结果
注意:打包时,工程名称和描述文件中的工程名称尽量保持一致
1.安装工程依赖(首次)
执行命令,安装依赖
# cd到前端工程目录
cd /www/ruoyi/RuoYi-Vue-master/ruoyi-ui
# 指定安装源,速度快一些
npm install --registry=https://registry.npmmirror.com
2.打包
工程每次发版都需要打包
执行打包命令
npm run build:prod
成功后,ruoyi-ui
目录下,生成dist
文件夹
3.制作镜像
在不调整路由等情况下,往往只需要做一次。
文件建议放在工程根目录管理
在工程根目录(ruoyi-ui
下)创建Dockerfile
和default.conf
文件
下面2个文件模板是根据若依前端调整,具体可以由飞企协助调整后作为终版模板。
Dockerfile文件格式如下:
FROM node:14-alpine as builder
WORKDIR /build
COPY . .
RUN npm install --registry=https://registry.npmmirror.com
RUN npm run build:prod
FROM nginx:alpine
MAINTAINER 罗震<lz@demo.cn>
USER root
WORKDIR /usr/share/nginx/html/myfronted
COPY default.conf /etc/nginx/conf.d/
COPY --from=builder /build/dist /usr/share/nginx/html/myfronted/
expose 80
default.conf文件格式如下:
server {
listen 80;
server_name localhost;
charset utf-8;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/error.log error;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 根据实际地址替换,如: http[s]://域名:端口号/ruoyi-admin/
proxy_pass $后端访问地址 ;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
4.通过docker进行编译
在工程根目录(ruoyi-ui
下)运行命令,进行编译
# 私仓地址:为Harbor私仓url地址(不需要http[s]://),如dev.demo.cn:8082
# 项目名称:为Harbor私仓项目名称,如pi-lz(本教程为pi-lz)
# 工程名称:自定义,但不能和已上线镜像名相同,如my_fronted
# TAG版本:当前镜像版本,相同版本会覆盖私仓版本,如0.0.1
docker build -t 私仓地址/项目名称/工程名称:TAG版本 .
如:
docker build -t dev.demo.cn:8082/pi-lz/my_fronted:0.0.1 .
5.推送镜像到私仓
使用命令登录到个人私仓(首次,未过期情况下无需再次Login)
# 私仓地址:为Harbor私仓url地址(需要http[s]://),如https://dev.demo.cn:8082
# 回车后,需要输入创建的账号密码
docker login 私仓地址
使用命令推送build
成功的镜像至私仓
# 私仓地址:为Harbor私仓url地址(不需要http[s]://),如dev.demo.com:8082
# 项目名称:为Harbor私仓项目名称,如pi-lz(本教程为pi-lz)
# 工程名称:自定义,但不能和已上线镜像名相同,如my_fronted
# TAG版本:当前镜像版本,相同版本会覆盖私仓版本,如0.0.1
docker push 私仓地址/项目名称/工程名称:TAG版本 .
如:
docker push dev.demo.cn:8082/pi-lz/my_fronted:0.0.1
6.登录私仓查看结果
浏览器访问私仓地址
,登录账号密码
,查看项目
中是否存在push
后的镜像及版本
5. 后端工程镜像打包,及推送至harbor私仓
后端工程打包镜像及推送harbor私仓步骤为:
- IDE打包jar包
- 制作镜像
- 通过docker进行编译镜像
- 推送镜像到私仓
- 登录私仓查看结果
注意:打包时,工程名称和描述文件中的工程名称尽量保持一致
1. IDE打包jar包
由于使用IDE打开工程后,会自动安装依赖,这里跳过安装依赖步骤
自有的后端脚手架,只需打包成jar文件即可
这里不描述打包方式,如IDEA使用maven clean package
进行打包
2. 制作镜像
在工程根目录创建Dockerfile
文件
Dockerfile文件格式如下:
请根据实际注释,调整文件内容
FROM dev.demo.cn:8082/library/openjdk-fonts:8.302-jdk-alpine
MAINTAINER 罗震<lz@demo.cn>
EXPOSE 8080
WORKDIR /app
COPY ./target/ruoyi-admin.jar ./server.jar
ENTRYPOINT exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /server.jar $ENV_PROFILE
3. 通过docker进行编译镜像
和前端工程步骤一致
4. 推送镜像到私仓
和前端工程步骤一致
5. 登录私仓查看结果
和前端工程步骤一致
6. 编写k8s拉取镜像的yaml脚本
创建Deployment.yaml脚本,并描述相关信息。
请在这里描述,为什么要这样做!!!!!!!!!!!!!!
确定k8s部署的命名空间
登录kuboard管理工具
Kuboard运维管理工具
访问地址:http://域名:30080
默认账号:admin
默认密码: Kuboard123
查看命名空间
我们为客户部署的环境,自带
ext
命名空间,推荐直接使用
- 点击
default
集群
- 查看
ext
命名空间是否存在
前端工程
创建Deployment.yaml
文件
创建使用下面的Deployment.yaml
后,粘贴并修改下面模板。
推荐Deployment.yaml
放到工程根目录中,一同管理。
注1:yaml中工程名不能有_
下划线
注2:yaml中真实域名不能有端口号
apiVersion: apps/v1
kind: Deployment
metadata:
name: $替换成工程名(如:myfronted)
labels:
app: $替换成工程名(如:myfronted)
k8s.kuboard.cn/layer: 'web'
namespace: $替换成真实命名空间(如:ext)
spec:
replicas: 1
selector:
matchLabels:
app: $替换成工程名(如:myfronted)
template:
metadata:
labels:
app: $替换成工程名(如:myfronted)
spec:
containers:
- name: $替换成工程名(如:myfronted)
image: 私仓地址/项目名称/工程名称:TAG版本(如:dev.demo.cn:8082/pi-lz/my_fronted:0.0.1)
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 80
timeoutSeconds: 1
dnsConfig:
nameservers:
- 114.114.114.114
terminationGracePeriodSeconds: 60
---
apiVersion: v1
kind: Service
metadata:
name: $替换成工程名(如:myfronted)
namespace: $替换成真实命名空间(如:ext)
labels:
app: $替换成工程名(如:my_fronted)
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
app: $替换成工程名(如:my_fronted)
---
kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
name: $替换成工程名(如:my_fronted)
namespace: $替换成真实命名空间(如:ext)
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
nginx.ingress.kubernetes.io/proxy-body-size: 200m
spec:
rules:
- host: $替换成真实域名(如:如:dev.demo.cn)
http:
paths:
- path: /$替换成服务入口(如:my_fronted)(/|$)(.*)
backend:
serviceName: $替换成工程名(如:my_fronted)
servicePort: 80
后端工程
创建Deployment.yaml
文件
创建使用下面的Deployment.yaml
后,粘贴并修改下面模板。
推荐Deployment.yaml
放到工程根目录中,一同管理。
apiVersion: apps/v1
kind: Deployment
metadata:
name: $替换成工程名(如:ruoyi-admin)
labels:
app: $替换成工程名(如:ruoyi-admin)
k8s.kuboard.cn/layer: 'svc'
namespace: $替换成真实命名空间(如:ext)
spec:
replicas: 1
selector:
matchLabels:
app: $替换成工程名(如:ruoyi-admin)
template:
metadata:
labels:
app: $替换成工程名(如:ruoyi-admin)
spec:
containers:
- name: $替换成工程名(如:ruoyi-admin)
image: 私仓地址/项目名称/工程名称:TAG版本(如:dev.demo.cn:8082/pi-lz/ruoyi-admin:0.0.1)
imagePullPolicy: IfNotPresent
envFrom:
- configMapRef:
name: pai-env-base
ports:
- containerPort: 8080
protocol: TCP
- containerPort: 2201
protocol: TCP
readinessProbe:
failureThreshold: 3
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
tcpSocket:
port: 8080
timeoutSeconds: 1
dnsConfig:
nameservers:
- 114.114.114.114
terminationGracePeriodSeconds: 60
---
apiVersion: v1
kind: Service
metadata:
name: $替换成工程名(如:ruoyi-admin)
namespace: $替换成真实命名空间(如:ext)
labels:
app: $替换成工程名(如:ruoyi-admin)
spec:
type: NodePort
ports:
- name: web
port: 8080
protocol: TCP
targetPort: 8080
- name: health
port: 2201
protocol: TCP
targetPort: 2201
selector:
app: $替换成工程名(如:ruoyi-admin)
配置后端路由
每个工程增加路由,只需做首次,后续无需重复
配置后端路由有2种方式:Nacos配置、k8s直接配置
配置方式二选一,取决于后端使用的技术栈,如果使用了Nacos,则用Nacos配置,反之使用k8s
注:由于若依未使用Nacos技术,所以使用k8s直接配置
Nacos配置
如果后端工程使用nacos,则通过Nacos来配置路由
- 登录Nacos管理工具
访问地址:https://域名/nacos
默认账号:nacos
默认密码:nacos
- 修改
nacos
配置文件
需要去nacos
的prod
命名空间,找到pai-gateway-prod.yaml
并编辑,加上此服务的路由。
放到id: index-workbench
之前
- id: $替换成工程名(如:ruoyi-admin)
uri: lb://$替换成工程名(如:ruoyi-admin)
predicates:
- Path=/$替换成工程名(如:ruoyi-admin)-api/**
filters:
- StripPrefix=1
点击发布
配置完,当k8s部署工程成功后,访问的地址为:http[s]://域名/ruoyi-admin
访问
k8s直接配置
k8s直接配置,需要在k8s拉取镜像后操作,请见第7章(下一章)第6节
7. kuboard操作并拉取镜像部署
前后端操作一致
拉取镜像的操作只需做一次,后续升级无需再重复拉取,只需调整镜像版本,见第8章
登录kuboard管理工具
Kuboard运维管理工具
访问地址:http://域名:30080
默认账号:admin
默认密码: Kuboard123
进入ext
命名空间
- 点击
default
集群
- 点击
ext
命名空间
- 展开
常用操作
从yaml创建
- 点击
从yaml创建
- 选择yaml文件
- 查看yaml文件,确定
- 查看结果
等待k8s拉取镜像并启动,需要几分钟的时间。
点击该微服务,可以查看进度及详情
- 查看部署情况及分析部署日志
k8s拉取镜像后,会执行运行工程。此时,工程如果运行报错,则根据报错信息调整镜像,重新拉取
k8s直接配置[可选]
如果后端工程不是用Nacos配置路由,则使用这种方式配置
- 访问kuboard管理工具
- 进入
ext
命名空间 - 选择应用程序 - 应用路由菜单
- 创建新的路由
- 添加新的路由规则(将域名和路径映射换成自己的)
配置完,当k8s部署工程成功后,访问的地址为:http[s]://域名/ruoyi-admin
访问
8. 镜像、配置更新,部署运维等
镜像版本调整
仅需调整镜像版本,即可
修改版本号,k8s会自动从私仓拉取新的版本镜像。可以实现镜像升级、回滚
镜像回滚
除
镜像版本调整
之外,通过点击历史版本也可以实现回滚操作
编辑yaml
不建议直接修改yaml,而是通过
编辑
的方式,修改配置内容
编辑中,包括了yaml脚本的配置项,不易出错