从0到1,使用Sealos搭建K8S集群,并成功部署SpringBoot、Vue2项目

1.Sealos(5.0.1)搭建K8S(1.30.5)集群

1.1 注(前提):

1.建议使用干净的操作系统来创建集群,不要自己装 Docker!,sealos会自动安装Docker。
2.服务器需开放以下端口:22(SSH)、6443(K8s API)、10250 等,建议直接关闭服务器的防火墙。
3.已安装并配置好 ssh,节点之间能互通。
4.每个集群节点应该有不同的主机名。主机名不要带下划线。

5.所有节点的时间需要同步(ntp或chrony)。

1.2 准备至少两台服务器(文档使用虚拟机运行,硬件限制,只准备两台服务器)

#Centos7、Linux
第一台:192.168.8.100  master

第二台:192.168.8.101  node

1.3 修改主机名,主机名不一致(每台服务器都执行,只改自己服务器的名字)

第一台:hostnamectl set-hostname master01

第二台:hostnamectl set-hostname node02

1.4 添加IP地址解析(每台服务器都执行)

如果不会查找ip,先搜索查找ip的方法,Centos下,需要修改配置文件,指定ip,且能ping通外网。

cat > /etc/hosts <<EOF

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.8.100 master01

192.168.8.101 node01

EOF

1.5 设置国内镜像、关闭防火墙、时间同步(每台服务器都执行)

# yum设置为国内源

sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

sudo yum clean all

sudo yum makecache

#永久关闭防火墙(重启后仍生效)

 sudo systemctl disable firewalld

\# 设置时间同步

sudo yum -y install ntpdate

sudo ntpdate ntp1.aliyun.com

1.6 Sealos 安装,自动部署K8S(主节点服务器执行)

1.6.1 解压Sealos安装包

# 自动下载安装
curl -sfL <https://raw.githubusercontent.com/labring/sealos/main/scripts/install.sh> | sh -s v5.0.1

# 若无法正常访问 github 可选择手动下载安装
# 通过网盘分享的文件:sealos_5.0.1_linux_amd64.tar.gz
# 链接: https://pan.baidu.com/s/1pziOrpcpRg51kKys13oGIw?pwd=q6th 提取码: q6th
# 下载后上传到服务器,执行以下命令手动安装
tar zxvf sealos_5.0.1_linux_amd64.tar.gz sealos \
  && chmod +x sealos && mv sealos /usr/bin

1.6.2 部署,这一个步骤需要复制Docker给node节点服务器,比较慢,耐心等待,以下三种方式按需选择,由于硬件限制,我用的是单Master集群部署

# All-in-One(本地单节点)适用于学习、验证功能、本地开发使用。
# 由于Sealos默认是使用的 containerd 作为运行时,命令跟原有的Docker不太一样
# 以下示例改为 Docker 作为运行时,若想保持默认,去掉镜像后面的-docker即可
sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes-docker:v1.30.5 \
  --single

# 单 Master 集群部署(轻量集群)
sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes-docker:v1.30.5 \
  --masters 192.168.8.100 \
  --nodes 192.168.8.101,192.168.xx.xx -p your-ssh-passwd

# 多 Master 高可用集群(推荐生产使用)
sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes-docker:v1.30.5 \
  --masters xxx,xxx,xxx \
  --nodes xxx,xxx -p your-ssh-passwd

1.6.3 安装常用应用组件,基本安装成功后,各节点才会变为Ready状态

# 一键安装 Helm

sealos run registry.cn-shanghai.aliyuncs.com/labring/helm:v3.8.2
\# 一键安装 [calico 网络]

sealos run registry.cn-shanghai.aliyuncs.com/labring/calico:v3.25.0

\# 一键安装 nginx ingress controller 为后续部署Java、Vue项目做准备

sealos run registry.cn-shanghai.aliyuncs.com/labring/ingress-nginx:v1.11.3

1.6.4 Ingress-Nginx和K8S版本兼容对照表

https://github.com/kubernetes/ingress-nginx可以找到

在这里插入图片描述

1.6.5 K8S集群可用性验证

kubectl get nodes 
#结果均要reday,如果不是,则自行排查一下问题所在

在这里插入图片描述

kubectl get pod -A
#结果均要running,如果不是,则自行排查一下问题所在

在这里插入图片描述

1.6.6 Sealos常用命令

# 增加 node 节点
sealos add --nodes 192.168.32.6

