K8S--部署SpringBoot项目实战

原文网址:K8S--部署SpringBoot项目实战-CSDN博客

简介

本文介绍K8S如何部署SpringBoot项目。

1.生成应用的docker镜像

把SpringBoot项目的jar包打包为docker镜像,见:Docker Compose--部署SpringBoot项目--实战-CSDN博客

创建后的镜像名称为: custom_docker-springboot

2.部署Harbor

可以使用阿里云镜像仓库,也可以自己部署Harbor。

我这里自己部署Harbor,见:Docker Compose系列--安装harbor--方法/实例-CSDN博客

我的Harbor地址是:192.168.5.193:15001 

部署之后,创建一个项目,本处我创建的项目是:custom_image

3.添加Harbor私库的源

docker和k8s都需要修改。(所有机器都要修改)

1.修改docker

修改/etc/docker/daemon.json文件,添加如下内容:

"insecure-registries":["192.168.5.193:15001"]

如下图所示: 

修改完之后,重启docker:

systemctl daemon-reload
systemctl restart docker

可以用docker info命令查看是否修改成功:

2.修改k8s

见:K8S--解决containerd拉镜像的报错:http: server gave HTTP response to HTTPS client-CSDN博客

4.生成并推送应用镜像

将SpringBoot项目的镜像推送到上边搭建的Harbor私库。

1.生成镜像

法1:直接生成镜像

docker build -t 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0 .

法2:通过已有镜像来生成

docker tag custom_docker-springboot:1.0 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0

2.推送镜像

docker push 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0

结果

3.查看镜像

去harbor上查看:(可以发现,已经上传上来了)

5.编写应用的K8S配置文件

1.创建命名空间

创建命名空间配置文件java-app-namespace.yaml,如下

# 创建命名空间
apiVersion: v1
kind: Namespace
metadata:
  name: java-app
  labels:
    name: java-app

然后创建它:

kubectl apply -f java-app-namespace.yaml

2.创建K8S配置文件

在某个目录(本处是/work/devops/k8s/app/demo-springboot)创建k8s.yaml文件,内容如下:

# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-springboot-deployment
  namespace: java-app
  labels:
    app: demo-springboot #与Service的selector对应
spec:
  # 副本的数量
  replicas: 2
  selector:
    # 选择Pod
    matchLabels:
      app: demo-springboot
  # 选择或创建的Pod的模板
  template:
    metadata:
      # 与Deployment的selector对应
      labels:
        app: demo-springboot
    spec:
      imagePullSecrets:
        - name: harbor-secret

      containers:
        - image: 192.168.5.193:15001/custom_image/custom_docker-springboot:1.0
          name: custom-docker-springboot-1-0
          # 每次都从远程拉取镜像。默认是IfNotPresent,每次拉取的都是本地的镜像(之前的)
          imagePullPolicy: Always
          env:
            - name: TZ
              value: Asia/Shanghai
          ports:
            - containerPort: 8080
              name: pod-8080

---
# 创建Service
apiVersion: v1
kind: Service
metadata:
  name: demo-springboot-service
  namespace: java-app
  labels:
    app: demo-springboot
spec:
  ports:
    - name: demo-springboot-port
      port: 9000   # Service监听的端口
      targetPort: 8080  # pod自身暴露的端口。对应Deployment的containerPort
      # 对外的端口号
      nodePort: 30004
  # 选择Deployment
  selector:
    app: demo-springboot
  # NodePort类型可以对外暴露端口
  type: NodePort

6.启动应用的Pod

到/work/devops/k8s/app/demo-springboot目录下,执行:

​kubectl apply -f k8s.yaml

7.查看启动结果并测试

1.在k8s的dashboard上查看

发现已经成功运行。

2.看日志

法1:dashboard上查看

法2:查看宿主机的卷映射

注意:

两个pod的日志都打印到一个文件里边去了。这里后期会进行优化,每个pod输出到一个文件里。 

