美文网首页
k8s部署springboot项目

k8s部署springboot项目

作者: Aska小强 | 来源:发表于2022-04-27 21:12 被阅读0次

    k8s部署springboot项目

    本篇来演示一下 如何使用 k8s 来快速部署一个 springboot项目 ,体验一下 k8s和实际项目的结合

    image-20220417183622460

    1.环境准备

    • 操作系统:Centos7 (CentOS Linux release 7.9.2009)
    • Master 主节点: 1台 虚拟机
    • Node 计算节点: 2台 虚拟机
    • K8s version:v1.23.5 (选的较新的版本)
    • Docker version:20.10.14

    环境和前面中 kubeadm 搭建 k8s 的一致

    2.部署流程 概述

    1. 创建SpringBoot 项目 开放一个 /k8s/hello 接口 用于测试
    2. 通过编写 dockerfile 把springboot项目添加进去 构建一个镜像
    3. 把镜像 push 到对应的 阿里云仓库(或者harbor 等等..)
    4. 编写 k8s yaml 进行部署2个副本 + ingress 实现基本的负载均衡
    5. kubectl 进行部署
    6. 访问请求路径 进行测试

    3.创建springboot项目

    省略创建项目步骤

    提供一个 /k8s/hello 接口 接收一个 name 参数,打印并且返回

    image-20220417181249621

    4.编写 Dockerfile文件构建镜像

    dockerfile文件很简单 就是启动上面的springboot 项目

    4.1 Dockerfile 文件

    FROM openjdk:8-alpine
    
    COPY ./target/springboot-k8s-0.0.1-SNAPSHOT.jar /app/springboot-k8s-demo.jar
    
    ENTRYPOINT ["java", "-jar" , "/app/springboot-k8s-demo.jar"]
    

    4.2 执行构建命令

    docker build -t  boot-k8s-demo:v1 #构建镜像
    

    5.把镜像 push 到对应的 阿里云仓库

    这里简单使用 阿里云镜像仓库 作为 镜像存储地,可以根据实际情况 比如上传到 Harbor 等等都可以

    docker tag boot-k8s-demo:v1 registry.cn-hangzhou.aliyuncs.com/askajohnny/k8s:v1 #打标签 用于上传到 阿里云镜像仓库
    
    docker login --username=176xxxxx741 registry.cn-hangzhou.aliyuncs.com
    
    docker push registry.cn-hangzhou.aliyuncs.com/askajohnny/k8s:v1 #推送镜像到 阿里云仓库
    
    

    6.编写 k8s yaml 进行部署2个副本 + ingress 实现基本的负载均衡

    部署中 简单定义了Deployment 和 一个 Service 最后还定义了一个 Ingress 资源文件,前提是 已经部署了 Ingress-nginx 来解析这个文件(不详 可以看上一篇 关于 如何部署 Ingress-nginx )

    apiVersion: apps/v1
    kind: Deployment #部署
    metadata:
      name: springboot-app
    spec:
      replicas: 2 #2个副本
      selector:
        matchLabels:
          app: springboot-app
      template:
        metadata:
          labels:
            app: springboot-app
        spec:
          containers:
          - name: springboot-app
            image: registry.cn-hangzhou.aliyuncs.com/askajohnny/k8s:v1 #刚刚push到阿里云上的镜像地址
            ports:
            - containerPort: 8080 #默认springboot端口 
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      name: springboot-app
    spec:
      selector:
        app: springboot-app #选中上面的 Deployment
      ports:
      - port: 7003 #对外7003端口
        targetPort: 8080
    
    
    --- 
    #Ingress 
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: myingress
      labels:
        name: myingress
    spec:
      IngressClass: nginx
      rules:
      - host: springboot.demo.com #所有的host这个域名请求 转发到上面的 Service= springboot-app
        http:
          paths:
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: springboot-app # 转发到 这个Service 
                port: 
                  number: 7003 
    
    

    7. kubectl 部署 deploy-springboot-k8s.yaml

    使用 kubectl 进行部署上面的 部署文件

    kubect apply -f deploy-springboot-k8s.yaml
    
    image-20220417182441907
    kubectl get all #查看 default 下面的所有 
    
    image-20220417182540059

    可以看到 2个 副本pod 已经Running

    8.访问请求路径 进行测试

    访问前 需要先把 springboot.demo.com 域名添加到 宿主机的 /etc/hosts中 保证可以正常解析到 ingress-nginx那台机器上的nginx 即可 (不详 可以看上一篇)

    image-20220417182829210

    请求接口:http://springboot.demo.com/k8s/hello?name=johnny

    image-20220417182857132

    查看 两个副本的 日志,可以看到 Ingress 的默认轮训负载均衡策略也生效了 ,至此 k8s部署springboot项目已经结束

    image-20220417183050592

    总结

    本篇主要 讲解了 k8s 如何部署springboot项目,过程很简单 ,目前只是半手动部署,后面引入 CICD 实现真正的 自动化部署。

    欢迎大家访问个人博客 : https://www.askajohnny.com

    欢迎大家访问 个人博客 Johnny小屋

    相关文章

      网友评论

          本文标题:k8s部署springboot项目

          本文链接:https://www.haomeiwen.com/subject/zlglyrtx.html