原文网址: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
结果
访问接口: