kubectl 最新常用命令 --V1.24版本

来源:https://www.cnblogs.com/xiong97/archive/2022/06/09/16360246.html
-Advertisement-
Play Games

Kubectl 自動補全 BASH source <(kubectl completion bash) # 在 bash 中設置當前 shell 的自動補全,要先安裝 bash-completion 包。 echo "source <(kubectl completion bash)" >> ~/. ...


Kubectl 自動補全

BASH

source <(kubectl completion bash) # 在 bash 中設置當前 shell 的自動補全,要先安裝 bash-completion 包。
echo "source <(kubectl completion bash)" >> ~/.bashrc # 在您的 bash shell 中永久的添加自動補全

還可以為 kubectl 使用一個速記別名,該別名也可以與 completion 一起使用:

alias k=kubectl
complete -F __start_kubectl k

Kubectl 上下文和配置

設置 kubectl 與哪個 Kubernetes 集群進行通信並修改配置信息。 查看使用 kubeconfig 跨集群授權訪問 文檔獲取配置文件詳細信息。

kubectl config view # 顯示合併的 kubeconfig 配置。

# 同時使用多個 kubeconfig 文件並查看合併的配置
KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view

# 獲取 e2e 用戶的密碼
kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'

kubectl config view -o jsonpath='{.users[].name}'    # 顯示第一個用戶
kubectl config view -o jsonpath='{.users[*].name}'   # 獲取用戶列表
kubectl config get-contexts                          # 顯示上下文列表
kubectl config current-context                       # 展示當前所處的上下文
kubectl config use-context my-cluster-name           # 設置預設的上下文為 my-cluster-name

# 添加新的用戶配置到 kubeconf 中,使用 basic auth 進行身份認證
kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword

# 在指定上下文中持久性地保存名字空間,供所有後續 kubectl 命令使用
kubectl config set-context --current --namespace=ggckad-s2

# 使用特定的用戶名和名字空間設置上下文
kubectl config set-context gce --user=cluster-admin --namespace=foo \
  && kubectl config use-context gce

kubectl config unset users.foo                       # 刪除用戶 foo

# 設置或顯示 context / namespace 的短別名
# (僅適用於 bash 和 bash 相容的 shell,在使用 kn 設置命名空間之前要先設置 current-context)
alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f'
alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f'

Kubectl apply

apply 通過定義 Kubernetes 資源的文件來管理應用。 它通過運行 kubectl apply 在集群中創建和更新資源。 這是在生產中管理 Kubernetes 應用的推薦方法

# -f 指定路徑
kubectl apply -f ./my-manifest.yaml           # 創建資源
kubectl apply -f ./my1.yaml -f ./my2.yaml     # 使用多個文件創建
kubectl apply -f ./dir                        # 基於目錄下的所有清單文件創建資源
kubectl apply -f https://git.io/vPieo         # 從 URL 中創建資源

# 從標準輸入創建多個 YAML 對象
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    args:
    - sleep
    - "1000000"
---
apiVersion: v1
kind: Pod
metadata:
  name: busybox-sleep-less
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    args:
    - sleep
    - "1000"
EOF

Kubectl get

get 查看pod和查找service controller資源

# get 命令的基本輸出
kubectl get services                          # 列出當前命名空間下的所有 services
kubectl get pods --all-namespaces             # 列出所有命名空間下的全部的 Pods
kubectl get pods -o wide                      # 列出當前命名空間下的全部 Pods,並顯示更詳細的信息
kubectl get deployment my-dep                 # 列出某個特定的 Deployment
kubectl get pods                              # 列出當前命名空間下的全部 Pods
kubectl get pod my-pod -o yaml                # 獲取一個 pod 的 YAML
# 列出當前名字空間下所有 Services,按名稱排序
kubectl get services --sort-by=.metadata.name
# 列舉所有 PV 持久捲,按容量排序
kubectl get pv --sort-by=.spec.capacity.storage
# 列舉所有 Pods 中初始化容器的容器 ID(containerID)
# 可用於在清理已停止的容器時避免刪除初始化容器
kubectl get pods --all-namespaces -o jsonpath='{range .items[*].status.initContainerStatuses[*]}{.containerID}{"\n"}{end}' | cut -d/ -f3

