运维芋道项目实战
01项目介绍及后端服务构建
部署地址:https://gitee.com/zhijiantianya/yudao-cloud
项目是前后端分离的
后端使用spring cloud,前端使用vue3
这篇文章先把后端环境配置好,能够成功构建服务
这里使用的系统是ubuntu:22.04
下载JDK21
网址:https://jdk.java.net/archive/

配置JAVA环境
上传到linux系统中,之后解压,这里我将压缩包放到了/opt目录下
cd /opt
tar -zxvf openjdk-21.0.2_linux-x64_bin.tar.gz
编辑文件/etc/profile在文件最后添加三行内容 (系统环境变量,对所有用户生效)
export JAVA_HOME=/opt/jdk-21.0.2
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${CLASSPATH}:${JAVA_HOME}/bin:$PATH
或
编辑文件~/.bashrc在文件最后添加三行内容 (用户环境变量,只对当前用户生效)
export JAVA_HOME=/opt/jdk-21.0.2
export CLASSPATH=.:${JAVA_HOME}/lib
export PATH=${CLASSPATH}:${JAVA_HOME}/bin:$PATH
重新加载配置(根据自己配置选择一个命令)
source ~/.bashrc
source /etc/profile
查看JAVA版本
java –version
如果版本为openjdk 21.0.2,说明没有问题
安装配置maven
网址:https://maven.apache.org/download.cgi?.

跟jdk一样,文件存放到/opt/
tar -zxvf apache-maven-3.9.11-bin.tar.gz
vim /etc/profile
export M2_HOME=/opt/apache-maven-3.9.11
export PATH=$M2_HOME/bin:$PATH
配置生效
source /etc/profile
检查版本输出是否正常,出现版本安装完成
mvn -v

配置国内源,更改配置文件/opt/maven/conf/settings.xml
找到<mirrors>标签行,将下面内容添加到此标签内 aliyunmaven central aliyun maven https://maven.aliyun.com/repository/public
下载后端源码
mkdir -p /opt/gitdir
cd /opt/gitdir
git clone https://gitee.com/zhijiantianya/yudao-cloud.git
切换分支 由于官方更新了项目,将master-jdk21分支替换为了master-jdk17,所以这里跟视频不一样。又因为官方更新速度比较快,有时候新代码无法通过构建,使用时无需追求最新的代码而是选择一个稳定能够通过的代码。项目提供了tag,可以切换到最新的tag来成功构建。可以在项目下执行git tag来查看项目所有的tag,这里使用最新的tag:
cd yudao-cloud/
查看版本
git tag
选择相对应的最新版本
git checkout “v2025.08(jdk17/21)”
构建项目
mvn clean package -Dmaven.test.skip=true
02.中间件服务搭建
要将服务都启动起来需要一些基础设施,也就是中间件
这里必须搭建的有3个
Mysql:数据库Redis:缓存Nacos:注册中心配置中心
由于现在官方docker无法直接下载,所以之后的镜像地址都提供可以直接使用的地址,大家复制粘贴即可直接使用。
这里我的虚拟机ip为192.168.163.135,之后代码中相关配置,注意要更改为自己机器的ip地址
部署mysql
使用Docker部署mysql数据库
docker run -d -p 3306:3306 \
--restart=unless-stopped \
--name=yudao_mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-v "/etc/localtime:/etc/localtime" \
-v yc_mysql:/var/lib/mysql \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mysql:8.4.2
导入数据
使用mysql创建数据库ruoyi-vue-pro
导入后端项目下sql目录中的ruoyi-vue-pro.sql进行初始化
可以使用以下命令初始化:
cd /opt/gitdir/yudao-cloud/sql/mysql
docker exec -i yudao_mysql mysql -uroot -p123456 -e 'CREATE DATABASE `ruoyi-vue-pro`;'
docker exec -i yudao_mysql mysql -uroot -p123456 ruoyi-vue-pro < ./ruoyi-vue-pro.sql
修改后端配置中数据库地址
数据库连接配置在application-local.yaml文件中,默认是使用127.0.0.1:3306端口,并且账号是root,密码是123456
我们需要修改其ip地址,因为文件比较多,我们使用shell批量替换
以下所有的查找替换操作都是在项目的根目录下执行的
查找所有application-local.yaml查看其中的数据库配置
find ./ -name application-local.yaml -exec grep -l 'jdbc:mysql://127.0.0.1:3306' {} +
更改数据库配置中的ip地址,注意更换为自己的ip地址
find ./ -name application-local.yaml -print0 | xargs -0 sed -i 's|jdbc:mysql://127.0.0.1:3306|jdbc:mysql://192.168.163.135:3306|g'
查看更改后的内容
find ./ -name application-local.yaml -exec grep 'jdbc:mysql://192.168.163.135:3306' {} +
Redis
部署redis
使用Docker部署redis
docker run -d \
--restart=unless-stopped \
--name=yudao_redis \
-v "/etc/localtime:/etc/localtime" \
-p 6379:6379 \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.2.5
修改Redis配置
修改后端配置中redis的地址
find ./ -name application-local.yaml -print0 | xargs -0 sed -i 's|host: 127.0.0.1 # 地址|host: 192.168.163.135 # 地址|g'
查看更改后内容
find ./ -name application-local.yaml -exec grep 'host: 192.168.163.135 # 地址' {} +
Nacos
部署Nacos
使用Docker部署Nacos
docker run -d \
-p 8848:8848 \
-p 9848:9848 \
--restart=unless-stopped \
--name=yudao_nacos \
-e MODE=standalone \
-v "/etc/localtime:/etc/localtime" \
swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/nacos/nacos-server:v2.4.0
创建命名空间
创建dev命名空间,按图填写

