先介绍下本篇文章是基于ideas下开发微服务的场景,大家都知道微服务嘛,一个个微的服务...很多,先不谈调试,要跑起来都费力,可能的原因有:

  1. 环境变量的配置,如果多个项目穿插着来,env变量可能废了,乱了
  2. host文件的改变,有些环境变量是通过hostname来解析的,而不是ip,可能多个项目对应的hostname字符串都一个(但是ip不同),比如redis/mysql这种中间件名称的定义
  3. 有些基础服务,还不得不启动,才能有业务的run或者debug这说,不然免谈,跑不起来,比如认证服务、网关等,机器烂的话,呵呵了
  4. 其他等等等等

最后跑起来了,但是跑到运维环境里又出问题了,为啥?也许:

  1. ideas下run/debug模式和mvn打包后的jar不一致,可能class不一致,如版本不同,或者打了多个不同版本进jar里
  2. 环境变量不同,到了运维环境里,环境变量不一致,导致无法启动,比如找不到配置中心,然后就application start failed
  3. 其他等等等等

这么解决这些问题呢?用skaffold,下面先介绍下skaffold:

Skaffold是一款命令行工具,旨在促进Kubernetes应用的持续开发。

就是这么简短!就是说用k8s,然后套个持续集成的工具来自动化。只要发到和最终运维环境一致的环境下进行debug,不就解决了么。还真是,至于为什么这么说的逻辑推理,大家自己百度。

下面就看看skaffold是如何持续发布到k8s的,上个图吧:

只需要1个按钮,就能发布到k8集群里,并且日志什么的,状态监控等等都有了,当然,前提是装完以及配置完相应插件。效果目前为止挺好。

需要安装的ideas插件:Cloud Code, 同样是google出品(skaffold同样是google出品)

然后进行配置:

上述红框框内的3个命令行,需要大家自行安装

  1. skaffold:https://skaffold.dev/docs/install/#standalone-binary
  2. minikube: https://minikube.sigs.k8s.io/docs/start/

安装相对容易,这里不展开了。

启动minikube集群时,需要注意些参数配置,因为防火墙的关系,默认会打包失败,或者无法下载情况出现,我这的启动参数如下:

--force是因为我本机是ubuntu的root账号,必须加这个参数才能启动集群

--image开头的参数都是国内代理

--cpus是代表minikube所能使用的cpu核心数,默认只有2个cpus,会很慢

接下来,要让skaffold工作,就需要两种文件:

  1. skaffold定义文件
  2. k8s定义文件

上述图片来自skaffold官网,讲的是skaffold管道,skaffold的yaml文件就是用来定义这个管道的,如下:

artifacts:是镜像来源,对应的context路径下必须存在Dockerfile,用于打包用途

deploy用于部署管道,上图中配置为kubectl命令来部署yaml,这些yaml文件都是k8s的近原生yaml定义,说它是接近原生定义是因为里面的image会动态改变(由skaffold)

比如这个k8 pod yaml定义:

如果直接原生方式kubectl命令行apply的话,找的是pigx-gateway这个镜像,但是最终在skaffold下,最终是会动态变更这个image属性的,如下:

image是会变化的(由skaffold改变,见pipeline图的tag部分),细心的读者也看到了,其他好多属性是被动态加上去的,比如labels属性。

到此为止,可以说,只要主程,或者运维,又或者架构师、开发经理,只要有那么1个人,把这么一套yaml文件push到git里,组员都能在瞬间本地生成一套和运维环境一致的集群!这次牛逼了,再也不会发上去无法运行,报错这种问题存在了。