# 列出事件(Events),按時間戳排序
kubectl get events --sort-by=.metadata.creationTimestamp

# 比較當前的集群狀態和假定某清單被應用之後的集群狀態
kubectl diff -f ./my-manifest.yaml

# 生成一個句點分隔的樹,其中包含為節點返回的所有鍵
# 在複雜的嵌套JSON結構中定位鍵時非常有用
kubectl get nodes -o json | jq -c 'paths|join(".")'

# 生成一個句點分隔的樹,其中包含為pod等返回的所有鍵
kubectl get pods -o json | jq -c 'paths|join(".")'

 kubectl rollout

rollout更新資源,版本 回退

kubectl rollout history deployment/frontend                      # 檢查 Deployment 的歷史記錄,包括版本
kubectl rollout undo deployment/frontend                         # 回滾到上次部署版本
kubectl rollout undo deployment/frontend --to-revision=2         # 回滾到特定部署版本
kubectl rollout status -w deployment/frontend                    # 監視 "frontend" Deployment 的滾動升級狀態直到完成
kubectl rollout restart deployment/frontend                      # 輪替重啟 "frontend" Deployment

 kubectl patch

更新部分資源

# 部分更新某節點
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'

# 更新容器的鏡像;spec.containers[*].name 是必須的。因為它是一個合併性質的主鍵。
kubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'

# 使用帶位置數組的 JSON patch 更新容器的鏡像
kubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'

# 使用帶位置數組的 JSON patch 禁用某 Deployment 的 livenessProbe
kubectl patch deployment valid-deployment  --type json   -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'

# 在帶位置數組中添加元素
kubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'

 kubectl edit

編輯資源

kubectl edit svc/docker-registry                      # 編輯名為 docker-registry 的服務
KUBE_EDITOR="nano" kubectl edit svc/docker-registry   # 使用其他編輯器

 kubectl scale

對資源進行擴縮容

kubectl scale --replicas=3 rs/foo                                 # 將名為 'foo' 的副本集伸縮到 3 副本
kubectl scale --replicas=3 -f foo.yaml                            # 將在 "foo.yaml" 中的特定資源伸縮到 3 個副本
kubectl scale --current-replicas=2 --replicas=3 deployment/mysql  # 如果名為 mysql 的 Deployment 的副本當前是 2,那麼將它伸縮到 3
kubectl scale --replicas=5 rc/foo rc/bar rc/baz                   # 伸縮多個副本控制器

 kubectl delete

刪除資源

kubectl delete -f ./pod.json                                              # 刪除在 pod.json 中指定的類型和名稱的 Pod
kubectl delete pod,service baz foo                                        # 刪除名稱為 "baz" 和 "foo" 的 Pod 和服務
kubectl delete pods,services -l name=myLabel                              # 刪除包含 name=myLabel 標簽的 pods 和服務
kubectl -n my-ns delete pod,svc --all                                     # 刪除在 my-ns 名字空間中全部的 Pods 和服務
# 刪除所有與 pattern1 或 pattern2 awk 模式匹配的 Pods
kubectl get pods  -n mynamespace --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs  kubectl delete -n mynamespace pod

kubectl log

日誌查看

kubectl logs my-pod                                 # 獲取 pod 日誌(標準輸出)
kubectl logs -l name=myLabel                        # 獲取含 name=myLabel 標簽的 Pods 的日誌(標準輸出)
kubectl logs my-pod --previous                      # 獲取上個容器實例的 pod 日誌(標準輸出)
kubectl logs my-pod -c my-container                 # 獲取 Pod 容器的日誌(標準輸出, 多容器場景)
kubectl logs -l name=myLabel -c my-container        # 獲取含 name=myLabel 標簽的 Pod 容器日誌(標準輸出, 多容器場景)
kubectl logs my-pod -c my-container --previous      # 獲取 Pod 中某容器的上個實例的日誌(標準輸出, 多容器場景)
kubectl logs -f my-pod                              # 流式輸出 Pod 的日誌(標準輸出)
kubectl logs -f my-pod -c my-container              # 流式輸出 Pod 容器的日誌(標準輸出, 多容器場景)
kubectl logs -f -l name=myLabel --all-containers    # 流式輸出含 name=myLabel 標簽的 Pod 的所有日誌(標準輸出)

 