法3:用命令查看日志

kubectl logs demo-springboot-deployment-7755445878-7wn5r -n java-app

结果 

3.访问接口进行测试

访问一下SpringBoot的端口:http://192.168.5.193:30004/doc.html

结果

访问接口:

-----------------------------------------------------------------------------------------------------------------

推荐一套靠谱的Java高级开发实战,包含:高并发、架构、全局处理、链路追踪等:JavaWeb高级实战 - 自学精灵

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

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

相关文章

Django和Vue项目运行过程中遇到的问题及解决办法

这是我从CSDN上边买来的一个系统的资源,准备在此基础上改成自己的系统,但是在运行项目这一步上都把自己难为了好几天,经过不断的摸索,终于完成了第一步!!! 如果大家也遇到同样的问题&#xff0…

Docker基础学习(配置、命令)

镜像加速 登录阿里云 docker run hello-world分析命令: 开始–>docker在本机中寻找镜像–>有–>以该镜像为模版生产容器实例运行; 开始–>docker在本机中寻找镜像–>无–>去远端下载镜像并运行,若远端无此镜像则返回错误…

【教育会议征稿】第五届教育、知识和信息管理国际学术会议(ICEKIM 2024)

第五届教育、知识和信息管理国际学术会议(ICEKIM 2024) 2024 5th International Conference on Education, Knowledge and Information Management 第五届教育、知识和信息管理国际学术会议(ICEKIM 2024)定于4月19至21日在中国成…

Vue-3、模板语法

1、插值语法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>模板语法</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2…

Java程序设计——GUI设计

一、目的 通过用户图形界面设计&#xff0c;掌握JavaSwing开发的基本方法。 二、实验内容与设计思想 实验内容&#xff1a; 课本验证实验&#xff1a; Example10_6 图 1 Example10_7 图 2 图 3 Example10_15 图 4 设计思想&#xff1a; ①学生信息管理系统&#xff1a…

JS 手写 new 函数

工作中我们经常会用到 new 关键字&#xff0c;new 一个构造函数生成一个实例对象&#xff0c;那么new的过程中发生了什么呢&#xff0c;我们今天梳理下 创建一个对象对象原型继承绑定函数this返回对象 先创建一个构造函数&#xff0c;原型上添加一个方法 let Foo function (n…

Struts2 远程代码执行漏洞S2-001分析

自 Struts2 在 2007 年爆出第一个远程代码执行漏洞 S2-001 以来&#xff0c;在其后续的发展过程中不断爆出更多而且危害更大的远程代码执行漏洞&#xff0c;而造成 Struts2 这么多 RCE 漏洞的主要原因就是 OGNL 表达式。这里以 Struts2 的第一个漏洞 S2-001 为例来对 Struts2 远…

UE相关杂项笔记

1.PAK包解析 UE4如何反向查找Pak里面包含哪些文件 - 哔哩哔哩 CMD控制台命令输入 D:&quot;Epic Games&quot;\UE_5.1\Engine\Binaries\Win64\UnrealPak.exe 包路径 -list *文件夹带空格时 添加“ ”包裹住文件夹名 解包工具路径 UE引擎安装路径\UE_5.1\Engine\Binarie…

HarmoryOS Ability页面的生命周期

接入穿山甲SDK app示例&#xff1a; android 数独小游戏 经典数独休闲益智 广告接入示例: Android 个人开发者如何接入广告SDK&#xff0c;实现app流量变现 Ability页面的生命周期 学习前端&#xff0c;第一步最重要的是要理解&#xff0c;页面启动和不同场景下的生命周期的…

unity中0GC优化方案《zstring》

文章目录 序言简介GC带来的问题性能瓶颈玩家体验受损 使用方式 序言 游戏开发秉承遇到好东西要分享&#xff0c;下面介绍zstring&#xff0c;感谢作者开源无私奉献 源码地址&#xff1a;https://github.com/871041532/zstring 简介 GC带来的问题 性能瓶颈 GC暂停主线程执行…

