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

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

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

kubectl的多樣用法

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2023-02-13 10:53 ? 次閱讀

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

打印當(dāng)前使用的API

#kubectl的主要作用就是與ApiServer進(jìn)行交互,而交互的過(guò)程,我們可以通過(guò)下面的方式來(lái)打印,
#這個(gè)命令尤其適合調(diào)試自己的api接口時(shí)使用.
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


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

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

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


#例如,下面的語(yǔ)句可以找到所有的Pods并打印可以執(zhí)行的語(yǔ)句
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"

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

統(tǒng)計(jì)具體某臺(tái)機(jī)器上運(yùn)行的所有pod

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

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

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

不知道有讀者看過(guò)我的這篇文章: 基于kubernetes的PaaS平臺(tái)中細(xì)力度控制pods方案的實(shí)現(xiàn). 均衡分布的工作前提是得知pod在各個(gè)機(jī)器的分布情況. 最好的辦法就是我們得到pod信息之后進(jìn)行簡(jiǎn)單的統(tǒng)計(jì), 這個(gè)工作可以使用awk實(shí)現(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的語(yǔ)法我沒(méi)深入了解,有興趣的讀者可以研究看看,這里我就不求甚解了.

kubectl proxy的使用

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

#當(dāng)你沒(méi)有設(shè)置kubeconfig而直接調(diào)用kubectl時(shí)
kubectlgetns-v=9
#可以打印出下面類(lèi)似的錯(cuò)誤
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
#也就是說(shuō)當(dāng)你不指定kubeconfig文件時(shí),kubectl會(huì)默認(rèn)訪問(wèn)本機(jī)的8080端口
#那么我們先啟動(dòng)一個(gè)kubectlproxy,然后指定監(jiān)聽(tīng)8080,再使用kubectl直接訪問(wèn),是不是就可行了呢,
#事實(shí)證明,安全與預(yù)想一致.
KUBECONFIG=~/.kube/config-symv3kubectlproxy-p8080
kubectlgetns
NAMESTATUSAGE
defaultActive127d

默認(rèn)啟動(dòng)的proxy是屏蔽了某些api的, 并且有一些限制, 例如無(wú)法使用exec進(jìn)入pod之中 可以使用kubectl proxy --help來(lái)看, 例如

#僅允許本機(jī)訪問(wèn)
--accept-hosts='^localhost$,^127.0.0.1$,^[::1]$':Regularexpressionforhoststhattheproxyshouldaccept.
#不允許訪問(wèn)下面的api,也就是說(shuō)默認(rèn)沒(méi)法exec進(jìn)入容器
--reject-paths='^/api/.*/pods/.*/exec,^/api/.*/pods/.*/attach':Regularexpressionforpathsthattheproxyshouldreject.Pathsspecifiedherewillberejectedevenacceptedby--accept-paths.

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

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

總結(jié)

kubectl是一個(gè)強(qiáng)大的命令行工具, 上面我只是介紹了我工作中對(duì)其用法的一點(diǎn)探索, 也并不鼓勵(lì)大家非要記住這些命令, 只是希望當(dāng)讀者需要的時(shí)候, 能夠想起來(lái)kubectl可以有類(lèi)似的功能, 就不需要針對(duì)幾個(gè)臨時(shí)需求去研讀client-api了.

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

    關(guān)注

    2

    文章

    1472

    瀏覽量

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

    關(guān)注

    4

    文章

    307

    瀏覽量

    27709

原文標(biāo)題:kubectl的多樣用法

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    詳解kubectl常用命令

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

    Linux lsof命令的基本用法

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

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

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

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

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

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

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

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

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

    單片機(jī)定時(shí)器的用法

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

    kubectl常用命令指南

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

    split在python中的用法

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

    pcb插針的用法

    pcb插針的用法
    的頭像 發(fā)表于 12-13 16:58 ?1736次閱讀

    開(kāi)關(guān)和按鈕的不同特點(diǎn)和用法!

    開(kāi)關(guān)和按鈕的不同特點(diǎn)和用法! 開(kāi)關(guān)和按鈕是常見(jiàn)的電子設(shè)備或電器的組成部分,它們?cè)诳刂齐娐坊虿僮麟娮釉O(shè)備時(shí)起著關(guān)鍵的作用。雖然它們都用于控制電氣電路的通斷或啟停,但它們之間存在一些不同的特點(diǎn)和用法
    的頭像 發(fā)表于 12-11 10:40 ?1193次閱讀

    plsy指令具體用法

    、WAV等。下面將詳細(xì)介紹plsy的用法。 安裝: 在使用plsy之前,首先需要在Unix系統(tǒng)中安裝。你可以通過(guò)在終端上運(yùn)行以下命令來(lái)安裝plsy: sudo apt-get install plsy
    的頭像 發(fā)表于 12-08 14:10 ?2140次閱讀

    oracle split函數(shù)用法舉例

    Split函數(shù)是Oracle中用于將一個(gè)字符串按照指定的分隔符進(jìn)行拆分的函數(shù)。其語(yǔ)法為:SPLIT(字符串, 分隔符)。 下面我將詳細(xì)介紹Split函數(shù)的用法,并提供一些示例,以幫助你更好地了解
    的頭像 發(fā)表于 12-06 09:56 ?8089次閱讀

    oracle中substr函數(shù)用法

    字符串的源字符串,start_position是子字符串的起始位置,length是要提取的子字符串的長(zhǎng)度(可選參數(shù))。 下面將詳細(xì)介紹SUBSTR函數(shù)的用法及示例。 基本用法 最簡(jiǎn)單的用法是只指定源
    的頭像 發(fā)表于 12-05 16:57 ?1185次閱讀

    while循環(huán)用法格式

    while循環(huán)是一種常用的循環(huán)結(jié)構(gòu),能夠按照指定條件多次重復(fù)執(zhí)行一段代碼。它的一般用法格式如下: while 條件表達(dá)式:循環(huán)體 在執(zhí)行while循環(huán)時(shí),首先會(huì)判斷條件表達(dá)式的值。如果條件表達(dá)式為
    的頭像 發(fā)表于 11-22 10:02 ?1659次閱讀