RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

kubectl的多樣用法

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-02-13 10:53 ? 次閱讀

kubectl是K8s官方附帶的命令行工具, 可以方便的操作K8s集群. 這篇文章主要介紹一些kubectl的別樣用法, 希望讀者有基礎(chǔ)的K8s使用經(jīng)驗.

打印當前使用的API

#kubectl的主要作用就是與ApiServer進行交互,而交互的過程,我們可以通過下面的方式來打印,
#這個命令尤其適合調(diào)試自己的api接口時使用.
kubectlgetns-v=9

e8c1410e-aaa3-11ed-bfe3-dac502259ad0.png

按狀態(tài)篩選容器以及刪除

kubectlgetpods--all-namespaces--field-selectorstatus.phase=Pending-ojson|
jq'.items[]|"kubectldeletepods(.metadata.name)-n(.metadata.namespace)"'|
xargs-n1bash-c


#這個命令要拆開來看
#首先,獲取所有ns中狀態(tài)為Pending的pods,并以json形式輸出
#這個語句其實由很多變體,比如,我想查找Failed的狀態(tài),或是某個deployment
kubectlgetpods--all-namespaces--field-selectorstatus.phase=Pending-ojson

#針對json變量進行處理,生成可用的腳本
#這里是我想介紹的重點,利用jq以及kubectl的輸出,構(gòu)建出可用的命令
jq'.items[]|"kubectldeletepods(.metadata.name)-n(.metadata.namespace)"'

#執(zhí)行每一條命令
#注意,這種命令一定要好好調(diào)試,刪掉預(yù)期之外的pod就不好了.
xargs-n1bash-c


#例如,下面的語句可以找到所有的Pods并打印可以執(zhí)行的語句
kubectlgetpods--all-namespaces--field-selectorstatus.phase=Running-ojson|
jq'.items[]|"kubectlgetpods(.metadata.name)-owide-n(.metadata.namespace)"'

"kubectlgetpodsmetrics-server-6d684c7b5-gtd6q-owide-nkube-system"
"kubectlgetpodslocal-path-provisioner-58fb86bdfd-98frc-owide-nkube-system"
"kubectlgetpodsnginx-deployment-574b87c764-xppmx-owide-ndefault"

#當然,如果只是刪除單個NS下面的一些pods,我會選擇下面的方法,但是它操作多個NS就很不方便了.
kubectl-ndefaultgetpods|grepCompleted|awk'{print$1}'|xargskubectl-ndefaultdeletepods

統(tǒng)計具體某臺機器上運行的所有pod

kubectl可以使用兩種選擇器, 一種是label, 一種是field, 可以看官網(wǎng)的介紹: Labels and Selectors Field Selectors

#它是一種選擇器,可以與上面的awk或者xargs配合使用.
#我個人平時都不喜歡用這個,直接get全部pods,然后grep查找感覺更快
kubectlgetpods--all-namespaces-owide--field-selectorspec.nodeName=pve-node1

統(tǒng)計Pod在不同機器的具體數(shù)量分布

不知道有讀者看過我的這篇文章: 基于kubernetes的PaaS平臺中細力度控制pods方案的實現(xiàn). 均衡分布的工作前提是得知pod在各個機器的分布情況. 最好的辦法就是我們得到pod信息之后進行簡單的統(tǒng)計, 這個工作可以使用awk實現(xiàn).

