Fenix-CLI:交互式云原生客户端

    Fenix-CLI是一款交互式的云原生运行环境客户端,目标是取代Docker的、Kubernetes的kubectl以及Istio的istioctl等命令行工具,提供具备操作一致性、具有额外指令增强、支持智能感知的交互式的终端界面。

    对比Docker、Kubernetes、Istio官方原版的客户端,Fenix-CLI具有如下特性:

    1. 多运行环境支持
      Fenix-CLI目前支持Docker、Kubernetes和Istio三种执行环境,后续计划扩展到OpenShift、Rancher、Podman、Containerd等其他常用的云原生环境。启动时会自动进行检测,列出已安装的环境供用户选择,运行时也可以使用快捷键F2随时切换。

    1. 静态指令自动补全功能
      Fenix-CLI支持官方原版客户端的所有指令、参数,并对指令和参数选项提供有自动补全与提示功能。其中大部分指令的介绍提示来源于以下官方参考文档:
    1. 动态上下文数据的智能感知
      除了静态的指令提示外,Fenix-CLI还能对当前环境中的动态数据进行感知。譬如Docker中的容器和镜像名称、运行状态;Kubernetes中的Pod、Deployment、Service等各类资源名称及状态;还有端口号、操作系统的文件目录信息进行提示和自动补全。目前支持的动态数据包括有:
      • Docker:
        • 镜像名称及状态信息
        • 容器名称及状态信息
        • 内部信息,如:容器暴露的端口号、文件路径等的提示
      • Kubernetes / Istio:
        • 各种资源的名称及状态:Pod、ComponentStatus、ConfigMap、Context、DeamonSet、Deployment、Endpoint、Ingress、Job、LimitRange、Node、Namespace、PersistentVolume、PodSecurityPolicy、PodTemplete、ReplicataSet、ReplicationController、ResourceQuota、ServiceAccount、Container、Events
        • 内部信息,如:服务的暴露的端口号、文件路径等的提示

    1. 交互式的批量操作
      为方便同时管理多项资源,Fenix-CLI提供了交互式的CUI操作,支持单选、复选、快速过滤等功能,以满足一次性对多个资源进行同类操作。

    Fenix-CLI:交互式云原生客户端 - 图11

    1. X指令
      除了直接支持原版客户端全部标准指令之外,Fenix-CLI还额外扩展了一系列以x-开头的专有指令。这些X指令是Fenix-CLI的主要价值所在,具体可通过F1或者x-help进行查看。
      Fenix-CLI中有不少X指令依赖于开源的Krew Plugin来支持,为最大限度简化插件安装,Fenix-CLI的代码已集成Kubernetes的插件框架,因此无需任何额外操作即可使用全部Krew插件。下面对部分X指令功能列举如下:
      • 切换Kubernetes集群上下文和名称空间
        x-context用于切换当前Kubernetes客户端所管理的集群,适用于同一个客户端管理多个服务端集群的场合。
        用于切换当前Kubernetes客户端所使用的名称空间,以简化在每个命令中都要带有--namespace <ns>参数的繁琐操作。当前的名称空间将会在命令提示符之前列出。 Fenix-CLI:交互式云原生客户端 - 图13
      • 批量管理资源
        x-batch用于批量管理资源,可以用于Docker环境下的容器和镜像,以及Kubernetes环境下的Pod、Deployment、Service等十余种常用资源。前面对交互式CUI的介绍中已演示了x-batch指令的用法。
      • 网络流量跟踪
        x-sniff用于记录Pod的网络流量。对于Gateway节点的流量,我们通常可以很方便地在浏览器上进行查看,但对微服务集群内部节点的网络访问,则较为不便,通常需要专门的追踪工具。x-sniff在无需安装任何追踪系统的前提下,通过自动注入tcpdump,将流量信息发送到TShark或者Wireshark进行分析(所以你的机器上还是需要安装了TShark或者Wireshark的)。同时,为简化TShark的复杂参数,默认提供了summary(只显示调用请求摘要)和detail(显示HTTP Header、Body全文)两种显示形式。该指令基于sniff插件实现:https://github.com/eldadru/ksniff Fenix-CLI:交互式云原生客户端 - 图15
      • 查看各资源间关系
        指令用于通过Pod查询并显示相关资源之间的所有者关系。该指令基于pod-lens插件实现: Fenix-CLI:交互式云原生客户端 - 图17
      • 快速访问服务
        x-open用于根据服务暴露的端口,自动建立端口转发,并打开客户端中已安装的浏览器,直接访问该服务。该指令基于open-svc插件实现:https://github.com/superbrothers/kubectl-open-svc-plugin
      • 查看集群服务状态
        x-status用于查看当前Kubernetes集群中哪些资源运行正常、哪些存在问题,简化了反复多次kubectl get的麻烦。该指令基于status插件实现:
      • ……
    • 自动安装:通过以下脚本,自动安装最新版的Fenix-CLI:

    • 使用:安装后输入fenix-cli进行使用

      1. fenix-cli
    • Fenix-CLI仅支持Linux操作系统

    Fenix-CLI后续版本主要特性规划如下:

    • 计划重构智能提示架构。目前静态指令的提示直接内置在程序代码之中,是以Docker v20.10.7(2021年6月)、Kubernetes v1.21(2021年4月)、Istio v1.10(2021年5月)为基准来实现的。随着官方客户端功能的不断发展扩充,靠程序代码去跟随必然难以为继。所幸目前主流的云原生客户端都是使用spf13/cobra作为CLI框架的,因此下个大版本计划重构Fenix-CLI的智能提示架构,支持通过外部DSL来进行驱动,并实现直接从运行机器上的Docker、Kubernetes等环境中实时取得指令与参数信息,自动生成DSL,以此达到自动跟随官方客户端的升级的目的。
    • 计划支持更多云原生运行环境,如OpenShift、Rancher、Podman、Containerd等。
    • 计划支持运行环境自动安装功能。由于中国网络状况限制,Kubernetes等环境需要访问Google仓库,安装十分不便,因此考虑在Fenix-CLI中提供运行环境一键部署的能力。此特性客户端的工作量不大,但服务端做自动从国外拉取镜像的机器人较为繁琐。
    • 计划支持多语言,至少会提供中文语言的支持,有一定翻译工作量。
    • 计划补全单元测试和E2E测试。
    • 计划提供一些真实环境中使用Fenix-CLI去运维、诊断、出错的具体案例。
    • 建议:
      • 如对Fenix-CLI本身的功能有问题或者建议,欢迎在此Repository中提出Issues。
      • 如对Fenix-CLI所使用的Krew Plugin有问题或者建议,可在介绍里列出的这些Plugin的原Repository中提出。
    • 贡献:
      • 欢迎pull request、feature request,欢迎任何形式的协作。
    • 致谢:
      • 特别致谢:Fenix-CLI项目的命令行提示框架基于c-bata/go-prompt实现,部分Kubernetes提示功能直接使用到了代码。
    • 本文档代码部分采用 Apache 2.0 协议进行许可。遵循许可的前提下,你可以自由地对代码进行修改,再发布,可以将代码用作商业用途。但要求你:
      • 署名:在原有代码和衍生代码中,保留原作者署名及代码来源信息。
      • 保留许可证:在原有代码和衍生代码中,保留 Apache 2.0 协议文件。