基于idea做java程序的本地k8s调试-skaffold(一)的更多相关文章

  1. 基于idea做java程序的本地k8s调试-skaffold(二)

    上一篇讲完了java代码发到本机minikube中run,这篇来讲讲minkube中进行debug(idea下) 话说,上篇是把pigx基础infra微服务都发到了minikube中,这些微服务是ru ...

  2. 要做Java程序员 需要知道那些技术 重点有那些

    一.Java程序员         高级特性               反射.泛型.注释符.自动装箱和拆箱.枚举类.可变               参数.可变返回类型.增强循环.静态导入     ...

  3. 第一次做Java程序注意事项

    public class myapp{ public static void main(String[] args){ System.out.println("Hallo Java!&quo ...

  4. java程序的10个调试技巧

    参看下面链接:http://www.kuqin.com/java/20120906/330130.html

  5. hadoop程序在本地模式调试作业

    1.首先下载cygwin,例如安装在该目录下,D:\Program Files\cygwin\ 2.copy linux上的jar包到D:\Program Files\cygwin\home\lib ...

  6. 从安装linux(centos7.6)系统到部署springboot java程序到k8s(大纲)

    本文说明从安装linux系统开始,一直到在k8s运行springboot程序全过程 本文假设在自己电脑操作,因此linux系统使用vmware虚拟机,linux发行版使用centos 7.6.1810 ...

  7. CentOS修改默认编码为UTF-8,使java程序字符集默认为UTF-8

    java程序在本地接受php的utf8字符串好好的,到了服务器就行了. 解决,修改vi /etc/sysconfig/i18n,修改之后ssh断开,重连后KILL你的java. LANG=" ...

  8. java远程调试(断点)程序/tomcat( eclipse远程调试Tomcat方法)

    tomcat远程调试: 1.Linux中配置tomcat在catalina.sh中添加如下CATALINA_OPTS="-Xdebug  -Xrunjdwp:transport=dt_soc ...

  9. java方法和本地方法

    java中的方法有两种,java方法和本地方法. java方法:是由java语言编写,编译成字节码,存储在class文件中的.java方法是与平台无关的. 本地方法:本地方法是由其他语言(如C.C++ ...

随机推荐

  1. 计算机电子书 2020 CDNDrive 备份(预览版)

    下载方式 pip install CDNDrive # 或 # pip install git+https://github.com/apachecn/CDNDrive cdrive download ...

  2. 微信小程序之多选功能

    思路:把向得到的数组中添加一个布尔值,默认都为false,然后通过数组的映射功能把选中的布尔值,存储到数组中,在组件属性中,用三元运算符做判断即可 data:{ sampleArray: [{ id: ...

  3. 【XR-4】文本编辑器

    直接做是困难的,不妨依照部分分来思考. - Subtask 3 首先会进入一个误区:维护修改,通过循环串的性质在 \(\tt KMP\) 自动机上优化遍历. 但可以发现这样很难处理,我们不妨 直接维护 ...

  4. 异步回调实现- Guava Retryer

    为什么要使用重试利器Retryer 在实际开发中我们经常会遇到需要轮询查询一个接果,实现轮询的方式有很多种,我们经常要写许多代码,有时还会怕写出的代码有bug,如果已经有轮子了,我们就没必要重复造轮子 ...

  5. Java中的UIManager简单实用(皮肤包)

    感谢大佬:https://blog.csdn.net/u010022051/article/details/52671860 注:具体详情请查阅Java API文档 /** * 设置图形界面外观 * ...

  6. Mysql数据库优化技术之配置篇、索引篇 ( 必看 必看 转)

    转自:Mysql数据库优化技术之配置篇.索引篇 ( 必看 必看 ) (一)减少数据库访问对于可以静态化的页面,尽可能静态化对一个动态页面中可以静态的局部,采用静态化部分数据可以生成XML,或者文本文件 ...

  7. Solution -「Gym 102798E」So Many Possibilities...

    \(\mathcal{Description}\)   Link.   给定非负整数序列 \(\{a_n\}\) 和 \(m\),每次随机在 \(\{a\}\) 中取一个非零的 \(a_i\)(保证存 ...

  8. Solution -「洛谷 P5827」边双连通图计数

    \(\mathcal{Description}\)   link.   求包含 \(n\) 个点的边双连通图的个数.   \(n\le10^5\). \(\mathcal{Solution}\)    ...

  9. 云原生 PostgreSQL 集群 - PGO:5分钟快速上手

    前提条件 请确保您的主机上安装了以下实用程序: kubectl git 安装 第 1 步:下载示例 首先,转到 GitHub 并 fork Postgres Operator 示例存储库: https ...

  10. 给博客加入链接安全跳转页(添加一个和CSDN一样的链接跳转页)

    本文首发于青云工作室 原文链接为 https://qystudio.ltd/posts/25250.html 前言 或是出于优化 SEO,或是出于加强网站体验,很多博客都给文章中的外部链接加上了个二次 ...