修改Nacos配置
修改后端配置中Nacos的地址
find ./ -name "application-*.yaml" -exec sed -i 's|server-addr: 127.0.0.1:8848|server-addr: 192.168.163.135:8848|g' {} +
确认修改结果
grep -R 'server-addr' ./ --include \*.yaml
03.启动基础后端服务
重新构建
重新构建后端项目
进入项目根目录
cd /opt/gitdir/yudao-cloud
mvn clean install package '-Dmaven.test.skip=true'
启动主要后端服务
启动gateway服务
这个服务的主要提供API 服务网关,提供用户认证、服务路由、灰度发布、访问日志、异常处理等功能。
构建完成后yudao-gateway/target/目录下会有一个yudao-gateway.jar文件,使用java -jar xxx.jar启动这个文件即可,注意要写对路径
之后的后端服务也是一样的方式启动,文档演示时的当前目录为项目的根目录(就是/opt/gitdir/yudao-cloud)
创建screen会话 这个命令可以在一个终端窗口中创建多个虚拟终端,能让程序在虚拟终端中保持前台执行.哪怕你的终端窗口关闭也不受影响
screen -R gateway
启动服务
java -jar yudao-gateway/target/yudao-gateway.jar
按下按键Ctrl+A,松开后再按一下D,就能分离screen窗口,回到之前的终端

启动system服务
此服务主要是实现系统功能的模块
java -jar ./yudao-module-system/yudao-module-system-server/target/yudao-module-system-server.jar
http://192.168.163.135:48080/admin-api/system http://192.168.163.135:48081/admin-api/system

启动infra服务
此服务与系统的基础设施相关
java -jar ./yudao-module-infra/yudao-module-infra-server/target/yudao-module-infra-server.jar
http://192.168.163.135:48080/admin-api/infra/ http://192.168.163.135:48082/admin-api/infra/

