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
 
posted @ 2023-03-12 22:44  Joson6350  阅读(307)  评论(0编辑  收藏  举报
欢迎联系