kubernetes(二)实战项目部署 部署一个简单的springboot
实战部署项目
1、 k8s中部署Java项目的流程
- ① 通过Dockerfile制作镜像。
- ② 将镜像推送到镜像仓库,比如阿里云镜像仓库等。
- ③ Pod控制器部署镜像。
- ④ 创建Service对外暴露应用。
- ⑤ 对集群进行监控、升级等。
2、准备Java项目,并将项目进行打包
- JDK 8 。
- Maven 3.6x。
演示的SpringBoot项目
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>springboot2</artifactId>
<version>1.0</version>
<name>springboot2</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- HelloController.java
package com.kubernetes.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author hyq
* @version 1.0
* @description TODO
* @date 2023/3/12 19:52
*/
@RestController
public class HelloController {
@RequestMapping(value = "/hello")
public String hello(){
return "hello";
}
}
使用Maven进行打包
- 打包命令:
mvn clean install

在项目的根目录下新建Dockerfile文件
FROM openjdk
VOLUME /tmp
COPY springboot2-1.0.jar springboot2-1.0.jar
RUN bash -c "touch /springboot2-1.0.jar"
# 声明时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 8080
ENTRYPOINT ["java","-jar","/springboot2-1.0.jar"]
下图中是直接将springboot2 上传到服务器的dockerfile文件,其实只要上传springboot2-1.0.jar 和dockerfile文件即可

制作镜像
在master节点 创建springboot2目录:

可以只上传jar包和Dockerfile文件,上传到springboot2目录
cd springboot2
- 使用docker build构建镜像:
# springboot是镜像的名称
docker build -t springboot2 .

可以将镜像推送到阿里云镜像仓库,再拉取,以下是简单版本,直接本地构建:
- 查看上传的Docker镜像的id:
docker images

- 给镜像打tag:(注意更换id)
sudo docker tag bc56e4a83ff7 registry.cn-hangzhou.aliyuncs.com/k8s-test-123/springboot2:latest

部署镜像暴露应用
- 创建deployment.yaml文件,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: springboot2
name: springboot2
spec:
replicas: 3
selector:
matchLabels:
app: springboot2
template:
metadata:
labels:
app: springboot2
spec:
containers:
- image: registry.cn-hangzhou.aliyuncs.com/k8s-test-123/springboot2:latest
name: springboot2
- 创建Deployment:
kubectl create -f deployment.yaml

- 查看Deployment和Pod:
kubectl get deploy,pod

- 创建service.yaml文件,内容如下:
apiVersion: v1
kind: Service
metadata:
labels:
app: springboot2
name: svc
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
nodePort: 30091
selector:
app: springboot2
type: NodePort
创建Service:
kubectl create -f service.yaml
- 查看Service:
kubectl get service

浏览器打开:http://192.168.101.131:30091/hello
成功返回 hello

本文来自博客园,作者:Joson6350,转载请注明原文链接:https://www.cnblogs.com/josonhuang/p/17209478.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?