2022-10-31 K8S技巧

Kubectl 是 Kubernetes 最重要的命令行工具。在 Flant矢空,我們會在 Wiki 和 Slack 上相互分享 Kubectl 的妙用(其實我們還有個搜索引擎铁瞒,不過那就是另外一回事了)闹击。多年以來,我們在 kubectl 方面積累了很多技巧,現(xiàn)在想要將其中的部分分享給社區(qū)冯丙。

我相信很多讀者對這些命令都非常熟悉;然而我還是希望讀者能夠從本文中有所獲益遭京,進而提高生產(chǎn)力胃惜。

下列內(nèi)容有的是來自我們的工程師,還有的是來自互聯(lián)網(wǎng)哪雕。我們對后者也進行了測試船殉,并且確認其有效性。

現(xiàn)在開始吧斯嚎。

獲取 Pod 和節(jié)點

  1. 我猜你知道如何獲取 Kubernetes 集群中所有 Namespace 的 Pod——使用 --all-namepsaces 就可以利虫。然而不少朋友還不知道挨厚,現(xiàn)在這一開關還有了 -A 的縮寫。
  2. 如何查找非 running 狀態(tài)的 Pod 呢糠惫? kubectl get pods -A --field-selector=status.phase!=Running | grep -v Complete 順便一說疫剃,--field-selector 是個值得深入一點的參數(shù)。
  3. 如何獲取節(jié)點列表及其內(nèi)存容量: kubectl get no -o json | \ jq -r '.items | sort_by(.status.capacity.memory)[]|[.metadata.name,.status.capacity.memory]| @tsv'
  4. 獲取節(jié)點列表硼讽,其中包含運行在每個節(jié)點上的 Pod 數(shù)量: kubectl get po -o json --all-namespaces | \ jq '.items | group_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort_by(.count)'
  5. 有時候 DaemonSet 因為某種原因沒能在某個節(jié)點上啟動巢价。手動搜索會有點麻煩: $ ns=my-namespace $ pod_template=my-pod $ kubectl get node | grep -v \"$(kubectl -n ${ns} get pod --all-namespaces -o wide | fgrep ${pod_template} | awk '{print $8}' | xargs -n 1 echo -n "\|" | sed 's/[[:space:]]*//g')\"
  6. 使用 kubectl top 獲取 Pod 列表并根據(jù)其消耗的 CPU 或 內(nèi)存進行排序: # cpu $ kubectl top pods -A | sort --reverse --key 3 --numeric # memory $ kubectl top pods -A | sort --reverse --key 4 --numeric
  7. 獲取 Pod 列表,并根據(jù)重啟次數(shù)進行排序: kubectl get pods —sort-by=.status.containerStatuses[0].restartCount 當然也可以使用 PodStatus 以及 ContainerStatus 的其它字段進行排序固阁。

獲取其它數(shù)據(jù)

  1. 運行 Ingress 時壤躲,經(jīng)常要獲取 Service 對象的 selector 字段,用來查找 Pod备燃。過去要打開 Service 的清單才能完成這個任務碉克,現(xiàn)在使用 -o wide 參數(shù)也可以: $ kubectl -n jaeger get svc -o wide NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR jaeger-cassandra ClusterIP None <none> 9042/TCP 77d app=cassandracluster,cassandracluster=jaeger-cassandra,cluster=jaeger-cassandra
  2. 如何輸出 Pod 的 requestslimits$ kubectl get pods -A -o=custom-columns='NAME:spec.containers[*].name,MEMREQ:spec.containers[*].resources.requests.memory,MEMLIM:spec.containers[*].resources.limits.memory,CPUREQ:spec.containers[*].resources.requests.cpu,CPULIM:spec.containers[*].resources.limits.cpu' NAME MEMREQ MEMLIM CPUREQ CPULIM coredns 70Mi 170Mi 100m <none> coredns 70Mi 170Mi 100m <none> ...
  3. kubectl run(以及 createapply并齐、patch)命令有個厲害的參數(shù) --dry-run漏麦,該參數(shù)讓用戶無需真正操作集群就能觀察集群的行為,如果配合 -o yaml冀膝,就能輸出命令對應的 YAML: $ kubectl run test --image=grafana/grafana --dry-run -o yaml apiVersion: apps/v1 kind: Deployment metadata: creationTimestamp: null labels: run: test name: test spec: replicas: 1 selector: matchLabels: run: test 簡單的把輸出內(nèi)容保存到文件唁奢,刪除無用字段就可以使用了。 1.18 開始 kubectl run 生成的是 Pod 而非 Deployment窝剖。
  4. 獲取指定資源的描述清單: kubectl explain hpa KIND: HorizontalPodAutoscaler VERSION: autoscaling/v1 DESCRIPTION: configuration of a horizontal pod autoscaler. FIELDS: apiVersion <string> ...

