首页 > 其他分享 >K8S 创建Spring-boot项目并进行项目启动与访问

K8S 创建Spring-boot项目并进行项目启动与访问

时间:2024-05-04 17:55:05浏览次数:26  
标签:kubectl k8s demo app boot Spring node1 docker K8S

 

##Spring-boot  的helloworld 项目

package com.example.demo;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import lombok.extern.slf4j.Slf4j;

@RestController
@RequestMapping("/test")
@Slf4j
public class HelloWorldController {

    // 假设 DatePatten 类中定义了如下常量  
    // public static final DateTimeFormatter NORM_DATETIME_MS_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");  

    @GetMapping("/test1") // 推荐使用 @GetMapping 而不是 @RequestMapping("/test1")  
    public String test1() {
        // 假设 LocalDateTimeUtil 有一个静态方法 format 来格式化 LocalDateTime  
        // String formattedDateTime = LocalDateTimeUtil.format(LocalDateTime.now(), DatePatten.NORM_DATETIME_MS_FORMATTER);  

        // 如果没有 LocalDateTimeUtil,您可以直接使用 DateTimeFormatter  
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
        String formattedDateTime = LocalDateTime.now().format(formatter);

        log.info("执行时间:{}", formattedDateTime); // 使用 log 而不是 System.out.println  
        return "升级之后的项目";
    }
}

 

编写Dockerfile

[root@node1 kubectl]# more Dockerfile
#penJDK 17作为基础镜像  
#FROM openjdk:17-jre-slim  
#FROM openjdk:11-jre-slim
FROM eclipse-temurin:17-jre  
  
# 设置工作目录为/app  
WORKDIR /app  
  
# 将当前目录中的jar包复制到容器的/app目录下  
COPY hello-world-0.0.1-SNAPSHOT.jar /app/app.jar  
  
# 暴露应用程序端口(这里假设你的Spring Boot应用程序在8080端口上运行)  
EXPOSE 8080  
  
# 在容器启动时运行jar包  
CMD ["java", "-jar", "app.jar"]

构建镜像    镜像名称    my-spring-boot-app 版本 v2

 

[root@node1 kubectl]# docker build -t my-spring-boot-app:v2 .
[+] Building 0.4s (2/2) FINISHED                                                                                                                                                                  docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 505B                                                                                                                                                                        0.0s
 => CANCELED [internal] load metadata for docker.io/library/eclipse-temurin:17-jre                                                                                                                          0.4s
ERROR: failed to solve: Canceled: context canceled
[root@node1 kubectl]# docker build -t hello-world-app:v2 .
[+] Building 17.3s (8/8) FINISHED                                                                                                                                                                 docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                                        0.0s
 => => transferring dockerfile: 505B                                                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/eclipse-temurin:17-jre                                                                                                                                  16.6s
 => [internal] load .dockerignore                                                                                                                                                                           0.0s
 => => transferring context: 2B                                                                                                                                                                             0.0s
 => [1/3] FROM docker.io/library/eclipse-temurin:17-jre@sha256:15b50cf95210242511c17e1ec8281fd691ad7d34f163c250a21298943d65de87                                                                             0.0s
 => [internal] load build context                                                                                                                                                                           0.2s
 => => transferring context: 21.47MB                                                                                                                                                                        0.2s
 => CACHED [2/3] WORKDIR /app                                                                                                                                                                               0.0s
 => [3/3] COPY hello-world-0.0.1-SNAPSHOT.jar /app/app.jar                                                                                                                                                  0.1s
 => exporting to image                                                                                                                                                                                      0.2s
 => => exporting layers                                                                                                                                                                                     0.1s
 => => writing image sha256:1e8dbdc55dddcc23adfae071a4c8ede5a5f76a5388a822024eb64b9a015c3648                                                                                                                0.0s
 => => naming to docker.io/library/hello-world-app:v2  

 

我这是上传到阿里云的镜像仓库  登录阿里云镜像仓库,并上传文件到仓库  记得替换自己的镜像ID tag

https://cr.console.aliyun.com/repository/cn-hangzhou/kubectlte/hello-world-app/details

 

$ docker login --username=15539211956 registry.cn-hangzhou.aliyuncs.com
$ docker tag 1e8dbdc55ddd registry.cn-hangzhou.aliyuncs.com/kubectlte/hello-world-app:v2
$ docker push registry.cn-hangzhou.aliyuncs.com/kubectlte/hello-world-app:v2

上传成功后,可以在仓库查看

 然后编辑 helloworld的yaml 

[root@node1 kubectl]# more helloworld.yaml 
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: k8s-demo
spec: 
  selector: 
    matchLabels: 
      app: k8s-demo
  replicas: 2  #2个副本
 
  template: 
    metadata:
      labels: 
        app: k8s-demo
    spec: 
      containers: 
      - name: k8s-demo
        image: registry.cn-hangzhou.aliyuncs.com/kubectlte/hello-world-app:v1 # 记得改
        ports: 
        - containerPort: 8080
---
# 创建Pod的Service service的80端口指向pod的8080
apiVersion: v1
kind: Service
metadata: 
  name: k8s-demo
