基于idea作java程序的本地k8s调试-skaffold

2022年05月10日 阅读数:2
这篇文章主要向大家介绍基于idea作java程序的本地k8s调试-skaffold,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

先介绍下本篇文章是基于ideas下开发微服务的场景,你们都知道微服务嘛,一个个微的服务...不少,先不谈调试,要跑起来都费力,可能的缘由有:html

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

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

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

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

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

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

下面就看看skaffold是如何持续发布到k8s的ubuntu

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

须要安装的ideas插件:Cloud Code, 一样是google出品(skaffold一样是google出品)app

而后进行配置:运维

上述红框框内的3个命令行,须要你们自行安装ide

  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属性的,以下:https://www.cnblogs.com/pxza/p/15999131.html

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

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

自省推进进步,视野决定将来。
心怀远大理想。
为了家庭幸福而努力。