K8S--部署SpringBoot项目实战

news2024/10/6 4:02:08

原文网址: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高级实战 - 自学精灵

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

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

相关文章

论文悦读(7)——NVM文件系统之Trio(SOSP‘23)文件系统

TRIO(SOSP23) 1. 背景(Background)1.1 NVM Technologis1.2 File System Customization1.3 Userspace NVM File Systems 2. 观察与动机(Observation & Motivation)3. 设计与实现(Design &…

(18)Linux 实现简易版shell

前言:做一个 "会创建,会终止,会等待,会程序替换" 的简易 shell 。 1、显示提示符和获取用户输入 shell 本质就是个死循环,我们不关心获取这些属性的接口,如果要实现 shell: 1&…

conda环境下Could not create share link解决方法

1 问题描述 在运行chatglm-6B项目时,运行python web_demo.py,出现如下错误: (chatglm) [rootlocalhost ChatGLM2-6B]# python web_demo.py Loading checkpoint shards: 100%|██████████████████████████████…

scratch给数据清单排序 2023年12月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch给数据清单排序 一、题目要求 1、准备工作 2、功能实现 二、案例分析

性能优化-OpenMP基础教程(三)-Android上运行OpenMP

本文主要介绍如何在一个常规的Android手机上调试OpenMP程序,包括Android NDK的环境配置和使用JNI编写一个OpenMP程序运行在Android手机中。 🎬个人简介:一个全栈工程师的升级之路! 📋个人专栏:高性能&#…

js——json对象相互转化——js基础积累

js——json对象相互转化——js基础积累 需求场景解决步骤1:定义一个变量接收此字段,方便处理解决步骤2: { 外面的双引号要去掉解决步骤3:使用正则去除参数中的\\解决步骤4:如果此参数必须以{开头,以}结尾解…

Java学校教务管理系统源码带微信小程序

运行环境:jdk8mysql5.7IntelliJ IDEAmaven 技术:springbootmybatislayuishirojquery 教务管理系统是一个基于网络的在线管理平台, 帮助学校管理教务系统,用一个帐号解决学校教务教学管理, 灵活的定制符合学校自己实际情况的教务系…

Eclipse下安装GDB

主要参考资料: 链接: https://blog.csdn.net/u013609041/article/details/18967837 目录 简介Eclipse中安装和配置GDB错误 简介 Eclipse是一款开发软件。 GDB是一个调试软件,但是GDB通常是运行在linux下的,无法直接在windows下运行&#xff…

RabbitMQ安装与应用

文章目录 1. RabbitMQ1.1. 同步通讯与异步通讯1.2. 异步通讯的优缺点1.3. 几种MQ的对比1.4. docker安装运行RabbitMQ 流程1.5. RabbitMQ的几个概念1.6. 五种模型1.6.1. 基本消息队列 1.7. 基本使用1.7.1. 1建立连接时会出现以下界面![在这里插入图片描述](https://img-blog.csd…

Redis第四讲——Redis的数据库结构、删除策略及淘汰策略

一、redis中的数据库 redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中。db数组的每项都是一个redis.h/redisDb结构,而每个redisDb结构就代表一个数据库。在初始化服务器时,程序会根据服务器状态的dbnum属性来决定应该创建多…

python+selenium爬虫笔记

本文只是做例子,具体网站路径麻烦你们换下,还有xpath路径也换下 一、安装所需要的组件(此处采用谷歌) 1、安装驱动 查看你的浏览器版本,去安装对应的版本 下载驱动 下载驱动路径 之前版本的 输入这个路径下载下来解压…

CTF-PWN-栈溢出-高级ROP-【SROP】

文章目录 linux信息处理2017 360春秋杯 smallest检查源码思路第一次要执行ret时的栈执行write函数时修改rsp到泄露的栈地址上去 输入/bin/sh并sigreturn调用系统调用回忆exp注意一个离离原上谱的地方 参考链接 SROP(Sigreturn Oriented Programming) 于 2014 年被 Vrije Univer…

系列十、Spring Cloud Gateway

一、Spring Cloud Gateway 1.1、概述 Spring Cloud全家桶中有个很重要的组件就是网关,在1.x版本中采用的是Zuul网关,但是在2.x版本中,由于Zuul的升级一直跳票,Spring Cloud最后自己研发了一个网关替代Zuul,即&#xf…

优雅实现微信小程序动态tabBar,根据不同用户角色显示不同底部导航——更新版(支持自由组合总数超过5个tabBar菜单)

背景 在开发小程序过程中,有个需求是,小程序底部的tabBar需要根据不同用户角色显示不同底部导航。此时就需要用到自定义底部导航 custom-tab-bar。 上次发文是组合显示4个底部tabBar导航,很多小伙伴评论说组合超过5个怎么办。他们的需求总数…

Android中的Intent

一.显式Intent 显示Intent是明确目标Activity的类名 1. 通过Intent(Context packageContext, Class<?> cls)构造方法 2.通过Intent的setComponent()方法 3.通过Intent的setClass/setClassName方法 通过Intent(Context packageContext, Class<?> cls)构造方法 通…

JVM之对象创建

对象创建的流程 1.类加载检查 虚拟机遇到一条new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有&#xff0c;那必须先执行相应的类加载过程。new指令对…

Callback Hook

一、Callback Hook 函数名&#xff1a;useCallback 用于得到一个固定引用值的函数&#xff0c;通常用它进行性能优化。 useCallback: 该函数只需要传入两个参数&#xff1a;一个回调函数和一个依赖数组即可。 1.函数&#xff0c;useCallback会固定该函数的引用&#xff0c;…

【Rust日报】Piccolo - 用纯Rust实现的无栈Lua虚拟机

Piccolo - 用纯Rust实现的无栈Lua虚拟机 Piccolo&#xff0c;原名luster&#xff0c;在经过数年的中断后&#xff0c;于2023年4月悄然恢复了开发。曾经开发过 rlua 的 kyren&#xff0c;在底层 gc-arena crate 取得突破后&#xff0c;回到了 piccolo 项目。这两个项目现在已经&…

Python:界面开发,wx入门篇

以下内容为本人的学习笔记&#xff0c;如需要转载&#xff0c;请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/3Yb_YAKiMte_f5HanetXiA 本文大概 3617 个字&#xff0c;阅读需花 10 分钟 内容不多&#xff0c;但也花了一些精力 如要交流&#xff0c;欢迎评…

极速 JavaScript 打包器:esbuild

文章目录 引言什么是esbuild&#xff1f;esbuild的特点esbuild如何实现如此出色的性能&#xff1f;esbuild缺点基本配置入口文件输出文件模块格式targetplatformexternalbanner和footer 高级配置插件系统自定义插件压缩代码调试代码 结论&#x1f636; 写在结尾 引言 esbuild是…