spec: 
  type: NodePort
  ports: 
  - port: 7003
    targetPort: 8080
  selector: 
    app: k8s-demo
---

创建pod、service 

[root@node1 kubectl]# kubectl create -f helloworld.yaml

查看pod

[root@node1 kubectl]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
k8s-demo-6646c6b47b-2rdvp 1/1 Running 0 3h8m 10.244.2.25 node2 <none> <none>
k8s-demo-6646c6b47b-mb599 1/1 Running 0 3h8m 10.244.1.18 node1 <none> <none>

查看service 

[root@node1 kubectl]# kubectl get service -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
k8s-demo NodePort 10.101.189.212 <none> 7003:30073/TCP 3h8m app=k8s-demo

查看 deploy

[root@node1 kubectl]# kubectl get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
k8s-demo 2/2 2 2 3h10m k8s-demo registry.cn-hangzhou.aliyuncs.com/kubectlte/hello-world-app:v1 app=k8s-demo

查看node

[root@node1 kubectl]# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master Ready control-plane,master 6d2h v1.23.0 10.0.4.17 <none> CentOS Linux 7 (Core) 3.10.0-1160.99.1.el7.x86_64 docker://25.0.5
node1 Ready <none> 6d2h v1.23.0 10.0.12.2 <none> CentOS Linux 7 (Core) 3.10.0-1160.108.1.el7.x86_64 docker://25.0.3
node2 Ready <none> 6d2h v1.23.0 10.0.16.3 <none> CentOS Linux 7 (Core) 3.10.0-1160.108.1.el7.x86_64 docker://25.0.3
访问的话 可以通过 nodeip + port    如 

curl  10.0.12.2:30073/test/test1 进行项目访问 
curl   10.0.16.3:30073/test/test1 进行项目访问 

需要开通节点的外网的端口 不然无法访问

 

 kubectl logs -f pod名称 就可以查看pod的日志输出

 

标签:kubectl,k8s,demo,app,boot,Spring,node1,docker,K8S
From: https://www.cnblogs.com/JIKes/p/18172522

相关文章

  • 狂神spring学习笔记
    1.Spring1.简介一个融合器,一个简化开发的框架spring官网github地址2.Maven坐标<!--https://mvnrepository.com/artifact/org.springframework/spring-webmvc--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc&......
  • Kubernetes源码二次开发系列(一到三),玩转高阶K8s开发
    Kubernetes源码二次开发通常涉及以下步骤:环境准备:安装和配置Go环境,确保Go版本与Kubernetes项目兼容。获取源码:从GitHub克隆Kubernetes仓库到本地。设置工作环境:通过make命令设置编译环境。修改源码:根据需求修改Kubernetes源码。编译:使用makeall编译所有组......
  • SpringMVC(3)-request域和session域的作用和区别
    最近看到项目中用到request域和session域,脑子里一直没有一个明确的区分,结合GPT整理了一份总结。为了理解request和session的作用和区别,可以想象我们正在参加一个大型的科技会议。会议中,每位与会者(用户)都会与会议工作人员(服务器)进行交流。在这个比喻中,request域和session域是用于......
  • uboot-uboot介绍-学习笔记
    源码目录编译配置......
  • Spring Boot的自动装配
    SpringBoot的自动装配(Auto-Configuration)是一种设计机制,旨在减少传统Spring应用中繁复的XML配置和大量的手动Bean定义。@EnableAutoConfiguration:该注解是自动装配的入口,通常在SpringBoot应用的主配置类上使用。它通过@Configuration表明该类为配置类,并通过@Import导入一......
  • uboot-学习笔记
    uboot引导程序的作用不同bootloader的对比系统启动自举过程阶段iROM读取流程......
  • Spring AOP
    AOP简介A0P(AspectOrientedProgramming)面向切面编程,一种编程范式,指导开发者如何组织程序结构OOP(objectOrientedProgramming)面向对象编程作用:在不惊动原始设计的基础上为其进行功能增强Spring理念:无入侵式/无侵入式AOP核心概念连接点(JoinPoint):程序执行过程中的......
  • Spring 中 bean 的生命周期
    Spring中的bean指的是被IoC管理的对象,通常都是以DI的方式来使用,并不需要手动管理它们的生命周期。但是,有时候我们需要对特定的bean进行额外的初始化、销毁操作,此时就可以通过Spring中的拓展接口来实现。基本生命周期Spring中IoC的顶层接口是BeanFactory,默认实现......
  • 解决创建SpringBoot工程加载较慢的问题
    设置ServerURL将https://start.spring.io改为https://start.aliyun.com如图所示:启动演示如图所示,启动成功......
  • SpringBoot3.1.5对应新版本SpringCloud开发(1)-Eureka注册中心
    服务的提供者和消费者服务之间可以通过Spring提供的RestTemplate来进行http请求去请求另一个Springboot的项目,这就叫做服务间的远程调用。当一个服务通过远程调用去调用另一个服务时,被调用的服务就叫做服务的提供者,调用服务的服务就叫做服务的消费者。一个服务可以既是服务的提......