05.服务容器化
之前我们已经成功启动服务了,但是启动方式比较麻烦
需要启动多个screen虚拟终端,要么就启动多个窗口
这节将前后端服务都制作成docker镜像,这样启动和管理就会方便很多
部署到其他机器上都不用考虑环境的问题,无论宿主机上是否有java21
只要有docker,那么启动就不会有任何问题
制作后端Docker镜像
分别进入各自的子目录,项目自己提供了Dockerfile文件,不需要我们生成。可以更改FROM基于的镜像下载更快。
进行替换FROM 三次
gateway镜像
cd yudao-gateway/
vim Dockerfile
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:21-jre
docker build -t yudao_gateway .
system镜像
cd /opt/gitdir/yudao-cloud/yudao-module-system/yudao-module-system-server
vim Dockerfile
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:21-jre
docker build -t yudao_system .
infra镜像
cd /opt/gitdir/yudao-cloud/yudao-module-infra/yudao-module-infra-server
vim Dockerfile
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:21-jre
docker build -t yudao_infra .
启动后端容器
在启动之前要先停止之前启动的服务,停止之后再启动docker
服务启动的时候会自动注册地址到nacos中
如果使用docker的网络注册到nacos中的地址就是docker内部地址
如果3个服务在同一个机器上还好,如果在不同的机器上,是无法通过docker内部地址访问的
这里为了方便,我们使用host的网络方式
这样docker使用宿主机的ip地址,注册时也是宿主机的ip地址
之后服务启动到k8s中不会有这个问题,因为k8s使用网络插件可以打通多个节点之间的网络,使用内部ip地址也可以进行通信
通过下面命令启动3个后端服务
docker run -d \
--network=host \
--name yudao_gateway \
-v "/etc/localtime:/etc/localtime" \
yudao_gateway
docker run -d \
--network=host \
--name yudao_system\
-v "/etc/localtime:/etc/localtime" \
yudao_system
docker run -d \
--network=host \
--name yudao_infra\
-v "/etc/localtime:/etc/localtime" \
yudao_infra
启动之后,可以通过docker logs来查看服务的日志,参数-f可以实时查看日志的更新,查看完毕后使用Ctrl+C来退出查看
docker logs -f yudao_gateway
docker logs -f yudao_system
dcoker logs -f yudao_infra
制作前端docker镜像
需要我们到linux上下载项目之后构建
先安装环境,到nodejs官网下载linux下使用的包:Node.js — Download Node.js® (nodejs.org)

这个版本也是会随着时间更新的,只要选择20.x的LTS版本即可 下载好的文件为node-v20.17.0-linux-x64.tar.xz 上传到机器的/opt/目录下
cd /opt
tar xvf node-v20.17.0-linux-x64.tar.xz
添加配置到/etc/profile最下面
export NODE_HOME=/opt/node-v20.19.4-linux-x64
export PATH=$PATH:$NODE_HOME/bin
重新加载配置
source ~/.bashrc
克隆前端项目
cd /opt/gitdir
git clone https://gitee.com/yudaocode/yudao-ui-admin-vue3.git
cd yudao-ui-admin-vue3
git tag
git checkout v2025.08
sed -i 's|localhost|192.168.163.135|g' .env.local
注意下面配置文件.env.dev内容中的ip地址,改为自己的后端ip地址
...
# 请求路径
VITE_BASE_URL='http://192.168.163.135:48080'
# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
VITE_UPLOAD_TYPE=server
# 上传路径
VITE_UPLOAD_URL='http://192.168.163.135:48080/admin-api/infra/file/upload'
....
构建项目
npm config set registry https://registry.npmmirror.com
npm install pnpm -g
pnpm config set registry https://registry.npmmirror.com
pnpm install
pnpm build:dev
需要注意的是,构建这个前端项目需要8G左右的内存,否则会失败。 之后项目会将编译好的前端静态页面存放到当前目录下的dist目录中 制作镜像,新建Dockerfile文件,写入以下内容 Dockerfile
FROM nginx:1.27
ADD ./dist/ /usr/share/nginx/html/
构建镜像
docker build -t yudao_ui_admin .
启动容器
docker run --name yudao_ui_admin -d -p 8080:80 yudao_ui_admin
访问页面http://192.168.163.135:8080

06–Harbor镜像仓库
下载github离线包
网址: Releases · goharbor/harbor · GitHub

上传文件到/opt/
tar -xzvf harbor-offline-installer-v2.13.2.tgz
cd harbor/
下载docker-compose
网址: Releases · docker/compose · GitHub