# 增加 master 节点
sealos add --masters 192.168.32.10

# 删除 node 节点
sealos delete --nodes 192.168.32.5

# 删除 master 节点
sealos delete --masters 192.168.32.10

# 一键清理 k8s 集群
sealos reset

# 查看命令助手
sealos help

1.6.7 总结:

Kubernetes 虽然功能强大,但部署门槛较高。

Sealos 将这一复杂过程变为“一条命令”,极大提升了部署效率和学习体验,适合初学者、本地开发者以及希望快速搭建测试环境的用户。

相比传统的 kubeadm 手动部署方式,sealos 带来了:

  • ✅ 极简命令:安装、运行、卸载全自动
  • ✅ 更少依赖:本地无需额外安装 Docker
  • ✅ 可移植性强:支持多种集群形态,支持云端和本地部署

2.安装Harbor镜像仓库(主节点服务器执行)

2.1 先安装Docker-Compose来管理Docker容器

2.1.1 安装部署Docker-Compose

#版本兼容暂无,建议使用稳定版本,可在线下载,也可以从github下载好后上传到服务器,示例:
wget https://github.com/docker/compose/releases/tag/v2.34.0/docker-compose-$(uname -

s)-$(uname -m)" -o /usr/local/bin/docker-compose

#加可执行权限 如果从本地上传到服务器,则省去第一步
#离线文件:通过网盘分享的文件:docker-compose-linux-x86_64 链接: https://pan.baidu.com/s/1ZgAkYAm36795KN3A9EWYMQ?#pwd=4ifa 提取码: 4ifa
#记得将文件放到/usr/local/bin目录下

chmod +x /usr/local/bin/docker-compose

2.1.2 校验docker-compose是否安装成功

docker-compose -v
#结果如图

在这里插入图片描述

2.2下载Harbor安装包并解压,在线下载较慢,直接 从本地上传到服务器

2.2.1 解压Haobor安装包

#离线文档通过网盘分享的文件:harbor-offline-installer-v2.11.0.tgz
#链接: https://pan.baidu.com/s/1RgGAnIg304ZkUUXISrrzXw?pwd=tt8u 提取码: tt8u
tar -xzvf harbor-offline-installer-v2.11.0.tgz -C /usr/local/

2.2.2 修改配置文件

cd /usr/local/harbor
#复制harbor.yml.tmpl 文件并重命名为harbor.yml修改此配置文件,需要设置hostname、端口

cp harbor.yml.tmpl harbor.yml

vim harbor.yml

#修改hostname的值,如果没有域名就使用本机IP地址

hostname: 192.168.8.100

#配置启动端口号

# http related config http:

# port for http, default is 80. If https enabled, this port will redirect to https port

port: 7881

# 如果没有申请证书,需要隐藏https

#https:

# https port for harbor, default is 443# port: 443

# The path of cert and key files for nginx# certificate: /your/certificate/path# private_key: #/your/private/key/path

改成如下样子,如图

在这里插入图片描述

2.2.3 启动Harbor

sh /usr/local/harbor/install.sh
#查看harbor组件状态,需要全部Up,这样才是启动成功,如图
docker-compose ps

在这里插入图片描述

2.2.4 登录Harbor

登录192.168.8.100:7881,账号amdin,密码Harbor12345,创建一个test、project项目,如图:

在这里插入图片描述

2.2.5 Docker登录Harbor,master、node节点均可执行。

docker login -u admin -p Harbor12345 http://192.168.8.100
# 如果登录报错,则修改/etc/docker/daemon.json文件,加上如下配置:
# "insecure-registries": ["192.168.8.100:5000"],然后重启docker和harbor。
#重启docker
sudo systemctl restart docker
# 先停掉 Harbor 所有容器
sudo docker-compose down
## 再启动
sudo docker-compose up -d
#查看harbor组件状态,需要全部up,这样才是启动成功
docker-compose ps

2.2.6 Docker登录Harbor成功之后,就可以推送一个镜像测试一下

#本地pull一个小镜像

docker pull cirros

#给镜像打标签(版本号)

docker tag cirros 192.168.8.100:7881/test/cirros:v2

#上传到仓库

#docker push 192.168.8.100:7881/test/cirros:v2

#另外一台服务器拉取镜像

docker pull 192.168.8.100:7881/test/cirros:v2

3.K8S部署vue、springboot前后端分离项目

3.1 前提:

