• 基于idea做java程序的本地k8s调试-skaffold(一)


    先介绍下本篇文章是基于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里,组员都能在瞬间本地生成一套和运维环境一致的集群!这次牛逼了,再也不会发上去无法运行,报错这种问题存在了。

     

  • 相关阅读:
    strongSwan对接H3C
    本周大新闻|7-11便利店测试AR远程购物,PICO商店支持退款
    【Unity3D】Shader Graph简介
    知识图谱:基本概念
    Prometheus监控K8S
    lora训练之偷师
    Ubuntu安装QQ
    计算机毕业设计选题推荐-体育赛事微信小程序/安卓APP-项目实战
    后端真批量新增的使用
    C++ map和unordered_map的区别和联系以及map的使用
  • 原文地址:https://www.cnblogs.com/aarond/p/ci-1.html