zoukankan      html  css  js  c++  java
  • k8s之kubectl插件

    概述

    在日常使用中,Kubectl 作为和 Kubernetes 集群进行交互的工具,提供了丰富的功能。但是偶尔也有时候,你想做一些 Kubectl 暂时还不支持的功能。那么在这种情况下,如何不改变 Kubectl 的代码并且重新编译就能引入新的功能呢? 这个问题的答案就是采用 Kubectl 的 Plugin 机制。

    Kubectl 的 Plugin 机制在 v1.8.0 版本的时候就引入了,并且在 v1.12.0 版本中进行了大规模的重构以适应更加复杂多样的场景,并且最终在 v1.14.0 版本中稳定下来。所以你必须使用 Kubectl v1.12.0 及以上版本才可以支持当前的插件命令。

    插件规则

    插件本身是一个可执行文件,kubectl可直接使用插件,其有如下特点:

    1) 插件是一个可执行文件,任何可执行文件均可;

    2) 插件路径要在系统$PATH里,插件本身可直接执行;

    3) 插件命令必须以kubectl-开头,如kubectl-echo,但不可与已有插件名相同,特别是k8s原有插件。

    4) 插件命令支持子命令,其格式必须为 kubectl-cmd-cmd1-cmd11 ,也就是每个命令通过 - 分隔。这样在调用的时候可以使用 $ kubectl cmd cmd1 cmd11 这样的方式来调用。

    5) 如果要在插件命令中使用多个单词构成一个命令,那么多个单词必须用 _ 进行分隔,例如对于 kubectl-hello_world 命令,可以通过 $ kubectl hello_world 这样的方式来调用。 

    6) 插件命令必须自行解析所有传给该命令的选项参数,并进行相应的处理。

    编写一个最简单的插件kubectl-hello,编译后放到/usr/local/bin目录下执行

    #include <stdio.h>
    int
    main(int argc, char *argv[])
    {
    printf("hello, i am a kubelet plugin command
    ");
    printf("
    ");
        for (; i < argc; i++) {
            printf("%s
    ", argv[i]);
        }
    }
    
    $ gcc -o kubectl-hello kubectl-hello.c
    $  kubectl hello k8s
    hello, i am a kubelet plugin command
    
    /usr/local/bin/kubectl-hello
    k8s

    注:无法定义一个 kubectl 已经存在的命令去试图覆盖原命令的行为。例如 kubectl-version 这样的命令永远不会被执行,因为 kubectl 会优先执行内置的 version 命令。基于这样的原因,你也无法给已有的命令增加额外的子命令。

    注:对于插件命令来讲,它接收到的第一个参数总是它文件所在的全路径。

    插件应用

    Kubectl 提供了一个 plugin 的命令,该命令可以使用子命令 list 来列举当前系统中的插件命令。具体的搜索方法如下:

    (1) 搜索系统的 $PATH 中指定的所有的目录,查找所有以 kubectl- 开头的文件; 

    (2) 如果搜索到的匹配以 kubectl- 开头的文件是可执行文件,那么会按照顺序作为插件命令输出;如果不是可执行文件,也会输出,但是同时会输出一个 Warning 的信息。

    插件管理krew

    鉴于 kubernetes 本身并没有提供插件命令的包管理器用来安装和更新插件命令,我们可以使用 Kubernetes-sigs 项目中的 krew 来完成相关工作。

    krew是一个Kubernetes的包管理工具,它的功能就是提供简单的方法下载、检索、管理其他插件,类似操作系统的apt、yum、brew等工具,其命名也似乎模仿的brew工具。

    krew在krew index项目中维护支持的插件列表以及下载路径,目前所有插件都是在github中发布下载,但由于众所周知的原因,国内从github下载速度非常慢 。

    为了提高下载速度,fast-krew脚本使用axel下载替换原来的下载方式,提高下载速度。

    github:https://github.com/kubernetes-sigs/krew.git

    参考:

    https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/

    k8s实践(十三):kubectl插件管理工具krew https://blog.51cto.com/3241766/2452592

    Kubernetes 中如何开发一个 kubectl 的插件命令

    分享几个Kubernetes实用插件和工具  知乎

    如何编写一个支持 Krew 的 kubectl 插件

    认证插件  kubernete中文社区

  • 相关阅读:
    WP8.1 UI 编程 四、图形
    分治法 全排列问题的一个Java实现
    合并排序算法时间复杂度分析
    js如何实现复制粘贴功能
    关于<meta name="applicable-device"content="pc">
    ready
    css文字强制大写输入
    关于input,button标签在苹果手机上显示阴影解决办法
    【C#】中用if判断值是否是否为空
    视频格式MP4,需要转码
  • 原文地址:https://www.cnblogs.com/embedded-linux/p/12384733.html
Copyright © 2011-2022 走看看