網(wǎng)絡

  1. 獲取集群節(jié)點的內(nèi)部 IP: $ kubectl get nodes -o json | jq -r '.items[].status.addresses[]? | select (.type == "InternalIP") | .address' | \ paste -sd "\n" - 9.134.14.252
  2. 獲取所有的 Service 對象以及其 nodePort$ kubectl get -A svc -o json | jq -r '.items[] | [.metadata.name,([.spec.ports[].nodePort | tostring ] | join("|"))]| @tsv' kubernetes null ...
  3. 在排除 CNI(例如 Flannel)故障的時候麻掸,經(jīng)常會需要檢查路由來識別故障 Pod。Pod 子網(wǎng)在這里非常有用: $ kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}' | tr " " "\n" fix-doc-azure-container-registry-config ? 10.120.0.0/24 10.120.1.0/24 10.120.2.0/24

日志

  1. 使用可讀的時間格式輸出日志: $ kubectl logs -f fluentbit-gke-qq9w9 -c fluentbit --timestamps 2020-09-10T13:10:49.822321364Z Fluent Bit v1.3.11 2020-09-10T13:10:49.822373900Z Copyright (C) Treasure Data 2020-09-10T13:10:49.822379743Z 2020-09-10T13:10:49.822383264Z [2020/09/10 13:10:49] [ info] Configuration:
  2. 只輸出尾部日志: kubectl logs -f fluentbit-gke-qq9w9 -c fluentbit --tail=10 [2020/09/10 13:10:49] [ info] ___________ [2020/09/10 13:10:49] [ info] filters: [2020/09/10 13:10:49] [ info] parser.0 ...
  3. 輸出一個 Pod 中所有容器的日志: kubectl -n my-namespace logs -f my-pod —all-containers
  4. 使用標簽選擇器輸出多個 Pod 的日志: kubectl -n my-namespace logs -f -l app=nginx
  5. 獲取“前一個”容器的日志(例如崩潰的情況): kubectl -n my-namespace logs my-pod —previous

其它

  1. 把 Secret 復制到其它命名空間: kubectl get secrets -o json --namespace namespace-old | \ jq '.items[].metadata.namespace = "namespace-new"' | \ kubectl create-f -
  2. 下面兩個命令可以生成一個用于測試的自簽發(fā)證書: openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=grafana.mysite.ru/O=MyOrganization" kubectl -n myapp create secret tls selfsecret --key tls.key --cert tls.crt
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赐纱,一起剝皮案震驚了整個濱河市脊奋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疙描,老刑警劉巖诚隙,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異起胰,居然都是意外死亡久又,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門效五,熙熙樓的掌柜王于貴愁眉苦臉地迎上來地消,“玉大人,你說我怎么就攤上這事畏妖÷鲋矗” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵戒劫,是天一觀的道長半夷。 經(jīng)常有香客問我婆廊,道長,這世上最難降的妖魔是什么巫橄? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任淘邻,我火速辦了婚禮,結果婚禮上湘换,老公的妹妹穿的比我還像新娘列荔。我一直安慰自己,他們只是感情好枚尼,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著砂吞,像睡著了一般署恍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜻直,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天盯质,我揣著相機與錄音,去河邊找鬼概而。 笑死呼巷,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的赎瑰。 我是一名探鬼主播王悍,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼餐曼!你這毒婦竟也來了压储?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤源譬,失蹤者是張志新(化名)和其女友劉穎集惋,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踩娘,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡刮刑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了养渴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片雷绢。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厚脉,靈堂內(nèi)的尸體忽然破棺而出习寸,到底是詐尸還是另有隱情,我是刑警寧澤傻工,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布霞溪,位于F島的核電站孵滞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鸯匹。R本人自食惡果不足惜坊饶,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望殴蓬。 院中可真熱鬧匿级,春花似錦、人聲如沸染厅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肖粮。三九已至孤页,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涩馆,已是汗流浹背行施。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留魂那,地道東北人蛾号。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像涯雅,于是被迫代替她去往敵國和親鲜结。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容