运维芋道项目实战

运维芋道项目实战

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窗口,回到之前的终端

http://192.168.163.135:48080

启动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

GitHub

下载后上传到服务器,解压复制到/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关一下

火狐浏览器登录

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