kubectl-ndefaultgetpods-owide-lapp="nginx"|awk'{print$7}'|
awk'{count[$0]++}
END{
printf("%-35s:%s
","Word","Count");
for(indincount){
printf("%-35s:%d
",ind,count[ind]);
}
}'

#執(zhí)行結(jié)果如下
Word:Count
NODE:1
pve-node1:1
pve-node2:1


#awk的語法我沒深入了解,有興趣的讀者可以研究看看,這里我就不求甚解了.

kubectl proxy的使用

你可以理解為這個命令為K8s的ApiServer做了一層代理, 使用該代理, 你可以直接調(diào)用API而不需要經(jīng)過鑒權(quán). 啟動之后, 甚至可以實現(xiàn)kubectl套娃, 下面是一個例子:

#當你沒有設(shè)置kubeconfig而直接調(diào)用kubectl時
kubectlgetns-v=9
#可以打印出下面類似的錯誤
curl-k-v-XGET-H"Accept:application/json,*/*"-H"User-Agent:kubectl/v1.21.3(linux/amd64)kubernetes/ca643a4"'http://localhost:8080/api?timeout=32s'
skippedcachingdiscoveryinfoduetoGet"http://localhost:8080/api?timeout=32s":dialtcp127.0.0.1connect:connectionrefused
#也就是說當你不指定kubeconfig文件時,kubectl會默認訪問本機的8080端口
#那么我們先啟動一個kubectlproxy,然后指定監(jiān)聽8080,再使用kubectl直接訪問,是不是就可行了呢,
#事實證明,安全與預(yù)想一致.
KUBECONFIG=~/.kube/config-symv3kubectlproxy-p8080
kubectlgetns
NAMESTATUSAGE
defaultActive127d

默認啟動的proxy是屏蔽了某些api的, 并且有一些限制, 例如無法使用exec進入pod之中 可以使用kubectl proxy --help來看, 例如

#僅允許本機訪問
--accept-hosts='^localhost$,^127.0.0.1$,^[::1]$':Regularexpressionforhoststhattheproxyshouldaccept.
#不允許訪問下面的api,也就是說默認沒法exec進入容器
--reject-paths='^/api/.*/pods/.*/exec,^/api/.*/pods/.*/attach':Regularexpressionforpathsthattheproxyshouldreject.Pathsspecifiedherewillberejectedevenacceptedby--accept-paths.

#想跳過exec的限制也很簡單,把reject-paths去掉就可以了
kubectlproxy-p8080--keepalive3600s--reject-paths=''-v=9

有人說這個kubectl proxy可能沒什么作用, 那可能僅僅是你還沒有實際的應(yīng)用場景. 例如當我想要調(diào)試K8s dashboard代碼的時候. 如果直接使用kubeconfig文件, 我沒法看到具體的請求過程, 如果你加上一層proxy轉(zhuǎn)發(fā), 并且設(shè)置-v=9的時候, 你就自動獲得了一個日志記錄工具, 在調(diào)試時相當有用.

總結(jié)

kubectl是一個強大的命令行工具, 上面我只是介紹了我工作中對其用法的一點探索, 也并不鼓勵大家非要記住這些命令, 只是希望當讀者需要的時候, 能夠想起來kubectl可以有類似的功能, 就不需要針對幾個臨時需求去研讀client-api了.

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1499

    瀏覽量

    61962
  • 工具
    +關(guān)注

    關(guān)注

    4

    文章

    311

    瀏覽量

    27770

原文標題:kubectl的多樣用法

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    DAC7562的CLR引腳怎么用法?可以懸空嗎?

    DAC7562的CLR引腳怎么用法?可以懸空嗎?能不能詳細解釋一下?謝謝
    發(fā)表于 12-17 08:16

    詳解kubectl常用命令

    詳解kubectl常用命令
    的頭像 發(fā)表于 11-05 15:39 ?193次閱讀
    詳解<b class='flag-5'>kubectl</b>常用命令

    Linux lsof命令的基本用法

    在 linux 系統(tǒng)中,一切皆文件。通過文件不僅僅可以訪問常規(guī)數(shù)據(jù),還可以訪問網(wǎng)絡(luò)連接和硬件。所以 lsof 命令不僅可以查看進程打開的文件、目錄,還可以查看進程監(jiān)聽的端口等 socket 相關(guān)的信息。本文將介紹 lsof 命令的基本用法,本文中 demo 的演示環(huán)境為 ubuntu 18.04。
    的頭像 發(fā)表于 10-23 11:52 ?237次閱讀
    Linux lsof命令的基本<b class='flag-5'>用法</b>

    共模電感的用法

    呈現(xiàn)出大電感,具有抑制作用,而對于差模信號則呈現(xiàn)出很小的漏電感,幾乎不起作用。以下是對共模電感用法的詳細探討。
    的頭像 發(fā)表于 10-17 15:12 ?557次閱讀

    Sn74hc245具體的用法是什么?

    Sn74hc245是緩沖器,但是具體的用法不會
    發(fā)表于 09-10 07:32

    SolidWorks教育版教學(xué)資源的多樣

    在數(shù)字化教育日益普及的今天,一款能夠提供多樣化教學(xué)資源的軟件工具對于工程教育的重要性不言而喻。SolidWorks教育版以其獨特的功能和廣泛的應(yīng)用,為學(xué)生和教師提供了一系列豐富多樣的教學(xué)資源,使工程學(xué)習(xí)更加生動有趣,實踐更加有效便捷。
    的頭像 發(fā)表于 06-26 17:35 ?409次閱讀
    SolidWorks教育版教學(xué)資源的<b class='flag-5'>多樣</b>性

    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件基本用法

    UIAbility組件的基本用法包括:指定UIAbility的啟動頁面以及獲取UIAbility的上下文[UIAbilityContext]。
    的頭像 發(fā)表于 06-06 11:02 ?468次閱讀
    鴻蒙Ability Kit(程序框架服務(wù))【UIAbility組件基本<b class='flag-5'>用法</b>】

    AWTK 開源串口屏開發(fā)(10) - 告警信息的高級用法

    告警信息是串口屏常用的功能,之前我們介紹了告警信息的基本用法,實現(xiàn)了告警信息的顯示和管理。本文介紹一下實現(xiàn)查詢告警信息和查看告警信息詳情的方法。1.功能之前我們介紹了告警信息的基本用法,實現(xiàn)了告警
    的頭像 發(fā)表于 02-24 08:23 ?307次閱讀
    AWTK 開源串口屏開發(fā)(10) - 告警信息的高級<b class='flag-5'>用法</b>

    Kubectl核心命令總結(jié):如何快速掌握K8s

    設(shè)置 kubectl 命令交互的 kubernetes 集群并修改配置信息。參閱 使用 kubeconfig 文件進行跨集群驗證 獲取關(guān)于配置文件的詳細信息。
    的頭像 發(fā)表于 02-23 14:43 ?458次閱讀
    <b class='flag-5'>Kubectl</b>核心命令總結(jié):如何快速掌握K8s

    verilog inout用法與仿真

    ,本文將詳細討論 inout 的用法和仿真。 首先,我們來了解一下 inout 的含義。 inout 是一種雙向信號類型,即可以作為輸入信號也可以作為輸出信號。它類似于雙向數(shù)據(jù)線,可以實現(xiàn)數(shù)據(jù)的雙向傳輸。在硬件設(shè)計中, inout 可以用于與外部設(shè)備進行通信,如鍵盤、鼠標、顯
    的頭像 發(fā)表于 02-23 10:15 ?3006次閱讀

    法拉電容放電保護原理是什么?如何正常使用法拉電容?

    法拉電容放電保護原理是什么?如何正常使用法拉電容? 法拉電容放電保護原理是指通過合理的設(shè)計和配置,保護法拉電容在放電過程中不受損壞的一種技術(shù)手段。法拉電容是一種具有高能量密度和長壽命的電容器
    的頭像 發(fā)表于 02-02 11:34 ?1851次閱讀

    單片機定時器的用法

    本章以CW32通用定時器為例介紹單片機定時器的用法。
    的頭像 發(fā)表于 01-04 10:37 ?1390次閱讀
    單片機定時器的<b class='flag-5'>用法</b>

    kubectl常用命令指南

    Kubectl 命令是操作 kubernetes 集群的最直接的方式,特別是運維人員,需要對這些命令有一個詳細的掌握
    的頭像 發(fā)表于 12-28 09:25 ?795次閱讀
    <b class='flag-5'>kubectl</b>常用命令指南

    LabVIEW SMO 的原理、用法和實際應(yīng)用

    ) 實例同步運行并共享數(shù)據(jù),從而能夠?qū)崿F(xiàn)高效的并行計算和更好的系統(tǒng)性能。在本文中,我們將詳細介紹 LabVIEW SMO 的原理、用法和實際應(yīng)用。 首先,我們需要了解 LabVIEW SMO 的基本原理
    的頭像 發(fā)表于 12-27 16:47 ?2160次閱讀

    split在python中的用法

    split在python中的用法 split()是Python中一個非常常用的字符串函數(shù),它能夠根據(jù)指定的分隔符將一個字符串分割成多個子字符串,并返回一個包含這些子字符串的列表。本文將詳細介紹
    的頭像 發(fā)表于 12-25 15:12 ?2018次閱讀
    RM新时代网站-首页