上传到/opt/harbor
修改名称
mv docker-compose-linux-x86_64 docker-compose
给执行权限
chmod +x ./docker-compose
移动到PATH目录下
mv docker-compose /usr/local/bin
测试
docker-compose -v
在/opt/harbor目录下
复制出.yml文件
cp harbor.yml.tmpl harbor.yml
修改文件harbor.yml
vim harbor.yml
修改ip,注释https

执行安装脚本
./install.sh
访问 192.168.163.135:80
admin
Harbor12345
07.搭建K8S集群
环境介绍
使用3台机器搭建一个1个master节点,2个node节点的集群
使用的操作系统为ubuntu:22.04
k8s版本为1.29
docker版本为28.3.3
docker-cri版本为
角色 ip
master 192.168.163.11
node1 192.168.163.12
node2 192.168.163.13
确保每台机器的时间一致,并且主机名不同
检查当前时间和时区
timedatectl
如果时区不对:
sudo timedatectl set-timezone Asia/Shanghai
修改主机名
sudo hostnamectl set-hostname master
sudo hostnamectl set-hostname node1
sudo hostnamectl set-hostname node2
修改本地解析文件
vim /etc/hosts
三个都要改

重启系统或者服务使改动生效:
sudo systemctl restart systemd-logind.service
安装最新版Docker 必须使用v25以上版本的docker
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
关闭swap分区 到/etc/fstab中注释掉swap相关挂载 之后执行
swapoff -a

安装cri-docker
网址: Release v0.4.0 · Mirantis/cri-dockerd · GitHub

下载后将其解压复制到/home/skcheng下(自己的家目录,或root目录,自己根据情况修改)
tar -zxvf cri-dockerd-0.3.12.amd64.tgz
install -o root -g root -m 0755 /home/skcheng/cri-dockerd/cri-dockerd /usr/bin/cri-dockerd
cd /usr/bin
ls | grep cri
检查是否安装成功
cri-dockerd –version
创建文件/etc/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
创建文件/etc/systemd/system/cri-docker.socket
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
启动cri-docker
systemctl daemon-reload systemctl enable –now cri-docker.socket
安装对应软件包 kubeadm:用于初始化集群 kubelet:在集群中每个节点上用来启动pod和容器 kubectl:与集群通信的命令行工具
使用国内源安装
apt-get update && apt-get install -y apt-transport-https
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl # 锁定版本,apt upgrade时不会更新
master节点配置kubeadm
创建文件kubeadm_init.yaml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.163.11 #根据自己IP修改
bindPort: 6443
nodeRegistration:
criSocket: unix:///var/run/cri-dockerd.sock
imagePullPolicy: IfNotPresent
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.29.1
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16
scheduler: {}
下载镜像
kubeadm config images pull –config ./kubeadm_init.yaml

报错
原因:Linux 内核模块 br_netfilter 没加载
Kubernetes 的网络插件(CNI)需要这个内核模块来处理桥接网络流量和 iptables 规则
解决办法
加载内核模块
sudo modprobe br_netfilter
开启 bridge-nf-call-iptables
sudo sysctl -w net.bridge.bridge-nf-call-iptables=1 sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=1
永久生效
sudo tee /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sudo sysctl –system
验证是否生效
cat /proc/sys/net/bridge/bridge-nf-call-iptables
输出应该是 1
初始化K8S集群
kubeadm init –config ./kubeadm_init.yaml
复制config文件到指定目录
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
配置集群网络
配置最简单的Flannel网络
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
运行命令检查coreDNS pod是否处于Running状态 (我等了四五分钟)
kubectl get pods -A
node节点加入集群
sudo kubeadm join 192.168.163.11:6443 \
--token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:a7fbe0387f422c2c0a95798eafe4298e7379fb135e735023dbf3f0307ed727eb \
--cri-socket unix:///var/run/cri-dockerd.sock
执行命令查看集群中所有的节点
kubectl get nodes
08.安装K8S组件
搭建完k8s集群之后,我们还需要安装一些组件 有4个组件需要安装 helm:类似apt那样的包管理工具 dashboard:仪表盘,更直观的查看k8s中的资源情况 nginx ingress:整个集群的出口,相当于最集群前端的nginx meatllb:让服务的LoadBalancer可以绑定局域网ip
Helm

