searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

k8s部署Springboot项目

2024-06-04 09:07:04
18
0

1、必要条件

  • k8s环境。

  • Docker Harbor私有仓库,用于将打包的docker镜像推送到仓库。准备完成后在需要使用仓库的机器docker login。

  • 开发机器需要Docker环境,build及push使用。

2、构建SpringBoot项目

pom文件中添加maven插件,以便打包过程中暴露主程序。

进行maven package:

将得到的jar包传输到服务器上。

3、构建镜像

  • Dockerfile文件

FROM openjdk:11.0.12
MAINTAINER wyh
ADD SpringBootForK8s-1.0-SNAPSHOT.jar app.jar
EXPOSE 8001
ENTRYPOINT ["java", "-jar"]
CMD ["app.jar"]

Dockerfile与jar包放在同一路径下:

  • 构建镜像

docker build -f Dockerfile -t springboot-k8s-jar .

-t表示新构建镜像的名称,最后的.表示当前目录。

构建完成后,docker images即可查看。

4、推送到harbor仓库并推送镜像

1)安装docker-compose

  • 下载二进制文件

curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • 设置compose权限

chmod +x /usr/local/bin/docker-compose
  • 验证安装是否成功

docker-compose --version

2)安装harbor

  • 下载harbor

  • 解压安装

tar -xvf  harbor-online-installer-v2.4.1.tgz -C /usr/local
#进入harbor文件夹
cd harbor
  • 配置IP端口

更改harbor.yml.tmpl文件,配置IP以及端口。IP配置为本机IP,端口改成5000(避免80端口被其他程序占用)。

将harbor.yml.tmpl复制为harbor.yml:

cp harbor.yml.tmpl harbor.yml
  • 修改/etc/docker/daemon.json文件

vi /etc/docker/daemon.json

在daemon.json文件中写入:

{
"registry-mirrors": ["https://nzhix59d.mirror.aliyuncs.com"],
"insecure-registries": ["ip:port"]
}

指定insecure-registries信任的ip,IP为harbor仓库所在服务器的公网IP。

重启docker:

systemctl restart docker.service
  • 启动harbor

#安装并生成dockerfile
./install.sh    

编辑harbor.yml,将其中https的配置注释掉:

./prepare
#启动harbor
sudo docker-compose up -d      
  • 网站上打开并创建仓库

IP:5000 打开网站登录

Harbor默认用户名:admin

Harbor默认密码:xxx
  • 新建仓库

3)push镜像到仓库

  • docker login

docker login ip:port  #harbor仓库所在服务器的公有IP

输入用户名与密码即可显示登录成功。

  • 更改镜像的标签

docker tag springboot-k8s-jar ip:port/xxx/springboot-k8s-jar:latest #ip为harbor服务器的公网IPport为harbor对外暴露的端口。
  • 推送镜像到仓库

docker push ip:port/xxx/springboot-k8s-jar:latest

5、k8s部署

1)创建deploy.yaml文件

apiVersion: apps/v1
kind: Deployment #指定资源类别
metadata: #资源的一些元数据
      name: springboot-k8s-deployment #deployment的名称
      labels:
              app: springboot-k8s-deployment #标签
spec:
      replicas: 2 #创建Pod的个数
      selector:
              matchLabels:
                      app: springboot-k8s-deployment
      template:
              metadata:
                      labels:
                              app: springboot-k8s-deployment
              spec:
                      containers:
                              - name: springboot-k8s-jar
                                image: ip:port/xxx/springboot-k8s-jar:latest
                                imagePullPolicy: IfNotPresent
                                ports:
                                        - containerPort: 8001

2)创建service.yaml文件

apiVersion: v1
kind: Service
metadata:
      name: springboot-k8s-service
      labels:
              app: springboot-k8s-service
spec:
      type: NodePort
      ports:
              - port: 8001   #Pod对外暴露的端口
                nodePort: 30001 #对外暴露的Node端口
      selector:
              app: springboot-k8s-deployment

3)运行kubectl create -f deploy.yaml创建Deployment

可以先在node节点上执行:docker pull 39.107.224.148:5000/wuyuehong/springboot-k8s-jar:latest,将镜像拉取下来,这样k8s创建的Pod的就不需要去仓库中拉取镜像了(因为设置了imagePullPolicy: IfNotPresent),加快启动速度。

完成后执行kubectl get pods,可以看到启动了两个Pod。

4)运行kubectl create -f service.yaml创建Service

可以看到,Service监控了两个Pod。

5)运行kubectl logs -f podsname查看日志

kubectl logs -f springboot-k8s-deployment-566f99bb79-jsxv6
0条评论
0 / 1000