k8s部署springboot项目

稜镜柯里化
• 阅读 2352

k8s部署springboot项目

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

k8s部署springboot项目

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 参数,打印并且返回

k8s部署springboot项目

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

k8s部署springboot项目

kubectl get all #查看 default 下面的所有 

k8s部署springboot项目

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

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

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

k8s部署springboot项目

请求接口:http://springboot.demo.com/k8...

k8s部署springboot项目

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

k8s部署springboot项目

总结

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

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

欢迎大家访问 个人博客 Johnny小屋
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
kubernetes将外部服务映射为内部服务
在实际应用中,一般不会把mysql这种重IO、有状态的应用直接放入k8s中,而是使用专用的服务器来独立部署。而像web这种无状态应用依然会运行在k8s当中,这时web服务器要连接k8s管理之外的数据库,有两种方式:一是直接连接数据库所在物理服务器IP,另一种方式就是借助k8s的Endpoints直接将外部服务器映射为k8s内部的一个服务。下面这个例子就是
Easter79 Easter79
3年前
springboot使用之快捷打包部署
本篇关键知识点:Maven的assembly插件实现自定义打包部署(包含依赖jar包) 目前springboot项目的几种常见的部署方式。1\.使用docker容器去部署,将springboot的应用构建成一个dockerimage,然后通过容器去启动镜像,这种方式在
Easter79 Easter79
3年前
springboot打成的jar包如何在Linux上持久运行
一、首先说说在没有springboot的时候,项目是如何部署的?1.动态web项目动态web项目部署很方便,基本上上传文件到服务器的tomcat里面的webapps文件夹下即可完成部署。当然了,这种做法的弊端是,如果是通过winscp来传输对于网速方面要求严格,不然的话
GoCoding GoCoding
3年前
K8s 开始
是用于自动部署,扩展和管理容器化应用程序的开源系统。本文将介绍如何快速开始K8s的使用。了解K8s搭建K8s本地开发测试,需要搭建一个K8s轻量服务。实际部署时,可以用云厂商的K8s服务。本文以k3d为例,于macOS搭建K8s服务。于Ubuntu则推荐MicroK8s。其他可替代方案有:,,是Ra
Stella981 Stella981
3年前
Kubernetes(三):k8s集群部署之kubeadm
k8s部署环境公有云环境:AWS、腾讯云、阿里云等等私有云:OpenStack、vSphere等Baremetal环境:物理服务器或独立虚拟机(底层没有云环境)。k8s部署方式Minikube:Kubernetes官网提供的微型分布式环境(ht
Stella981 Stella981
3年前
K8S环境的Jenkin性能问题处理
环境信息在K8S环境通过helm部署了Jenkins(namespace为helmjenkins),用于日常Java项目构建:1.kubernetes:1.152.jenkins:2.190.23.helm版本:2.16.1如果您想了解helm部署Jenkins的详情,请参考《》问题描述在Jenkins任
Stella981 Stella981
3年前
SpringBoot2.X + 阿里云RocketMQ(78)
《SpringBoot2.X心法总纲》(https://my.oschina.net/mdxlcj/blog/3118723)前景:目前很多公司已经都在使用阿里云产品,数据库、监控、k8s、短信业务、直播等,而接下来描述的则是其中之一,如何对接快速使用阿里RocketMQ,而使用的是onsclient初级版本Springboot2.XRo
Easter79 Easter79
3年前
Springboot基于assembly的服务化打包方案
  在使用assembly来打包springboot微服务项目前,我想说一说,目前springboot项目的几种常见的部署方式。1. 使用docker容器去部署,将springboot的应用构建成一个dockerimage,然后通过容器去启动镜像,这种方式在需要部署大规模的应用和应用扩展时是非常方便的,属于目前工业级的部署方案,但是需要掌握d
Stella981 Stella981
3年前
Kubernetes 现终于成熟了,不在是大厂的标配
过去几年,以Docker、Kubernetes为代表的容器技术已发展为一项通用技术,BAT、滴滴、京东、头条等大厂,都争相把容器和K8S项目作为技术重心,试图“放长线钓大鱼”。就说阿里吧,目前基本所有业务都跑在云上,其中有一半已迁移到自己定制Kubernetes集群上。据说,今年计划完成100%基于K8S集群的业务部署。而服务网格这块
DevOpSec DevOpSec
2年前
自建k8s集群之负载均衡使用
自建k8s而非云环境,组件mysql类(部分有状态服务)部署在虚机里也即集群外,业务服务部署在k8s集群内。需求:集群内、集群外,业务服务和组件相互间通过负载均衡、高可用的形式连通。此需求拆解成两个问题进行解决,接着往下看。集群内:k8s集群集群外:k8s集群外的应用部署在虚拟机或物理机环境
稜镜柯里化
稜镜柯里化
Lv1
夏雨后路面发散的气息,也撩人绮思。
文章
8
粉丝
0
获赞
0