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

news/2024/10/11 2:30:47

 

##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-demoreplicas: 2  #2个副本template: metadata:labels: app: k8s-demospec: containers: - name: k8s-demoimage: 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: NodePortports: - port: 7003targetPort: 8080selector: 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的日志输出

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/27498.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

狂神spring学习笔记

1. Spring 1. 简介 一个融合器,一个简化开发的框架 spring官网 github地址 2. Maven坐标 <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency><groupId>org.springframework</groupId><artifactId>sp…

2024-05-04 如何为antd的table设置序号

给columns加多一列即可:const columns = [{title: "序号",key: "index",render: (_, record, index) => index + 1,},...]如图:

Multisim14--软件简介及安装教程(内含安装包)

安装包见文章末尾一、软件简介 Multisim是美国国家仪器(NI)有限公司推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。工程师们可以使用Multisim交互式地搭建电路…

随机抽奖

问题:随机抽奖公式 解决1:只一个抽奖结果=INDEX(A:A,RANDBETWEEN(2,11))解决2:多个抽奖结果且不能有重复=TAKE(SORTBY(A2:A11,RANDARRAY(10)),6)将抽奖名单按随机序排序,再提取前六个。

2024-05-04 如何去掉uniapp的h5开发中url存在的#号?

如果你正在用uniapp开发h5页面,你会发现h5页面的url里带有一个#号,比如:http://localhost:8080/#/pages/index/index 原因:uniapp默认模式导致 解决方案:修改uniapp默认模式为history,如下图所示:

Python自动化测试中JSON数据处理遇到的错误

在接口自动化测试领域,使用Excel管理测试数据是一种常见的做法。本文将分享一个实际案例,介绍在Python自动化测试框架中,如何从响应结果中提取所需数据,并探讨在处理JSON格式数据时遇到的一个典型问题及其解决方案。 首先,让我们了解测试数据的基本格式。在Excel中,我们定…

stm32开发笔记

GPIO全名为General Purpose Input Output,即通用输入输出。有时候简称为“IO口”。通用,说明它是常见的。输入输出,就是说既能当输入口使用,又能当输出口使用。端口,就是元器件上的一个引脚。 输入模式和输出模式是GPIO的基本特性,当然GPIO还有其它模式可选。 (一)模式…

UE4 C++ 杂

TMap中的Find和FindRef 在对蓝图节点进行C++重写时,发现UE对于TMap的Find有很多方式。首先是基础的Find,其就是返回对象类型的指针,如果不存在于TMap中其会返回nullptr接下来是FindChecked,其返回的是对象类型的引用,并且会在内部检测指针是否为空,如果没有会触发断言Fin…