亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Kubernetes 中如何開發(fā)一個(gè) kubectl 的插件命令

newsning / 1677人閱讀

摘要:基于以上的要求,我們可以用任何語(yǔ)言去編寫這個(gè)命令,比如我們最簡(jiǎn)單的用語(yǔ)言寫一個(gè)的插件命令嘗試下。發(fā)現(xiàn)插件提供了一個(gè)的命令,該命令可以使用子命令來(lái)列舉當(dāng)前系統(tǒng)中的插件命令。它繼承命令的執(zhí)行環(huán)境。

背景

在日常使用中,Kubectl 作為和 Kubernetes 集群進(jìn)行交互的工具,提供了豐富的功能。但是偶爾也有時(shí)候,你想做一些 Kubectl 暫時(shí)還不支持的功能。那么在這種情況下,如何不改變 Kubectl 的代碼并且重新編譯就能引入新的功能呢? 這個(gè)問(wèn)題的答案就是采用 Kubectl 的 Plugin 機(jī)制。

Kubectl 的 Plugin 機(jī)制在 v1.8.0 版本的時(shí)候就引入了,并且在 v1.12.0 版本中進(jìn)行了大規(guī)模的重構(gòu)以適應(yīng)更加復(fù)雜多樣的場(chǎng)景,并且最終在 v1.14.0 版本中穩(wěn)定下來(lái)。所以你必須使用 Kubectl v1.12.0 及以上版本才可以支持當(dāng)前的插件命令。

插件命令

所謂的插件命令其實(shí)很簡(jiǎn)單,只要符合以下幾個(gè)特點(diǎn)即可:

(1) 該命令是一個(gè)可執(zhí)行的文件;
(2) 該命令能夠通過(guò) $PATH 搜索到,也就是說(shuō)如果需要,你必須把這個(gè)命令加入到 $PATH 中;
(3) 該命令必須以 kubectl- 開頭,例如 kubectl-echo 就是一個(gè)合法的插件命令名稱。

基于以上的要求,我們可以用任何語(yǔ)言去編寫這個(gè)命令,比如我們最簡(jiǎn)單的用 C 語(yǔ)言寫一個(gè) kubectl-hello 的插件命令嘗試下。

#include 
int
main(int argc, char *argv[])
{
    printf("hello, i am a kubelet plugin command
");
}

然后我們編譯一下:

$ gcc -o kubectl-hello kubectl-hello.c

然后我們把這個(gè)命令所在的目錄放到系統(tǒng)的 $PATH 變量中,最后通過(guò) kubectl 命令嘗試下。

$  kubectl hello
hello, i am a kubelet plugin command

通過(guò)上面的輸出我們可以看到,這個(gè)插件命令已經(jīng)成功完成了,那么剩下來(lái)就是利用你熟悉的語(yǔ)言來(lái)編寫二進(jìn)制工具來(lái)滿足你的需求了。

發(fā)現(xiàn)插件

Kubectl 提供了一個(gè) plugin 的命令,該命令可以使用子命令 list 來(lái)列舉當(dāng)前系統(tǒng)中的插件命令。具體的搜索方法如下:

(1) 搜索系統(tǒng)的 $PATH 中指定的所有的目錄,查找所有以 kubectl- 開頭的文件;
(2) 如果搜索到的匹配以 kubectl- 開頭的文件是可執(zhí)行文件,那么會(huì)按照順序作為插件命令輸出;如果不是可執(zhí)行文件,也會(huì)輸出,但是同時(shí)會(huì)輸出一個(gè) Warning 的信息;

當(dāng)前限制

雖然我們可以自定義插件命令,但是有個(gè)限制就是你無(wú)法定義一個(gè) kubectl 已經(jīng)存在的命令去試圖覆蓋原命令的行為。例如 kubectl-version 這樣的命令永遠(yuǎn)不會(huì)被執(zhí)行,因?yàn)?kubectl 會(huì)優(yōu)先執(zhí)行內(nèi)置的 version 命令。基于這樣的原因,你也無(wú)法給已有的命令增加額外的子命令。

使用插件

插件命令不需要安裝,也不需要預(yù)加載任何東西。它繼承 kubectl 命令的執(zhí)行環(huán)境。kubectl 通過(guò)插件命令的名稱來(lái)執(zhí)行它。例如對(duì)于上面的名為 kubectl-hello 的命令,kubectl 就通過(guò) $ kubectl hello 來(lái)執(zhí)行它。

對(duì)于插件命令來(lái)講,它接收到的第一個(gè)參數(shù)總是它文件所在的全路徑。對(duì)于上面的 kubectl-hello 命令,我們稍作修改,用來(lái)打印所有的參數(shù)。

