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

结果

访问接口:

相关推荐
梁同学与Android1 小时前
Android ---【内存优化】常见的内存泄露以及解决方案
android·java·内存泄漏
来自于狂人1 小时前
AI大模型训练的云原生实践:如何用Kubernetes指挥千卡集群?
人工智能·云原生·kubernetes
武子康2 小时前
Java-71 深入浅出 RPC Dubbo 上手 父工程配置编写 附详细POM与代码
java·分布式·程序人生·spring·微服务·rpc·dubbo
潘yi.2 小时前
Kubernetes高级调度1
云原生·容器·kubernetes
武子康4 小时前
Java-72 深入浅出 RPC Dubbo 上手 生产者模块详解
java·spring boot·分布式·后端·rpc·dubbo·nio
_殊途5 小时前
《Java HashMap底层原理全解析(源码+性能+面试)》
java·数据结构·算法
椰椰椰耶6 小时前
【Spring】拦截器详解
java·后端·spring
没有bug.的程序员7 小时前
JAVA面试宝典 - 《MyBatis 进阶:插件开发与二级缓存》
java·面试·mybatis
没有羊的王K8 小时前
SSM框架学习——day1
java·学习
又菜又爱coding8 小时前
安装Keycloak并启动服务(macOS)
java·keycloak