kubectl cp

從容器中複製文件和目錄

kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir            # 將 /tmp/foo_dir 本地目錄複製到遠程當前命名空間中 Pod 中的 /tmp/bar_dir
kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container    # 將 /tmp/foo 本地文件複製到遠程 Pod 中特定容器的 /tmp/bar 下
kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar       # 將 /tmp/foo 本地文件複製到遠程 “my-namespace” 命名空間內指定 Pod 中的 /tmp/bar
kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar       # 將 /tmp/foo 從遠程 Pod 複製到本地 /tmp/bar
Note: kubectl cp 要求容器鏡像中存在 “tar” 二進位文件。如果 “tar” 不存在,kubectl cp 將失敗。 對於進階用例,例如符號鏈接、通配符擴展或保留文件許可權,請考慮使用 kubectl exec
tar cf - /tmp/foo | kubectl exec -i -n my-namespace my-pod -- tar xf - -C /tmp/bar  # 將 /tmp/foo 本地文件複製到遠程 “my-namespace” 命名空間中 pod 中的 /tmp/bar
kubectl exec -n my-namespace my-pod -- tar cf - /tmp/foo | tar xf - -C /tmp/bar    # 將 /tmp/foo 從遠程 pod 複製到本地 /tmp/bar
<!--
## Interacting with Deployments and Services
-->
## 與 Deployments 和 Services 進行交互

<!--

 

與節點和集群進行交互

kubectl cordon my-node                                                # 標記 my-node 節點為不可調度
kubectl drain my-node                                                 # 對 my-node 節點進行清空操作,為節點維護做準備
kubectl uncordon my-node                                              # 標記 my-node 節點為可以調度
kubectl top node my-node                                              # 顯示給定節點的度量值
kubectl cluster-info                                                  # 顯示主控節點和服務的地址
kubectl cluster-info dump                                             # 將當前集群狀態轉儲到標準輸出
kubectl cluster-info dump --output-directory=/path/to/cluster-state   # 將當前集群狀態輸出到 /path/to/cluster-state

# 如果已存在具有指定鍵和效果的污點,則替換其值為指定值。
kubectl taint nodes foo dedicated=special-user:NoSchedule

資源類型

列出所支持的全部資源類型和它們的簡稱、API 組, 是否是名字空間作用域 和 Kind。

kubectl api-resources

用於探索 API 資源的其他操作:

kubectl api-resources --namespaced=true      # 所有命名空間作用域的資源
kubectl api-resources --namespaced=false     # 所有非命名空間作用域的資源
kubectl api-resources -o name                # 用簡單格式列舉所有資源(僅顯示資源名稱)
kubectl api-resources -o wide                # 用擴展格式列舉所有資源(又稱 "wide" 格式)
kubectl api-resources --verbs=list,get       # 支持 "list" 和 "get" 請求動詞的所有資源
kubectl api-resources --api-group=extensions # "extensions" API 組中的所有資源

格式化輸出

要以特定格式將詳細信息輸出到終端視窗,將 -o(或者 --output)參數添加到支持的 kubectl 命令中。

輸出格式 描述
-o=custom-columns=<spec> 使用逗號分隔的自定義列來列印表格
-o=custom-columns-file=<filename> 使用 <filename> 文件中的自定義列模板列印表格
-o=json 輸出 JSON 格式的 API 對象
-o=jsonpath=<template> 列印 jsonpath 表達式中定義的欄位
-o=jsonpath-file=<filename> 列印在 <filename> 文件中定義的 jsonpath 表達式所指定的欄位。
-o=name 僅列印資源名稱而不列印其他內容
-o=wide 以純文本格式輸出額外信息,對於 Pod 來說,輸出中包含了節點名稱
-o=yaml 輸出 YAML 格式的 API 對象