下载后上传到服务器,解压复制到/usr/bin/目录下
tar xvf helm-v3.14.2-linux-amd64.tar.gz mv linux-amd64/helm /usr/bin/
Dabshboard
7.0之后的版本只能使用helm安装
添加存储库
helm repo add kubernetes-dashboard https://kubernetes.github.io/dashboard/
安装或者升级dashboard
helm upgrade --install kubernetes-dashboard kubernetes-dashboard/kubernetes-dashboard --create-namespace --namespace kubernetes-dashboard
创建服务账户 新建文件dashboard-adminuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
应用到集群
kubectl apply -f dashboard-adminuser.yaml
创建令牌,用于页面登录
kubectl -n kubernetes-dashboard create token admin-user
复制输出的内容,这个就是登录要用到的令牌
ingress
GitHub – kubernetes/ingress-nginx
下载yaml文件
下载配置文件
wget -O nginx_ingress.yaml https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.0/deploy/static/provider/cloud/deploy.yaml
替换其中用到的镜像
提取一下镜像版本
controller_v=`grep image: nginx_ingress.yaml|grep controller|uniq|grep -oP 'v\K[0-9]+\.[0-9]+\.[0-9]+'`
webhook_v=`grep image: nginx_ingress.yaml|grep webhook|uniq|grep -oP 'v\K[0-9]+\.[0-9]+\.[0-9]+'`
更改为阿里云镜像
sed -i "s|registry.k8s.io/ingress-nginx/controller:v.*|registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v$(echo $controller_v)|" nginx_ingress.yaml
sed -i "s|registry.k8s.io/ingress-nginx/kube-webhook-certgen:v.*|registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v$(echo $webhook_v)|" nginx_ingress.yaml
应用到集群
kubectl apply -f nginx_ingress.yaml
查看pod启动状态
kubectl get pod -n ingress-nginx
2个状态为Completed,1个状态为Running即为成功,如下

Meatllb
github仓库地址:metallb/metallb
使用helm进行安装
添加repo源
helm repo add metallb https://metallb.github.io/metallb
安装
helm install metallb metallb/metallb
等待pod准备就绪