将步骤1、步骤2完成

3.2 准备Vue2项目和配置文件

1.我的vue2项目是自己已经准备好的,和网上的vue-element-admin一个架构,都是基于vue-cli,自行准备一个可以运行的项目即可。
2.在项目中,我配置了打包后的路径,名称为cemis,如果和我的不同,自行看情况调整即可。
3.在vue项目src目录,执行npm run build 命令,打包后会生成dist目录,我的目录里面还会有一层cimis,如果没有配置,则没有这一层目录,没有区别。

在这里插入图片描述

4.在linux的root目录下,新建project文件夹,将cemis目录,通过传输软件,全部传输到project文件夹下
5.在project目录下新增两个文件:cemis-default.conf、Dockerfile-web-cemis,每行命令具体什么含义可以自行搜索一下。
cemis-default.conf 内容:

server {
    listen       7081;
    server_name  localhost;

    # 前端静态资源
    location /cemis/ {
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';

        alias   /usr/share/nginx/html/cemis/;
        index  index.html index.htm;
        try_files $uri $uri/ /cemis/index.html;
    }

    # 错误页
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
Dockerfile-web-cemis 内容:

FROM --platform=linux/amd64 nginx:stable-alpine

COPY cemis-default.conf /etc/nginx/conf.d/default.conf

ADD cemis /usr/share/nginx/html/cemis/

EXPOSE 7081

CMD ["nginx", "-g", "daemon off;"]

6.需要注意的点是,cemis-default.conf配置文件中,/cemis/这个路径,需要和前端文件vue.config.js下的publicPath保持一致,否则访问不到静态文件、图片等,也需要和后续K8S的yaml配置文件中,Ingress配置的前端代理路径保持一致。

在这里插入图片描述
在这里插入图片描述

3.3 准备SpringBoot项目和配置文件

1.我的SpringBoot项目是提前准备好的,日常项目即可,自行配置好application.yaml中的mysql配置和redis配置,application.yaml配置文件中,我暴露的端口为7034。
2.在IDEA中,打包成jar包,上传到/root/project目录下
3.在project目录下新增一个文件:Dockerfile-java-cemis,每行命令具体什么含义可以自行搜索一下。
Dockerfile-java-cemis 内容:

FROM openjdk:8-jdk

COPY sql /tmp/sql

# 拷贝 jar 包到镜像中
COPY cemis-boot-0.0.1-exec.jar  /tmp/app.jar

# 暴露端口
EXPOSE 7034

# 入口命令
ENTRYPOINT ["java", "-jar", "/tmp/app.jar"]
4.最终有这些文件,sql、cemis-config.conf文件不需要管,这是我自己需要的文件,按照上面的步骤,有其他文件即可。如图:

在这里插入图片描述

3.4 Dokcer打包镜像,上传Harbor仓库,准备K8S的yaml文件,启动java、vue项目

3.4.1 Dokcer打包镜像,上传Harbor仓库

1.打包命令,在/root/project目录下执行,v1属于版本号,每次重新打包需要修改,不能重复:
#后端
docker build -t 192.168.8.100:7881/project/java-cemis:v1 -f Dockerfile-java-cemis .
#前端
docker build -t 192.168.8.100:7881/project/web-cemis:v1 -f Dockerfile-web-cemis .
2.推送仓库命令,打包好的版本号是什么,推送的时候就写什么:
#后端
docker push 192.168.8.100:7881/project/java-cemis:v1
#前端
docker push 192.168.8.100:7881/project/web-cemis:v1
3.查看已经打包好的镜像:docker images

在这里插入图片描述

3.4.2 准备K8S的yaml文件,启动java、vue项目

1.创建一个cemis.yaml文件,自行根据自身情况调整一下,具体含义可以自行百度搜索一下,我这个文件,会创建两个后端,两个前端服务,通过Ingress进行复杂均衡、轮询,一个服务挂了,另外一个服务会顶替上去,保证服务健壮性,Ingress这些功能自行测试。内容如下:

# -------------------- 前端 Deployment --------------------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-cemis
  namespace: default
  labels:
    app: web-cemis
spec:
  replicas: 2
  selector:
    matchLabels:
      app: web-cemis
  template:
    metadata:
      labels:
        app: web-cemis
    spec:
      imagePullSecrets:
      - name: harbor-secret
      containers:
      - name: web-cemis
        image: 192.168.8.100:7881/project/web-cemis:v1   # 如有新版可继续改
        imagePullPolicy: Always
        ports:
        - containerPort: 7081
          name: web-cemis
        resources:
          requests:
            memory: 300Mi
            cpu: 200m
          limits:
            memory: 500Mi
            cpu: 400m

---
# -------------------- 前端 Service --------------------
apiVersion: v1
kind: Service
metadata:
  name: web-cemis
  namespace: default
  labels:
    app: web-cemis
spec:
  ports:
    - port: 7081
      protocol: TCP
      targetPort: 7081
  selector:
    app: web-cemis

---
# -------------------- 后端 Deployment --------------------
apiVersion: apps/v1
kind: Deployment
metadata:
  name: java-cemis
  labels:
    app: java-cemis
spec:
  replicas: 2
  selector:
    matchLabels:
      app: java-cemis
  template:
    metadata:
      labels:
        app: java-cemis
    spec:
      imagePullSecrets:
      - name: harbor-secret
      containers:
      - name: java-cemis
        image: 192.168.8.100:7881/project/java-cemis:v1   # 【变动1】使用 openjdk:8-jdk 完整版
        imagePullPolicy: Always
        ports:
        - containerPort: 7034
        resources:
          requests:
            memory: 300Mi
            cpu: 200m
          limits:
            memory: 500Mi
            cpu: 400m

---
# -------------------- 后端 Service --------------------
apiVersion: v1
kind: Service
metadata:
  name: java-cemis
  namespace: default
  labels:
    app: java-cemis
spec:
  ports:
    - port: 7034
      protocol: TCP
      targetPort: 7034
  selector:
    app: java-cemis

---
# --------------------  Ingress:一条规则同时暴露前端 & 后端 --------------------
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: reach-cemis-ingress
  annotations:
    nginx.ingress.kubernetes.io/validate: "false"
spec:
  rules:
  - host:
    http:
      paths:
      - path: /cemis
        pathType: Prefix
        backend:
          service:
            name: web-cemis
            port:
              number: 7081
      - path: /cemisApi
        pathType: Prefix
        backend:
          service:
            name: java-cemis
            port:
              number: 7034
2.需要注意的点是:
	1.cemis-default.conf配置文件中,/cemis/这个路径,要和K8S的yaml配置文件中,Ingress配置的前端代理路径保持一致。
	2.vue项目中,.env文件中的VUE_APP_API_BASE_URL值,需要和K8S的yaml配置文件中,Ingress配置的后端代理路径保持一致。

在这里插入图片描述

3.执行cemis.yaml文件,启动java、vue项目:
#在/root/project目录下,首次创建K8S执行yaml文件
kubectl create -f cemis.yaml
#成功之后,输入命令,查看执行情况
kubectl get pods -o wide
#如图,状态都为running即可,可以看到,都是部署在node01节点上,所以需要访问的是node01节点的ip

在这里插入图片描述

4.查看Ingress的nodeprot端口,通过这个端口访问前端项目即可
kubectl get svc -n ingress-nginx
#如图,端口为31182

在这里插入图片描述

5.访问http://192.168.8.101:31182/cemis/,一定不要漏了最后一个/,否则无法访问

在这里插入图片描述

3.4.3 java/vue项目需要更新,或者重新执行cemis.yaml文件

1.java/vue项目需要更新,先把代码重新打包,更新到服务器,然后重复执行打包docker镜像、推送仓库(记得修改版本号)。
2.然后执行命令,更新镜像即可,如果cemis.yaml文件没有改变配置,不需要重新执行cemis.yaml,命令如下:
#后端
kubectl set image deployment/java-cemis web-cemis=192.168.8.100:7881/project/java-cemis:v1
#前端
kubectl set image deployment/web-cemis web-cemis=192.168.8.100:7881/project/web-cemis:v1
3.如果修改了cemis.yaml的配置,且之前已经执行过cemis.yaml文件了,则执行如下命令:
kubectl apply -f cemis.yaml
4.注意点,以上两个命令,执行一种即可,kubectl apply -f cemis.yaml命令中,包含了拉取镜像的命令。

3.4 总结

部署过程中,会遇到各种各样的问题,不可能一帆风顺,问题不怕,根据自身情况,ai基本上都能帮忙排查,定位到问题所在,如果是本地测试,记得将防火墙永久关闭,否则重启服务器,防火墙会再次开启。

关关难过关关过,前路漫漫亦灿灿

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值