c# 学习笔记 - 委托(Delegate)

文章目录 1. 委托1.1 委托概述1.2 委托使用1.3 委托的传播 2. 匿名方法2.1 匿名方法概述2.2 匿名方法 1. 委托 1.1 委托概述 委托简介 委托就是对方法的引用&#xff0c;可以理解为例如整型变量的容器可以存储整形数据&#xff0c;委托就是某种方法的容器&#xff0c;可以用来…

C语言算法(二分查找、文件读写)

二分查找 前提条件&#xff1a;数据有序&#xff0c;随机访问 #include <stdio.h>int binary_search(int arr[],int n,int key);int main(void) {}int search(int arr[],int left,int right,int key) {//边界条件if(left > right) return -1;//int mid (left righ…

全球海洋数据 (GLODAP) v2.2023(海洋碳数据产品)

全球海洋数据分析项目 (GLODAP) v2.2023 全球海洋数据分析项目 (GLODAP) v2.2023 代表了海洋生物地球化学瓶数据合成方面的重大进步。此更新主要关注海水无机碳化学&#xff0c;以 GLODAPv2.2022 为基础&#xff0c;包含多项关键增强功能。值得注意的是&#xff0c;增加了 43 …

test 系统学习-04-test converate 测试覆盖率 jacoco 原理介绍

测试覆盖率 测试覆盖率(test coverage)是衡量软件测试完整性的一个重要指标。掌握测试覆盖率数据&#xff0c;有利于客观认识软件质量&#xff0c;正确了解测试状态&#xff0c;有效改进测试工作。 当然&#xff0c;要发挥这些作用&#xff0c;前提是我们掌握了真实的测试覆盖…

如何使用Docker本地部署一个开源网址导航页并分享好友公网使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Golang里空结构体struct{}的介绍和使用

s t r u c t struct struct是 G o l a n g Golang Golang里的关键字&#xff0c;用于定义结构类型 比如 type Student struct{id intname string }struct{}是有 0 0 0个元素的结构体. struct{}{}表示类型struct{}的值为空{} 1.性质 1.1不占用内存 大小为 0 0 0&#xff0c;…

java中常用的日期API

目录 LocalDateTime类&#xff08;日期时间&#xff09; DateTimeFormater&#xff08;格式化器&#xff09; Period类&#xff08;计算日期间隔&#xff09; Duration类&#xff08;计算时间间隔&#xff09; 本章我要讲的是JDK 8中新增的时间API&#xff0c;因为传统的时间…

【源码预备】Calcite基础知识与概念:关系代数概念、查询优化、sql关键字执行顺序以及calcite基础概念

文章目录 一. 关系代数的基本知识二. 查询优化三. SQL语句的解析顺序1. FROM2. WHERE3. GROUP BY4. HAVING5. SELECT 四. Apache Calcite中的基本概念1. Adapter2. Calcite中的关系表达式2.1. 关系表达式例子2.2. 源码底层结构 3. Calcite的优化规则4. Calcite的Trait--算子物理…

RS485模块常识的解析

1. RS485数据采集模块常识 a) RS485总线基本特性 根据RS485工业总线标准&#xff0c;RS485工业总线为特性阴抗120Ω的半双工通讯总线&#xff0c;其最大负载能力为32个有效负载&#xff08;包括主控设备与被设备&#xff09; b) RS485总线传输距离 当使用0.56mm(24AWG)双绞线作…

rabbitmq延时队列相关配置

确保 RabbitMQ 的延时消息插件已经安装和启用。你可以通过执行以下命令来安装该插件&#xff1a; rabbitmq-plugins enable rabbitmq_delayed_message_exchange 如果提示未安装&#xff0c;以下是安装流程&#xff1a; 查看mq版本&#xff1a; 查看自己使用的 MQ&#xff08;…