创建配置meatllb.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
spec:
addresses:
- 192.168.163.200-192.168.163.240
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: example
应用到集群
kubectl apply -f meatllb.yaml
4个组件安装完毕
09.K8S配置镜像仓库
之前我们已经生成了前后端的镜像,也安装了Harbor镜像仓库 现在需要将相关镜像推送到镜像仓库中 K8S再从镜像仓库中拉取服务的镜像启动
节点信任镜像仓库
因为我们没有为镜像仓库配置证书,所以我们需要在docker的配置中设置信任镜像仓库才能够正常的使用镜像仓库
需要编辑docker的配置文件/etc/docker/daemon.json
添加以下内容,这个ip地址是我镜像仓库的ip地址,如果镜像仓库不是使用的80端口,还需要添加对应的端口
{
"insecure-registries" : ["192.168.163.135"]
}
如果我们之前添加过国内镜像仓库,那么配置文件看起来就是这样
{
"insecure-registries" : ["192.168.163.135"],
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
如果harbor的端口不是80,就要在135后添加” :端口号 “
更改完之后,需要重新启动docker服务
systemctl restart docker
这个操作需要在K8S集群的node节点和镜像上传节点上操作,对应本次实战项目就是12, 13,135三台机器,因为master不需要运行应用服务,所以不用修改
推送前后端镜像到镜像仓库
镜像推送到镜像仓库,需要使用docker tag生成新的镜像名称和版本 使用下面命令更改镜像名称
docker tag yudao_ui_admin 192.168.163.135/library/yudao_ui_admin
docker tag yudao_infra 192.168.163.135/library/yudao_infra
docker tag yudao_system 192.168.163.135/library/yudao_system
docker tag yudao_gateway 192.168.163.135/library/yudao_gateway
上传到镜像仓库
docker push 192.168.163.135/library/yudao_ui_admin
docker push 192.168.163.135/library/yudao_infra
docker push 192.168.163.135/library/yudao_system
docker push 192.168.163.135/library/yudao_gateway
上传的时候可能要登录,不然会失败
docker login 192.168.163.135
admin
Harbor12345
之后到harbor站点上查看镜像是否上传成功 启动一个服务查看是否能成功拉取镜像 k8smaster运行
kubectl create deployment yudao-ui-admin --image=192.168.163.135/library/yudao_ui_admin
10.K8S中启动项目
我们所有的前置工作都做完了,可以进行服务的启动了 中间件服务(mysql,redis,nacos)就沿用之前搭建的服务 因为是有状态服务所以就不放到k8s中了
后端服务的启动
后端3个服务(gateway,system,infra) 直接启动
kubectl create deployment yudao-gateway --image=192.168.163.135/library/yudao_gateway
kubectl create deployment yudao-system --image=192.168.163.135/library/yudao_system
kubectl create deployment yudao-infray --image=192.168.163.135/library/yudao_infra

配置域名解析
之前我们使用的是ip地址加端口号的方式,使用ingress之后必须使用域名,这样才能把对应的路径的请求转发到后端服务
这里需要配置两个域名,通过更改hosts文件的方式来改变电脑的域名解析
文件位置如图(C:\Windows\System32\drivers\etc)
用管理员权限打开记事本,找到hosts
查看ingress暴露的ip地址,这里暴露的地址是192.168.163.200
kubectl get svc ingress-nginx-controller -n ingress-nginx
#---
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.101.148.148 192.168.163.200 80:31482/TCP,443:31823/TCP 25h
将域名解析到192.168.163.200 在hosts文中添加以下内容,注意域名自己

前端服务的启动
因为之后要使用域名访问,所以前端访问后端服务的地址也要改成域名的方式,需要更改重新构建前端项目 编辑前端项目下的.env.local文件 修改内容如图

pnpm build:dev
docker build -t 192.168.163.135/library/yudao_ui_admin:v1 .
docker push 192.168.163.135/library/yudao_ui_admin:v1
因为上一节最后的时候我们再]在k8s中启动了ui服务 这里我们先删除之前启动的服务,再重新创建
kubectl delete deployment yudao-ui-admin
kubectl create deployment yudao-ui-admin --image=192.168.163.135/library/yudao_ui_admin:v1
为2个服务创建SVC
需要为gateway服务和前端服务创建一个SVC,方便ingress调用 创建文件svc_yudao.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: yudao-gateway
name: yudao-gateway
spec:
ports:
- port: 48080
protocol: TCP
targetPort: 48080
selector:
app: yudao-gateway
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
labels:
app: yudao-ui-admin
name: yudao-ui-admin
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: yudao-ui-admin
type: ClusterIP
应用配置
kubectl apply -f svc_yudao.yaml
Ingress的配置
在ingress中配置两个域名指向的服务 创建配置ingress_yudao.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
creationTimestamp: null
name: yudao
spec:
ingressClassName: nginx
rules:
- host: api.skc.net
http:
paths:
- backend:
service:
name: yudao-gateway
port:
number: 48080
path: /
pathType: Prefix
- host: www.skc.net
http:
paths:
- backend:
service:
name: yudao-ui-admin
port:
number: 80
path: /
pathType: Prefix
kubectl apply -f ingress_yudao.yaml
查看ingress,等待分配ip地址
kubectl get ingress
#---------
NAME CLASS HOSTS ADDRESS PORTS AGE
yudao nginx api.net.ymyw,www.net.ymyw 192.168.163.200 80 94s
之后就可以访问页面http://www.skc.net/
能够登录,说明部署没有任何问题
显示这个页面的话,VPN关一下

火狐浏览器登录