使用 -o=custom-columns 的示例:

# 集群中運行著的所有鏡像
kubectl get pods -A -o=custom-columns='DATA:spec.containers[*].image'

# 列舉 default 名字空間中運行的所有鏡像,按 Pod 分組
kubectl get pods --namespace default --output=custom-columns="NAME:.metadata.name,IMAGE:.spec.containers[*].image"

# 除 "k8s.gcr.io/coredns:1.6.2" 之外的所有鏡像
kubectl get pods -A -o=custom-columns='DATA:spec.containers[?(@.image!="k8s.gcr.io/coredns:1.6.2")].image'

# 輸出 metadata 下麵的所有欄位,無論 Pod 名字為何
kubectl get pods -A -o=custom-columns='DATA:metadata.*'

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java 8是Java的一個重大版本,是目前企業中使用最廣泛的一個版本。 它支持函數式編程,新的Stream API 、新的日期 API等一系列新特性。 掌握Java8的新特性已經是java程式員的標配,掌握了它,就可以看懂公司里的代碼、高效率地處理大量集合數據以及消滅“嵌套地獄”等等。 ...
  • 0. 文章目的: 介紹變體的概念,並介紹其對C#的意義 1. 閱讀基礎 瞭解C#進階語言功能的使用(尤其是泛型、委托、介面) 2. 從示例入手,理解變體 變體這一概念用於描述存在繼承關係的類型間的轉化,這一概念並非只適用於C#,在許多其他的OOP語言中也都有變體概念。變體一共有三種:協變、逆變與不變 ...
  • 0. 文章目的 本文面向有一定.NET C#基礎知識的學習者,介紹C#中結構體定義、使用以及特點。 1. 閱讀基礎 瞭解C#基本語法 瞭解.NET中的棧與托管堆 2. 值類型 2.1 .NET的兩大類型 在.NET中,所有類型都是object類型的子類,而在object繁多的子類中,又可以將它們歸結 ...
  • 最近通過WPF開發項目,為了對WPF知識點進行總結,所以利用業餘時間,開發一個學生信息管理系統【Student Information Management System】。前四篇文章進行了框架搭建和模塊劃分,後臺WebApi介面編寫,以及課程管理模塊,班級管理模塊,學生管理模塊的開發,本文在前四篇... ...
  • 0. 文章目的 本文面向有一定.NET C#基礎知識的學習者,介紹.NET中事件的相關概念、基本知識及其使用方法 1. 閱讀基礎 理解C#基本語法(方法的聲明、方法的調用、類的定義) 2. 從委托說起,到底什麼是事件 2.1 方法與委托 (1)從一個案例開始說起 在討論本節主題之前,我們先來看一個實 ...
  • 0. 文章目的 本文面向有一定.NET C#基礎知識的學習者,介紹C#中的方法修飾符的含義和使用以及註意事項。 1. 閱讀基礎 理解C#基本語法(如方法聲明) 理解OOP基本概念(如多態) 2. 概念:什麼是方法修飾符 在C#中,一個方法通常按如下形式聲明 [訪問修飾符] [方法修飾符] [返回類型 ...
  • 0. 文章目的 本文面向有一定.NET C#基礎知識的學習者,介紹在C#中的常用的對象比較手段,並提供一些編碼上的建議。 1. 閱讀基礎 1:理解C#基本語法與基本概念(如類、方法、欄位與變數聲明,知道class引用類型與struct值類型之間存在差異) 2:理解OOP基本概念(如類、對象、方法的概 ...
  • 寫在開篇 關於prometheus的高可用方案,經過筆者不斷的研究、對比、和搜索,發現不管是官方、還是各大搜索引擎搜索出來的方案,都不符合筆者的需求。因此,筆者自己設計了一套prometheus主備的方案。該方案是一個很low的方案,但經過不斷的實踐、驗證,最後發現還挺實用。關於本方案,筆者以後還會 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...