K8S--部署SpringBoot项目实战

原文网址:K8S--部署SpringBoot项目实战-CSDN博客

简介

本文介绍K8S如何部署SpringBoot项目。


分享Java真实高频面试题,吊打面试官: Java后端真实面试题大全 - 自学精灵

分享靠谱的Java高级实战,包含:高并发、架构、全局处理等:JavaWeb高级实战 - 自学精灵

1.生成应用的docker镜像

把SpringBoot项目的jar包打包为docker镜像,见:Docker Compose--部署SpringBoot项目--实战-CSDN博客

创建后的镜像名称为: custom_docker-springboot

2.部署Harbor

可以使用阿里云镜像仓库,也可以自己部署Harbor。

我这里自己部署Harbor,见:Docker Compose系列--安装harbor--方法/实例-CSDN博客

我的Harbor地址是:192.168.5.193:15001

部署之后,创建一个项目,本处我创建的项目是:custom_image

3.添加Harbor私库的源

docker和k8s都需要修改。(所有机器都要修改)

1.修改docker

修改/etc/docker/daemon.json文件,添加如下内容:

复制代码
"insecure-registries":["192.168.5.193:15001"]

如下图所示:

修改完之后,重启docker:

复制代码
systemctl daemon-reload
systemctl restart docker

可以用docker info命令查看是否修改成功:

2.修改k8s

见:K8S--解决containerd拉镜像的报错:http: server gave HTTP response to HTTPS client-CSDN博客

4.生成并推送应用镜像

将SpringBoot项目的镜像推送到上边搭建的Harbor私库。

如果以前生成过镜像,先删除一下:

复制代码
docker rmi 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0 --force

1.生成镜像

法1:直接生成镜像

bash 复制代码
docker build -t 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0 . --no-cache

法2:通过已有镜像来生成

bash 复制代码
docker tag custom_docker-springboot:1.0 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0

2.推送镜像

bash 复制代码
docker push 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0

结果

3.查看镜像

去harbor上查看:(可以发现,已经上传上来了)

5.编写应用的K8S配置文件

1.创建命名空间

创建命名空间配置文件java-app-namespace.yaml,如下

复制代码
# 创建命名空间
apiVersion: v1
kind: Namespace
metadata:
  name: java-app
  labels:
    name: java-app

然后创建它:

bash 复制代码
kubectl apply -f java-app-namespace.yaml

2.创建K8S配置文件

在某个目录(本处是/work/devops/k8s/app/demo-springboot)创建k8s.yaml文件,内容如下:

bash 复制代码
# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-springboot-deployment
  namespace: java-app
  labels:
    app: demo-springboot #与Service的selector对应
spec:
  # 副本的数量
  replicas: 2
  selector:
    # 选择Pod
    matchLabels:
      app: demo-springboot
  # 选择或创建的Pod的模板
  template:
    metadata:
      # 与Deployment的selector对应
      labels:
        app: demo-springboot
    spec:
      imagePullSecrets:
        - name: harbor-secret

      containers:
        - image: 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0
          name: custom-docker-springboot-1-0
          # 每次都从远程拉取镜像。默认是IfNotPresent,每次拉取的都是本地的镜像(之前的)
          imagePullPolicy: Always
          env:
            - name: TZ
              value: Asia/Shanghai
          ports:
            - containerPort: 8080
              name: pod-8080

---
# 创建Service
apiVersion: v1
kind: Service
metadata:
  name: demo-springboot-service
  namespace: java-app
  labels:
    app: demo-springboot
spec:
  ports:
    - name: demo-springboot-port
      port: 9000   # Service监听的端口
      targetPort: 8080  # pod自身暴露的端口。对应Deployment的containerPort
      # 对外的端口号
      nodePort: 30004
  # 选择Deployment
  selector:
    app: demo-springboot
  # NodePort类型可以对外暴露端口
  type: NodePort

6.启动应用的Pod

到/work/devops/k8s/app/demo-springboot目录下,执行:

bash 复制代码
​kubectl apply -f k8s.yaml

7.查看启动结果并测试

1.在k8s的dashboard上查看

发现已经成功运行。

2.看日志

法1:dashboard上查看

法2:查看宿主机的卷映射

注意:

两个pod的日志都打印到一个文件里边去了。这里后期会进行优化,每个pod输出到一个文件里。

法3:用命令查看日志

复制代码
kubectl logs demo-springboot-deployment-7755445878-7wn5r -n java-app

结果

3.访问接口进行测试

访问一下SpringBoot的端口:http://192.168.5.193:30004/doc.html

结果

访问接口:

相关推荐
程序猿阿越11 分钟前
Kafka源码(一)Controller选举与创建Topic
java·后端·源码
程序无bug16 分钟前
Spring6 当中 Bean 的生命周期的详细解析:有五步,有七步,有十步
java
二川bro19 分钟前
飞算智造JavaAI:智能编程革命——AI重构Java开发新范式
java·人工智能·重构
Q_9709563937 分钟前
java+vue+SpringBoo校园失物招领网站(程序+数据库+报告+部署教程+答辩指导)
java·数据库·vue.js
Wyc724091 小时前
Maven
java·数据库·maven
程序猿小D1 小时前
[附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的电影小说网站管理系统,推荐!
java·数据库·mysql·spring·毕业设计·ssm框架·电影小说网站
木头没有瓜2 小时前
idea离线安装插件
java·ide·intellij-idea
llwszx2 小时前
Spring中DelayQueue深度解析:从原理到实战(附结构图解析)
java·后端·spring·delayqueue·延迟任务
述雾学java2 小时前
Spring Cloud Feign 整合 Sentinel 实现服务降级与熔断保护
java·spring cloud·sentinel