基于idea做java程序的本地k8s调试-skaffold(一)
先介绍下本篇文章是基于ideas下开发微服务的场景,大家都知道微服务嘛,一个个微的服务...很多,先不谈调试,要跑起来都费力,可能的原因有:
- 环境变量的配置,如果多个项目穿插着来,env变量可能废了,乱了
- host文件的改变,有些环境变量是通过hostname来解析的,而不是ip,可能多个项目对应的hostname字符串都一个(但是ip不同),比如redis/mysql这种中间件名称的定义
- 有些基础服务,还不得不启动,才能有业务的run或者debug这说,不然免谈,跑不起来,比如认证服务、网关等,机器烂的话,呵呵了
- 其他等等等等
最后跑起来了,但是跑到运维环境里又出问题了,为啥?也许:
- ideas下run/debug模式和mvn打包后的jar不一致,可能class不一致,如版本不同,或者打了多个不同版本进jar里
- 环境变量不同,到了运维环境里,环境变量不一致,导致无法启动,比如找不到配置中心,然后就application start failed
- 其他等等等等
这么解决这些问题呢?用skaffold,下面先介绍下skaffold:
Skaffold是一款命令行工具,旨在促进Kubernetes应用的持续开发。
就是这么简短!就是说用k8s,然后套个持续集成的工具来自动化。只要发到和最终运维环境一致的环境下进行debug,不就解决了么。还真是,至于为什么这么说的逻辑推理,大家自己百度。
下面就看看skaffold是如何持续发布到k8s的,上个图吧:


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

然后进行配置:

上述红框框内的3个命令行,需要大家自行安装
- skaffold:https://skaffold.dev/docs/install/#standalone-binary
- minikube: https://minikube.sigs.k8s.io/docs/start/
安装相对容易,这里不展开了。
启动minikube集群时,需要注意些参数配置,因为防火墙的关系,默认会打包失败,或者无法下载情况出现,我这的启动参数如下:

--force是因为我本机是ubuntu的root账号,必须加这个参数才能启动集群
--image开头的参数都是国内代理
--cpus是代表minikube所能使用的cpu核心数,默认只有2个cpus,会很慢
接下来,要让skaffold工作,就需要两种文件:
- skaffold定义文件
- 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(一)的更多相关文章
- 基于idea做java程序的本地k8s调试-skaffold(二)
上一篇讲完了java代码发到本机minikube中run,这篇来讲讲minkube中进行debug(idea下) 话说,上篇是把pigx基础infra微服务都发到了minikube中,这些微服务是ru ...
- 要做Java程序员 需要知道那些技术 重点有那些
一.Java程序员 高级特性 反射.泛型.注释符.自动装箱和拆箱.枚举类.可变 参数.可变返回类型.增强循环.静态导入 ...
- 第一次做Java程序注意事项
public class myapp{ public static void main(String[] args){ System.out.println("Hallo Java!&quo ...
- java程序的10个调试技巧
参看下面链接:http://www.kuqin.com/java/20120906/330130.html
- hadoop程序在本地模式调试作业
1.首先下载cygwin,例如安装在该目录下,D:\Program Files\cygwin\ 2.copy linux上的jar包到D:\Program Files\cygwin\home\lib ...
- 从安装linux(centos7.6)系统到部署springboot java程序到k8s(大纲)
本文说明从安装linux系统开始,一直到在k8s运行springboot程序全过程 本文假设在自己电脑操作,因此linux系统使用vmware虚拟机,linux发行版使用centos 7.6.1810 ...
- CentOS修改默认编码为UTF-8,使java程序字符集默认为UTF-8
java程序在本地接受php的utf8字符串好好的,到了服务器就行了. 解决,修改vi /etc/sysconfig/i18n,修改之后ssh断开,重连后KILL你的java. LANG=" ...
- java远程调试(断点)程序/tomcat( eclipse远程调试Tomcat方法)
tomcat远程调试: 1.Linux中配置tomcat在catalina.sh中添加如下CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_soc ...
- java方法和本地方法
java中的方法有两种,java方法和本地方法. java方法:是由java语言编写,编译成字节码,存储在class文件中的.java方法是与平台无关的. 本地方法:本地方法是由其他语言(如C.C++ ...
随机推荐
- Flutter Windows 桌面端支持进入稳定版
Flutter 创建伊始,我们就致力于打造一个能够构建精美的.可高度定制的.并且可以编译为机器码的跨平台应用解决方案,以充分发挥设备底层硬件的全部图形渲染能力.今天,Flutter 对 Windows ...
- RealFormer: 残差式 Attention 层的Transformer 模型
原创作者 | 疯狂的Max 01 背景及动机 Transformer是目前NLP预训练模型的基础模型框架,对Transformer模型结构的改进是当前NLP领域主流的研究方向. Transformer ...
- 【转】Nginx服务并发过10万的Linux内核优化配置
http://www.linuxidc.com/Linux/2012-11/75151.htm以下Linux 系统内核优化配置均经在线业务系统测试,服务器运行状态良好,用了一些时间整理,现和大家分享一 ...
- 转载_认识C语言的32个关键字
简单介绍: 1 auto : 声明自动变量 2 short :声明短整型变量或函数 3 int: 声明整型变量或函数 4 long :声明长整型变量或函数 5 float:声明浮点型变量或函数 6 d ...
- cloudstack-4.1.5版本最全入门笔记【2022】
cloudstack简介 CloudStack是一个开源的具有高可用性及扩展性的云计算平台.目前Cloudstack支持管理大部分主流的hypervisors,如KVM,XenServer,VMwar ...
- python基础——反射
反射:利用字符串的形式去对象(模块)中操作(寻找|检查|设置|删除)成员 getattr(commons,"login") #在commons模块中找成员login hasattr ...
- find+grep+正则表达式
目录 find+grep+正则表达式 1.find 2.grep 3.正则表达式 find+grep+正则表达式 1.find 根据文件的名称或者属性查找文件. # 自己在 /root/adc目录下长 ...
- Solution -「LOCAL」舟游
\(\mathcal{Description}\) \(n\) 中卡牌,每种三张.对于一次 \(m\) 连抽,前 \(m-1\) 次抽到第 \(i\) 种的概率是 \(p_i\),第 \(m\) ...
- [入门到吐槽系列] Webix 10分钟入门 二 表单Form的使用
前言 继续接着上一篇的webix入门:https://www.cnblogs.com/zc22/p/15912342.html.今天完成剩下两个最重要的控件,表单和表格的使用.掌握了这两个,整个Web ...
- 新手菜菜之2020Kubernetes详细介绍大全
前文 Kubernetes笔记(一):十分钟布置一套K8s环境 介绍了怎么快速建立一个k8s体系.为了持续运用k8s来布置咱们的应用,需要先对k8s中的一些根本组件与概念有个了解. Kubernete ...