#include 
int
main(int argc, char *argv[])
{
    int        i = 0;
    printf("hello, i am a kubelet plugin command
");
    printf("
");
    for (; i < argc; i++) {
        printf("%s
", argv[i]);
    }
}

輸出如下:

$ kubectl hello kubernetes
hello, i am a kubelet plugin command

/Users/jemy/Bin/k8s-plugins/kubectl-hello
kubernetes
插件命名

對(duì)于插件的命令,必須了解的兩點(diǎn)如下:

(1) 插件命令支持子命令,其格式必須為 kubectl-cmd-cmd1-cmd11 ,也就是每個(gè)命令通過(guò) - 分隔。這樣在調(diào)用的時(shí)候可以使用 $ kubectl cmd cmd1 cmd11 這樣的方式來(lái)調(diào)用。
(2) 如果要在插件命令中使用多個(gè)單詞構(gòu)成一個(gè)命令,那么多個(gè)單詞必須用 _ 進(jìn)行分隔,例如對(duì)于 kubectl-hello_world 命令,可以通過(guò) $ kubectl hello_world 這樣的方式來(lái)調(diào)用。
(3) 插件命令必須自行解析所有傳給該命令的選項(xiàng)參數(shù),并進(jìn)行相應(yīng)的處理。

插件管理

鑒于 kubernetes 本身并沒(méi)有提供插件命令的包管理器用來(lái)安裝和更新插件命令,我們可以使用 Kubernetes-sigs 項(xiàng)目中的 krew 來(lái)完成相關(guān)工作。

參考文檔:https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/32995.html

相關(guān)文章

  • Kubernetes1.14版本亮點(diǎn)新功能

    摘要:當(dāng)服務(wù)器可以作為節(jié)點(diǎn)以后,用戶可以在容器中運(yùn)行基于平臺(tái)的應(yīng)用了比如程序等這也使得成為第一個(gè)全功能的跨平臺(tái)集群管理工具。同時(shí),新解決方案還采用了臨時(shí)密鑰來(lái)加強(qiáng)節(jié)點(diǎn)間證書傳遞的安全性。 部分翻譯自https://sysdig.com/blog/whats... Kubernetes 1.14的亮點(diǎn)新功能: 支持Windows容器服務(wù) 可以通過(guò)kubeadm動(dòng)態(tài)地創(chuàng)建一個(gè)高可用集群 將ku...

    skinner 評(píng)論0 收藏0
  • Kubernetes 1.14:Windows節(jié)點(diǎn)生產(chǎn)級(jí)支持、Kubectl更新、持久本地卷GA

    摘要:分布式文件系統(tǒng)和數(shù)據(jù)庫(kù),由于性能和成本,是持久性本地存儲(chǔ)的主要用例。在裸機(jī)上,除了性能之外,本地存儲(chǔ)通常更便宜,并且使用它是配置分布式文件系統(tǒng)的必要條件。 作者:1.14發(fā)布團(tuán)隊(duì) 我們很高興地宣布推出Kubernetes 1.14,這是我們2019年的首次發(fā)布! showImg(https://segmentfault.com/img/bVbqrJZ?w=300&h=293); Kub...

    Eastboat 評(píng)論0 收藏0
  • Kubernetes 1.14:Windows節(jié)點(diǎn)生產(chǎn)級(jí)支持、Kubectl更新、持久本地卷GA

    摘要:分布式文件系統(tǒng)和數(shù)據(jù)庫(kù),由于性能和成本,是持久性本地存儲(chǔ)的主要用例。在裸機(jī)上,除了性能之外,本地存儲(chǔ)通常更便宜,并且使用它是配置分布式文件系統(tǒng)的必要條件。 作者:1.14發(fā)布團(tuán)隊(duì) 我們很高興地宣布推出Kubernetes 1.14,這是我們2019年的首次發(fā)布! showImg(https://segmentfault.com/img/bVbqrJZ?w=300&h=293); Kub...

    B0B0 評(píng)論0 收藏0
  • 使用 Kubernetes 來(lái)部署你 Laravel 程序

    摘要:有些人將其稱為容器編排平臺(tái),而并非唯一的此類平臺(tái)。但是在中,您可以快速擴(kuò)展出多個(gè)實(shí)例你看看使用擴(kuò)展你的網(wǎng)站是何其便捷。當(dāng)你指向群集的地址和節(jié)點(diǎn)的端口號(hào)時(shí),你就已經(jīng)可見瀏覽器中正在運(yùn)行的程序了。 showImg(https://segmentfault.com/img/remote/1460000017838786?w=1120&h=757); Laravel 是開發(fā) PHP 應(yīng)用程序的...

    JowayYoung 評(píng)論0 收藏0
  • Kubernetes 1.14 正式發(fā)布,Windows節(jié)點(diǎn)生產(chǎn)級(jí)支持!

    摘要:此次新版的最重大更新無(wú)疑為對(duì)節(jié)點(diǎn)的生產(chǎn)級(jí)支持。持久化本地存儲(chǔ)的最主要用例是分布式文件系統(tǒng)和數(shù)據(jù)庫(kù),主要是由于性能和成本的原因。在裸機(jī)上,除了性能之外,本地存儲(chǔ)通常也更便宜,并且使用它是配置分布式文件系統(tǒng)的必要條件。 Kubernetes 1.14現(xiàn)已正式發(fā)布,這是Kubernetes在2019年的首次更新! Kubernetes 1.14由31個(gè)增強(qiáng)功能組成:10個(gè)功能現(xiàn)進(jìn)入Stabl...

    wean 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<