從未有過的Kubectl指南
你是哪種工程師?光看外表,有人能猜出來嗎?很可能猜不出來。
譯自The guide to kubectl I never had.,作者 Jake Page。
如果有人通過觀察你的鍵盤就能猜出來呢?現(xiàn)在可能稍微容易一點(diǎn)了。
當(dāng)鍵盤上的“k”鍵已經(jīng)磨損時,你就知道自己正在與一位Kubernetes工程師打交道。
在Glasskube辦公室,你會發(fā)現(xiàn)到處都是備用的 “k” 鍵,以備不時之需。
當(dāng)然,我是在開玩笑。
我并不確定磨損的鍵盤能說明其主人的什么情況。但我確實(shí)知道,對于任何想要成為一名熟練的Kubernetes管理員的人來說,kubectl 有多重要。
kubectl 是用于與 Kubernetes API 通信的 CLI 工具,它乍一看似乎很簡單,但很快就會變得復(fù)雜。
因此,在這篇博文中,我的目標(biāo)是編寫我剛開始時希望擁有的指南。首先關(guān)注命令語法和有用的命令,然后再轉(zhuǎn)向插件和工具的充滿活力的生態(tài)系統(tǒng),這些插件和工具旨在擴(kuò)展 kubectl 和 Kubernetes 的功能。
同時分享一些提示和技巧,以及一份有用的 kubectl 速查表。
讓我們開始吧。
免責(zé)聲明
這不是一篇關(guān)于 Kubernetes 的文章。K8s 是一項極其龐大的技術(shù),涵蓋了眾多概念,例如各種類型的 Kubernetes 對象及其交互。對于此討論,我假設(shè)你熟悉這些概念。相反,我將專門關(guān)注 kubectl、它的用法以及圍繞它構(gòu)建的工具。
開始之前
如果你支持讓 Kubernetes 軟件包管理對每個人都更好的開源項目,那么請考慮支持Glasskube,在 GitHub 上給我們一顆星。
安裝
要安裝 kubectl,你可以根據(jù)你的操作系統(tǒng)選擇一些不同的選項。以下是如何在一些常見平臺上安裝它:
Linux (Ubuntu/Debian)
sudo apt-get update && sudo apt-get install -y kubectl
使用 Homebrew 的 MacOS
brew install kubectl
使用 Chocolatey 的 Windows
choco install kubernetes-cli
安裝后,你可以通過運(yùn)行以下命令來驗(yàn)證 kubectl 是否已正確安裝:
kubectl version --client
kubectl 命令:
kubectl 是一個命令行界面 (CLI) 工具,用于與 Kubernetes API 通信。命令有很多,多到無法記住。
圖片
不過不用擔(dān)心,它不像有些人讓你想象的那么可怕。
我們將探索快速訪問命令參考、特定于 k8s 對象的命令、有用的別名和命令補(bǔ)全的方法。但首先,命令字符串是如何構(gòu)建的?
語法
英語和漢語是主謂賓(SVO) 語言。
印地語和韓語是主賓謂(SOV) 語言。
如果 kubectl 是一種語言,那它將是一種kubectl + 動詞 + 對象/[名稱可選] + 標(biāo)志 (kvof)語言
圖片
也類似于語言,學(xué)習(xí)和吸收語法的最佳方法是在上下文中使用它,而不是死記硬背冗長的動詞和對象列表。
如果你遇到困難,并且想要快速引用任何 Kubernetes 版本中的現(xiàn)有 Kubernetes 對象,請運(yùn)行 kubectl api-resources。
命令是通過選擇要應(yīng)用于所需 Kubernetes 的操作 [動詞]來構(gòu)建的資源 [對象],通常后跟資源的名稱,此外,你還有大量的過濾器 [標(biāo)志],可以應(yīng)用于命令,這些過濾器將確定最終的范圍和輸出。
圖片
讓我們看一個使用常用的get 動詞來檢索 glasskube-system 命名空間中的所有資源的命令構(gòu)建示例,并且輸出采用 yaml 格式:
kubectl get all --namespace glasskube-system -o yaml
如果你遇到一個你以前從未聽說過的 Kubernetes 資源,或者需要復(fù)習(xí),請使用 kubectl explain [resource-name] 來獲取終端描述和使用說明。
命令式工作
在 Kubernetes 環(huán)境中工作時,你的任務(wù)有很多,從部署新應(yīng)用、對故障資源進(jìn)行故障排除、檢查使用情況等等。稍后,我們將探討如何使用聲明式工作方式更適合定義和部署工作負(fù)載,但對于其他所有內(nèi)容,我們準(zhǔn)備好了有用的命令式 Kubernetes 命令。
讓我們開始的簡單命令是:
# Create a new deployment named "nginx-deployment" with the nginx image
kubectl run nginx-deployment --image=nginx
# Delete a pod named "nginx-deployment" in the default namespace
kubectl delete pod nginx-deployment
要將命令式命令提升到下一步,請知道你可以使用TUI編輯器來修改資源:
通過運(yùn)行 kubectl edit -n [namespace] [resource-name],將打開類似于以下內(nèi)容的文本編輯器。編輯并像vim運(yùn)行 ESC + :q! 這樣退出。
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
kind: Pod
metadata:
annotations:
kubectl.kubernetes.io/default-container: manager
creationTimestamp: "2024-04-22T17:07:39Z"
generateName: glasskube-controller-manager-556ff6fccf-
labels:
control-plane: controller-manager
pod-template-hash: 556ff6fccf
name: glasskube-controller-manager-556ff6fccf-4qlxz
namespace: glasskube-system
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: glasskube-controller-manager-556ff6fccf
uid: 430e90e9-32f3-45f6-92dc-4bae26ae1654
"/var/folders/2q/wjmbwg1n5vn8v7vlw17nsz0h0000gn/T/kubectl-edit-1306753911.yaml" 209L, 5898B
大多數(shù)命令都適用于所有類型的 Kubernetes 對象。在進(jìn)一步討論對某些 Kubernetes 資源有用的特定命令之前,了解可以應(yīng)用于許多不同對象的某些有用標(biāo)志是值得的。
有用標(biāo)志:
— env:
--env 標(biāo)志允許您為正在創(chuàng)建的容器指定環(huán)境變量。
kubectl run nginx-deployment --image=nginx --env="ENV_VARIABLE=value"
— template:
此標(biāo)志允許您為 kubectl 命令的輸出格式指定一個 Go 模板。當(dāng)您想要自定義輸出結(jié)構(gòu)、過濾或表示時,它非常方便。
kubectl get pods --template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'
— field-selector:
使用此標(biāo)志,您可以根據(jù)特定字段過濾資源。例如,您可以根據(jù) Pod 的狀態(tài)或標(biāo)簽過濾 Pod。
kubectl get pods --field-selector=status.phase=Running
— field-selector type=[Normal/Warning]:
這是 — field-selector 標(biāo)志的一個特定用法,您可以在其中根據(jù)類型(Normal 或 Warning)過濾事件。
kubectl events -n [resource-namespace] — for=[resource-kind]/[resource-name]此命令獲取與指定命名空間中特定資源相關(guān)的事件。它會持續(xù)監(jiān)視與給定資源相關(guān)的新的事件。
kubectl events -n my-namespace --for=deployment/my-deployment
老派與新派監(jiān)視標(biāo)志:
-o wide 與 -w:
-o wide:這是一個“老派”標(biāo)志,提供寬輸出格式,顯示有關(guān)資源的其他詳細(xì)信息。
-w:這是一個“新派”標(biāo)志,啟用對資源更改的持續(xù)監(jiān)視,類似于 watch 命令。
使用 Pod
Pod 是 Kubernetes 生態(tài)系統(tǒng)中最小的抽象,它們是容納容器的邏輯單元。Pod 消耗資源,可以執(zhí)行并生成日志。以下是一些可幫助您管理 Pod 的命令。
# Show resource usage of a pod
kubectl top pod -n [namespace] [pod-name]
# Run a command inside a new pod in the cluster
kubectl run -it ubuntu --image ubuntu --rm -- bash
# Show resource labels as columns
# e.g. kubectl get pods -n [namespace] -L vault-active -L vault-sealed
kubectl get pods -n [namespace] -L vault-active -L vault-sealed
# Execute a command inside a pod
kubectl exec -it [pod-name] -n [namespace] --
# Port forward to a pod
kubectl port-forward [pod-name] [local-port]:[remote-port] -n [namespace]
# Show container logs
kubectl logs -n [namespace] [pod-name]
kubectl logs -n [namespace] /deployment/[deployment-name] # Use -f flag for continuous streaming
# Run a command inside an existing container
kubectl exec -it -n [namespace] [pod-name] -- [command...]
使用節(jié)點(diǎn)
節(jié)點(diǎn)是提供計算能力和存儲的基礎(chǔ)實(shí)例,Kubernetes 集群在其之上運(yùn)行。
# Show node resource utilization
kubectl top node [node-name] # Node name is optional; without shows table of all nodes
# Get node information
kubectl get node
使用 Deployments, DaemonSets 和 StatefulSets
部署、守護(hù)程序集和有狀態(tài)集是 Kubernetes 中的更高級別的抽象,用于管理應(yīng)用程序工作負(fù)載的部署和擴(kuò)展。
# Restart a workload (e.g. deployment, stateful set, daemon set)
kubectl rollout restart -n [namespace] [workload-kind]/[workload-name] # Triggers a re-creation of all pods for this workload, adhering to the workload configuration
# Check the status of a deployment rollout
kubectl rollout status deployment/[name]
# View rollout history of a deployment
kubectl rollout history deployment/[name] # View rollout history of a deployment
# Scale a deployment to the specified number of replicas
kubectl scale deployment/ --replicas=[number] # Scale a deployment to the specified number of replicas
# Watch events related to a deployment
kubectl events -n glasskube-system --for=deployment/glasskube-controller-manager
#Update Deployment Image
kubectl set image deployment/[deployment-name] [container-name]=new-image:tag
# Delete DaemonSet
kubectl delete daemonset [daemonset-name]
使用 Job
作業(yè)管理 pod 的執(zhí)行以執(zhí)行特定任務(wù),并確保在終止之前成功完成該任務(wù)。
# Run a CronJob manually
kubectl create job [job-name] --image=image/name
# Creates a new job from the job template specified in the cronjob
kubectl create job -n [namespace] --from=cronjob/[cron-job-name] [job-name]
使用 Secret
Secret 用于在 Kubernetes 中安全地存儲敏感信息,如密碼、OAuth 令牌和 SSH 密鑰。
# Create Secret
kubectl create secret generic [secret-name] --from-literal=key1=value1 --from-file=ssh-privatekey=~/.ssh/id_rsa
# Get a value from a secret
kubectl get secrets -n [namespace] [secret-name] --template='{{ .data.[key-name] | base64decode }}'
# Get a value from a secret using jsonpath
kubectl get secrets [secret-name] -o jsnotallow="{.data.key1}" | base64 --decode
JSONPath 是一種查詢語言,用于從 JSON 文檔中提取特定數(shù)據(jù)。在 Kubernetes 中,JSONPath 表達(dá)式通常與 kubectl 命令中的-o jsonpath標(biāo)志一起使用,以從這些命令的輸出中提取特定信息。
Shell 補(bǔ)全
您可能已注意到,kubectl 命令很快就會變得很長。可以將一個非常漂亮的 shell 補(bǔ)全腳本添加到您的 bash 或 zshell 文件中以啟用輕松的標(biāo)簽補(bǔ)全。無需再死記硬背了。要在所有 shell 會話中實(shí)現(xiàn)這一點(diǎn),請將以下內(nèi)容添加到您的 ~/.zshrc 文件中:
source <(kubectl completion zsh)
并重啟shell。如果您使用 bash,請按照此處的說明進(jìn)行操作:
# Install bash-completion package
sudo apt-get install -y bash-completion
# Store the output of the completion command in .bashrc
echo "source <(kubectl completion bash)" >> ~/.bashrc
# Activate the completion rules
source ~/.bashrc
圖片
聲明式工作
Kubernetes 資源的聲明性管理涉及使用 YAML 清單文件指定資源的所需狀態(tài),并將這些清單應(yīng)用到集群。
創(chuàng)建 YAML 文件
無論 Kubernetes 對象是由您自己編寫的還是由其他人編寫的,所有對象均定義在 YAML 文件中。Kubernetes API 就是通過 YAML 文件定義來了解集群狀態(tài)的:
apiVersion: apps/v1
kind: Deployment
metadata:
name: glasskube-deployment
spec:
replicas: 3
selector:
matchLabels:
app: glasskube
env: prod
template:
metadata:
labels:
app: glasskube
env: prod
spec:
containers:
- name: glasskube-container
image: your-glasskube-image:latest
若要從頭開始創(chuàng)建此部署,請使用 kubectl create 命令:
kubectl create -f glasskube-deployment.yaml
應(yīng)用 YAML 文件(客戶端應(yīng)用)
運(yùn)用 YAML 文件是管理 Kubernetes 資源的標(biāo)準(zhǔn)方法。您可以用 YAML 格式定義您資源的所需狀態(tài),并將這些 YAML 文件應(yīng)用于該集群。
kubectl apply -f manifest.yaml
服務(wù)器端應(yīng)用 (SSA)
服務(wù)器端應(yīng)用是將配置更改應(yīng)用到 Kubernetes 資源的一種較新方法。使用 SSA,變更會直接應(yīng)用于服務(wù)器端,這意味著 Kubernetes API 服務(wù)器負(fù)責(zé)確保實(shí)現(xiàn)所需狀態(tài)。
kubectl apply --server-side -f manifest.yaml
插件和工具
每當(dāng)我看到一些來回討論 Kubernetes 的內(nèi)容時,它到底是什么。它最適合哪些用例以及如何最好地思考它,Kelsey Hightower的同一條推文會浮現(xiàn)在我腦海里。
圖片
這一觀點(diǎn)被廣泛認(rèn)可,Kubernetes 插件和工具的大量生態(tài)系統(tǒng)證明了這一點(diǎn),這些插件和工具旨在幫助處理 Kubernetes 生命周期中的各個階段。
Krew Kubernetes 插件管理器
一個強(qiáng)大的插件管理器,用于查找新插件是krew,安裝方法如下。通過 Krew 安裝 kubectl 插件的命令:
kubectl krew install <PLUGIN_NAME>
讓我們探索一些主要的調(diào)試和工具類別,重點(diǎn)介紹一些最實(shí)用的項目。由于有許多值得關(guān)注的地方,因此我將為每個部分添加一個榮譽(yù)部分。
內(nèi)容和命名空間切換
在 Kubernetes 環(huán)境中,您始終在兩個層次結(jié)構(gòu)上下文中操作集群和命名空間。確保準(zhǔn)確的命令執(zhí)行需要指定適當(dāng)?shù)纳舷挛囊垣@得所需的輸出。切換集群上下文或命名空間可能涉及難以記住的長命令,這就是 Kubectl 和 Kubens 等工具的用武之地。
Kubectx 和 Kubens
在此輕松查看可用的集群和命名空間,并在它們之間輕松切換。
請在此處查看安裝說明。
圖片
值得稱贊的:
kubectl-cf:一種在 kubeconfig 文件(而不是上下文)之間切換的更快方法。
可見性
Kubernetes 集群是復(fù)雜的系統(tǒng),包含許多相互依賴的活動部分,以使您的應(yīng)用得以運(yùn)行。始終清晰地了解正在發(fā)生的事情至關(guān)重要。
k9s
K9s是一個方便、輕量級的交互式 Kubernetes 儀表盤,運(yùn)行在終端中。除了可視化你的 k8s 資源外,你還可以輕松的進(jìn)入 pods 中,編輯清單,并且在一處管理你的工作負(fù)載。這或許是我最喜歡的 Kubernetes 管理工具之一。
安裝說明在這里。
圖片
kubectl tree
一個 kubectl 插件,用于通過對象上的 ownersReferences 探索 Kubernetes 對象之間的所有權(quán)關(guān)系。
圖片
安裝:
kubectl krew install tree
kubectl tree --help
kubecolor
KubeColor 用于為 kubectl 輸出添加顏色。
圖片
此處為安裝說明。
包管理
使用常規(guī)包管理工具進(jìn)行集群包管理可能會令人抓狂,并且更新包十分繁瑣。配置很笨拙,直到現(xiàn)在,以聲明方式應(yīng)用所需的軟件包棧仍然超出掌控范圍。
Glasskube:
有了 Glasskube,傳統(tǒng)包管理器(如 helm)中發(fā)現(xiàn)的所有痛點(diǎn)均可迎刃而解,確保您有時間管理工作負(fù)載,不必?fù)?dān)心管理您的 k8s 軟件包堆棧。
網(wǎng)絡(luò)
Kubectl-Cilium:
kubectl-Cilium 是一款與 Cilium 交互的插件,Cilium 是一種基于 eBPF 的云原生解決方案,用于在工作負(fù)載之間提供、保護(hù)和觀察網(wǎng)絡(luò)連接。
圖片
安裝:
kubectl krew install cilium
Cert-manager
Cert-manager 將證書和證書頒發(fā)者添加為 Kubernetes 集群中的資源類型,簡化了獲取、更新和使用這些證書。
圖片
安裝說明請見此處。
特別提及:
Ksniff:這是一個利用 tcpdump 和 Wireshark 在 Kubernetes 集群中的任何 Pod 上啟動遠(yuǎn)程捕獲的 kubectl 插件。
RBAC
Kubelogin
Kubelogin是 Kubernetes OpenID Connect (OIDC) 認(rèn)證的插件,也稱為 kubectl oidc-login。
安裝說明在這里。
Kube-policy-advisor
Kube-policy-advisor更便于從活動 K8s 環(huán)境或包含 Pod 規(guī)范(部署、守護(hù)進(jìn)程集、Pod 等)的單個 .yaml 文件創(chuàng)建 K8s Pod Security Policies (PSP) 或 OPA Policy。
安裝:
kubectl krew install advise-policy
值得稱贊的:
- kubectl-who-can:顯示在 Kubernetes 中 SUBJECTS 對 VERB [TYPE | TYPE/NAME | NONRESOURCEURL] 擁有 RBAC 權(quán)限。
- rakkess:評估訪問 - kubectl 插件,用于展示服務(wù)器資源的訪問矩陣
- kubectl-rolesum:匯總指定主題(ServiceAccount、用戶和組)的 RBAC 角色。
Linting
Kubectl-neat:
Kubectl-neat:Kubectl-neat 去除了 Kubernetes 清單中的混亂內(nèi)容,讓清單更具可讀性。它主要查找兩類內(nèi)容并予以忽略:由 Kubernetes 對象模型插入的默認(rèn)值和常見的變異控制器。
安裝:
kubectl krew install neat
KubeLinter:
KubeLinter分析 Kubernetes YAML 文件和 Helm chart,并將它們與各種最佳實(shí)踐進(jìn)行對比,重點(diǎn)關(guān)注生產(chǎn)準(zhǔn)備和安全性。
安裝說明:https://github.com/stackrox/kube-linter?tab=readme-ov-file#installing-kubelinter。
集群維護(hù)和安全
KubePug
KubePug會下載包含針對特定 Kubernetes 版本的 API 棄用信息的已生成數(shù)據(jù)文件 data.json,掃描正在運(yùn)行的 Kubernetes 集群以確定是否有任何對象會受棄用影響,并向用戶顯示受影響的對象。
示例:
您可以使用以下命令查看正在運(yùn)行的集群的狀態(tài)。
$ kubepug --k8s-versinotallow=v1.22 # Will verify the current context against v1.22 version
[...]
RESULTS:
Deprecated APIs:
PodSecurityPolicy found in policy/v1beta1
├─ Deprecated at: 1.21
├─ PodSecurityPolicy governs the ability to make requests that affect the Security Context that will be applied to a pod and container.Deprecated in 1.21.
-> OBJECT: restrictive namespace: default
Deleted APIs:
APIs REMOVED FROM THE CURRENT VERSION AND SHOULD BE MIGRATED IMMEDIATELY!!
Ingress found in extensions/v1beta1
├─ Deleted at: 1.22
├─ Replacement: networking.k8s.io/v1/Ingress
├─ Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give servicesexternally-reachable urls, load balance traffic, terminate SSL, offer namebased virtual hosting etc.DEPRECATED - This group version of Ingress is deprecated by networking.k8s.io/v1beta1 Ingress. See the release notes for more information.
-> OBJECT: bla namespace: blabla
安裝:
kubectl krew install deprecations
Kubescape:
Kubescape是一個開源 Kubernetes 安全平臺,適用于您的集群、CI/CD 管道和 IDE,可將安全信號從掃描器噪音中分離出來。
圖片
安裝說明此處。
值得一提:
kubectl-watch:另一個觀察工具,可視化查看 Kubernetes 資源的增量更改。
故障排除
Inspektor-Gadget:
Inspektor-gadget是用于調(diào)試和檢查 Kubernetes 資源和應(yīng)用程序的工具(或小工具)集合。
Inspektor Gadget 工具稱為小工具。您可以部署一個、兩個或多個小工具。
圖片
K8s-gpt:
k8sgpt是一個用于掃描您的 Kubernetes 集群、診斷和用簡單的英語對問題進(jìn)行分類的工具。
圖片
安裝說明此處。
值得一提:
kubectl node-shell:直接在正在運(yùn)行的節(jié)點(diǎn)的主機(jī)操作系統(tǒng)中啟動根 shell。
日志記錄
Stern:
Stern允許您跟蹤 Kubernetes 上的多個 Pod 和 Pod 中的多個容器。每個結(jié)果都使用顏色編碼,以便更快速地進(jìn)行調(diào)試。
安裝:
kubectl krew install stern
使用 kubectl 插件的一些安全影響包括可能的漏洞、權(quán)限提升和無意的數(shù)據(jù)泄露。請確保僅使用積極維護(hù)的插件,并且最好在它們周圍有一個活躍的社區(qū)。
別名
有如此多的 kubectl 命令需要記住,通過使用鍵盤快捷鍵或別名來簡化您的生活。
您將在此處找到一個存儲庫,其中包含一個腳本,用于生成數(shù)百個方便的 shell 別名 kubectl。問題是許多別名很長,可能難以回憶。不過不用擔(dān)心,我找到了Benoit Couetil 撰寫的這篇非常實(shí)用的博客文章,介紹如何處理上述腳本生成的眾多別名。
Kubectl 速查表
沒有速查表,任何指南都是不完整的,對吧?
# Basic Commands
# List API Resources
kubectl api-resources
# List Resources
kubectl get [name]
# Explain Resources
kubectl explain
# Working with Pods
# Create a new deployment named "nginx-deployment" with the nginx image
kubectl run nginx-deployment --image=nginx
# Show Resource Usage of a Pod
kubectl top pod -n [namespace] [pod-name]
# Run Command in Pod
kubectl run -it [pod-name] --image [image-name] --rm -- [command]
# Show Resource Labels
kubectl get pods -n [namespace] -L [label1] -L [label2]
# Execute Command in Pod
kubectl exec -it [pod-name] -- [command]
# Port Forwarding
kubectl port-forward [pod-name] [local-port]:[remote-port]
# Filtering Pods by Node Name
kubectl get pods --field-selector spec.nodeName=[node-name]
# Filtering Pods by Phase
kubectl get pods --field-selector status.phase=Running
# Delete a pod named "my-pod" in the default namespace
kubectl delete pod my-pod
# Working with Nodes
# Watch Nodes (Old School)
watch kubectl get nodes -o wide
# Watch Nodes (New School)
kubectl get nodes -w
# Node Resource Utilization
kubectl top node [node-name]
# Get Node Resource
kubectl describe node [node-name]
# Working with Deployments, Daemonsets, and StatefulSets
# Restart Workload
kubectl rollout restart -n [namespace] [kind]/[name]
# Rollout Status
kubectl rollout status [kind]/[name]
# Rollout History
kubectl rollout history [kind]/[name]
# Scale Deployment
kubectl scale deployment/[name] --replicas=[replica-count]
#Update Deployment Image
kubectl set image deployment/[deployment-name] [container-name]=new-image:tag
# Watch events related to a deployment
kubectl events -n glasskube-system --for=deployment/glasskube-controller-manager
# Delete DaemonSet
kubectl delete daemonset [daemonset-name]
# Working with Jobs
# Run CronJob Manually
kubectl create job -n [namespace] --from=cronjob/[cron-job-name] [job-name]
# Working with Secrets
# Get Value from Secret
kubectl get secret -n [namespace] [secret-name] -o=jsnotallow='{.data.[key]}' | base64 --decode
# Create Secret
kubectl create secret generic [secret-name] --from-literal=key1=value1 --from-file=ssh-privatekey=~/.ssh/id_rsa
# Get a value from a secret
kubectl get secrets -n [namespace] [secret-name] --template='{{ .data.[key-name] | base64decode }}'
# Working with Containers
# Show Container Logs
kubectl logs -n [namespace] [pod-name]
kubectl logs -n [namespace] deployment/[deployment-name]
# Run Command in Container
kubectl exec -it -n [namespace] [pod-name] -- [command]
# Working Imperatively
# Modify Resource
kubectl edit -n [namespace] [resource-kind]/[resource-name]
# Delete Resource
kubectl delete [resource-kind]/[resource-name]
# Create Resource
kubectl create -f [resource-file]
# Working Declaratively
# Use Server-Side Apply (SSA)
kubectl apply --server-side -f [resource-file]
# Events and Logs
# Show Events for Resource
kubectl get events -n [namespace] --field-selector involvedObject.kind=[kind] --field-selector involvedObject.name=[name]
# Filtering Events by Type
kubectl get events --field-selector type=Warning
# Filtering Events by Involved Object Name
kubectl get events --field-selector involvedObject.name=[resource-name]
# Show Resource Usage
kubectl top
其他資源
- 精選插件列表:https://github.com/ishantanu/awesome-kubectl-plugins
- 別名列表:https://github.com/ahmetb/kubectl-aliases
- Krew 插件倉庫:https://krew.sigs.k8s.io/plugins/