伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

Kubernetes kubectl命令行工具詳解

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2026-02-02 16:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

kubectl命令實戰寶典:Kubernetes集群管理與故障排查200+命令

一、概述

1.1 背景介紹

kubectl是Kubernetes官方提供的命令行工具,作為與Kubernetes集群交互的主要接口,它通過調用Kubernetes API Server實現對集群資源的全面管理。在生產環境中,運維工程師需要熟練掌握kubectl命令來完成日常的集群運維、應用部署、故障排查和性能優化等工作。

隨著容器化和云原生技術的普及,Kubernetes已成為容器編排的事實標準。然而,Kubernetes的復雜性也給運維人員帶來了挑戰。kubectl命令體系龐大,涵蓋資源管理、網絡配置、存儲編排、權限控制等多個維度,掌握這些命令對于高效運維至關重要。

本文檔系統整理了200+個kubectl實戰命令,涵蓋從基礎操作到高級技巧的完整知識體系,旨在幫助運維工程師快速定位問題、提升工作效率,并建立完善的Kubernetes運維能力。

1.2 技術特點

聲明式管理:支持通過YAML/JSON配置文件進行資源的聲明式管理,實現基礎設施即代碼(IaC

多集群支持:通過context機制實現多集群、多環境的統一管理,支持快速切換操作目標

豐富的輸出格式:提供JSON、YAML、wide、custom-columns等多種輸出格式,便于數據提取和自動化處理

強大的過濾能力:支持label selector、field selector、JSONPath等多種過濾方式,精確定位目標資源

實時監控能力:通過watch機制實時監控資源狀態變化,支持日志流式輸出和事件追蹤

插件擴展機制:支持通過插件(kubectl plugins)擴展功能,與生態工具無縫集成

1.3 適用場景

日常運維管理:集群節點管理、資源配額設置、命名空間隔離、RBAC權限配置等常規運維操作

應用生命周期管理:應用部署、滾動更新、版本回滾、彈性伸縮、灰度發布等應用管理場景

故障診斷排查:Pod異常排查、網絡連通性測試、日志分析、事件追蹤、資源瓶頸定位等故障處理

性能優化調優:資源使用率分析、性能指標采集、容器資源限制調整、HPA/VPA配置優化

安全審計合規:Secret管理、網絡策略配置、Pod安全策略、審計日志查詢、漏洞掃描集成

自動化運維:CI/CD流水線集成、批量操作腳本、資源自動化巡檢、備份恢復自動化

1.4 環境要求

組件 版本要求 說明
Kubernetes集群 v1.20+ (推薦v1.24+) 本文檔命令基于v1.24+版本,部分新特性需要更高版本支持
kubectl客戶端 與集群版本差異不超過1個minor版本 建議kubectl版本與集群版本保持一致,避免API兼容性問題
操作系統 Linux/macOS/Windows 跨平臺支持,Linux環境下功能最完整
網絡連接 可訪問API Server(默認6443端口 需要配置kubeconfig文件,確保網絡連通性
權限要求 根據操作需求配置相應RBAC權限 建議生產環境使用最小權限原則,避免使用cluster-admin
依賴工具 jq、yq、grep、awk等(可選) 用于高級數據處理和自動化腳本編寫

二、詳細步驟

2.1 準備工作

2.1.1 kubectl安裝與版本檢查

# 檢查kubectl版本(客戶端和服務端)
kubectl version --short

# 查看詳細版本信息
kubectl version --output=yaml

# 檢查kubectl配置是否正確
kubectl cluster-info

# 查看API Server地址和健康狀態
kubectl cluster-info dump | grep -i"cluster-info"

說明:kubectl版本應與Kubernetes集群版本保持兼容,版本差異不應超過一個minor版本。例如,kubectl 1.24可以與1.23、1.24、1.25版本的集群通信

2.1.2 kubeconfig配置管理

# 查看當前kubeconfig文件路徑
echo$KUBECONFIG

# 查看kubeconfig配置內容
kubectl config view

# 查看原始配置(包含敏感信息)
kubectl config view --raw

# 查看當前使用的context
kubectl config current-context

# 列出所有可用的context
kubectl config get-contexts

# 列出所有集群配置
kubectl config get-clusters

說明:kubeconfig文件默認位于~/.kube/config,包含集群連接信息、認證憑據和上下文配置。生產環境建議對該文件設置嚴格的權限控制(chmod 600)。

2.2 核心配置

2.2.1 多集群Context管理

# 切換到指定context
kubectl config use-context production-cluster

# 創建新的context
kubectl configset-context dev-context 
 --cluster=dev-cluster 
 --user=dev-admin 
 --namespace=development

# 修改context的默認命名空間
kubectl configset-context --current --namespace=kube-system

# 刪除指定context
kubectl config delete-context old-context

# 重命名context
kubectl config rename-context old-name new-name

說明:Context是集群、用戶和命名空間的組合,通過切換context可以快速在不同環境間切換。建議為不同環境(開發、測試、生產)配置獨立的context,避免誤操作。

2.2.2 集群憑據配置

# 設置集群信息
kubectl configset-cluster prod-cluster 
 --server=https://k8s-api.example.com:6443 
 --certificate-authority=/path/to/ca.crt 
 --embed-certs=true

# 設置用戶憑據(證書認證)
kubectl configset-credentials admin-user 
 --client-certificate=/path/to/admin.crt 
 --client-key=/path/to/admin.key 
 --embed-certs=true

# 設置用戶憑據(Token認證)
kubectl configset-credentials token-user 
 --token=eyJhbGciOiJSUzI1NiIsImtpZCI6...

# 取消TLS驗證(僅用于測試環境)
kubectl configset-clustertest-cluster 
 --server=https://test-api:6443 
 --insecure-skip-tls-verify=true

說明:生產環境必須使用TLS加密通信,并驗證證書有效性。Token認證適用于ServiceAccount場景,證書認證適用于管理員用戶。--embed-certs=true會將證書內容嵌入kubeconfig文件,便于文件傳輸。

2.2.3 kubectl命令行補全配置

# Bash環境配置自動補全
echo'source <(kubectl completion bash)'?>> ~/.bashrc
echo'alias k=kubectl'>> ~/.bashrc
echo'complete -F __start_kubectl k'>> ~/.bashrc
source~/.bashrc

# Zsh環境配置自動補全
echo'source <(kubectl completion zsh)'?>> ~/.zshrc
echo'alias k=kubectl'>> ~/.zshrc
echo'compdef __start_kubectl k'>> ~/.zshrc
source~/.zshrc

# 驗證補全功能
kubectl get po # 應自動補全為 pods

說明:命令行補全可以大幅提升工作效率,減少輸入錯誤。配置別名k可以簡化日常操作,在生產環境中已成為事實標準。

2.3 啟動和驗證

2.3.1 集群連接驗證

# 驗證集群連接狀態
kubectl cluster-info

# 查看集群組件狀態
kubectl get componentstatuses
kubectl get cs # 簡寫形式

# 檢查API Server健康狀態
kubectl get --raw /healthz
kubectl get --raw /livez
kubectl get --raw /readyz

# 查看API資源列表
kubectl api-resources

# 查看API版本
kubectl api-versions

2.3.2 權限驗證

# 檢查當前用戶權限
kubectl auth can-i create deployments
kubectl auth can-i delete pods --namespace=production
kubectl auth can-i'*''*'# 檢查是否有集群管理員權限

# 模擬其他用戶權限檢查
kubectl auth can-i list secrets --as=systemdefault:myapp

# 查看當前用戶可訪問的資源
kubectl auth can-i --list

# 查看指定命名空間的權限
kubectl auth can-i --list --namespace=kube-system

說明:權限驗證是運維操作前的必要步驟,可以避免因權限不足導致的操作失敗。生產環境應遵循最小權限原則,定期審計用戶權限配置。

三、示例代碼和配置

3.1 集群管理命令(50+)

3.1.1 節點管理命令

# 查看所有節點
kubectl get nodes
kubectl get nodes -o wide # 顯示更多信息(IP、OS、內核版本等)

# 查看節點詳細信息
kubectl describe node node-name

# 查看節點資源使用情況
kubectl top nodes
kubectl top nodes --sort-by=cpu
kubectl top nodes --sort-by=memory

# 標記節點為不可調度(維護模式)
kubectl cordon node-name

# 恢復節點為可調度狀態
kubectl uncordon node-name

# 驅逐節點上的所有Pod(優雅驅逐)
kubectl drain node-name --ignore-daemonsets --delete-emptydir-data

# 強制驅逐(跳過PDB限制)
kubectl drain node-name --ignore-daemonsets --force --grace-period=0

# 給節點打標簽
kubectl label nodes node-name env=production
kubectl label nodes node-name disktype=ssd

# 刪除節點標簽
kubectl label nodes node-name env-

# 修改節點標簽
kubectl label nodes node-name env=staging --overwrite

# 查看帶特定標簽的節點
kubectl get nodes -l env=production
kubectl get nodes -l disktype=ssd,env=production

# 給節點添加污點(Taint)
kubectl taint nodes node-name key=value:NoSchedule
kubectl taint nodes node-name dedicated=gpu:NoExecute

# 刪除節點污點
kubectl taint nodes node-name key:NoSchedule-

# 查看節點污點信息
kubectl describe node node-name | grep -i taint

說明:節點管理是集群運維的基礎操作。cordon用于臨時禁止調度,drain用于節點維護前的Pod遷移。污點(Taint)和容忍(Toleration)機制用于控制Pod調度到特定節點。

3.1.2 命名空間管理命令

# 查看所有命名空間
kubectl get namespaces
kubectl get ns # 簡寫形式

# 創建命名空間
kubectl create namespace development
kubectl create ns staging

# 查看命名空間詳細信息
kubectl describe namespace production

# 刪除命名空間(會刪除該命名空間下所有資源)
kubectl delete namespace old-project

# 給命名空間打標簽
kubectl label namespace production env=prod
kubectl label namespace production team=backend

# 查看命名空間標簽
kubectl get namespace --show-labels

# 設置默認命名空間(當前context)
kubectl configset-context --current --namespace=production

# 查看命名空間資源配額
kubectl get resourcequota -n production
kubectl describe resourcequota -n production

# 查看命名空間限制范圍
kubectl get limitrange -n production
kubectl describe limitrange -n production

說明:命名空間是Kubernetes中的邏輯隔離單元,用于多租戶環境的資源隔離。刪除命名空間會級聯刪除其下所有資源,操作需謹慎。

3.1.3 資源配額管理命令

# 創建資源配額
kubectl create quota dev-quota 
 --hard=cpu=10,memory=20Gi,pods=20 
 -n development

# 查看所有資源配額
kubectl get resourcequota --all-namespaces
kubectl get quota -A # 簡寫形式

# 查看資源配額詳情
kubectl describe quota dev-quota -n development

# 通過YAML文件創建資源配額
cat <

說明:ResourceQuota用于限制命名空間的資源使用量,防止資源過度消耗。生產環境建議為每個命名空間配置合理的資源配額。

3.1.4 RBAC權限管理命令

# 查看所有角色(Role)
kubectl get roles -A
kubectl get role -n kube-system

# 查看集群角色(ClusterRole)
kubectl get clusterroles
kubectl get clusterrole admin -o yaml

# 查看角色綁定(RoleBinding)
kubectl get rolebindings -A
kubectl get rolebinding -n production

# 查看集群角色綁定(ClusterRoleBinding)
kubectl get clusterrolebindings

# 創建角色
kubectl create role pod-reader 
 --verb=get,list,watch 
 --resource=pods 
 -n development

# 創建集群角色
kubectl create clusterrole deployment-manager 
 --verb=get,list,create,delete 
 --resource=deployments

# 創建角色綁定
kubectl create rolebinding dev-pod-reader 
 --role=pod-reader 
 --user=john 
 -n development

# 創建集群角色綁定
kubectl create clusterrolebinding cluster-admin-binding 
 --clusterrole=cluster-admin 
 --user=admin@example.com

# 將角色綁定到ServiceAccount
kubectl create rolebinding app-reader 
 --role=pod-reader 
 --serviceaccount=default:myapp 
 -n production

# 查看角色詳細權限
kubectl describe role pod-reader -n development
kubectl describe clusterrole admin

說明:RBAC是Kubernetes的核心安全機制,通過Role/ClusterRole定義權限,通過RoleBinding/ClusterRoleBinding將權限授予用戶或ServiceAccount。生產環境應避免直接使用cluster-admin角色。

3.1.5 ServiceAccount管理命令

# 查看所有ServiceAccount
kubectl get serviceaccounts -A
kubectl get sa -n default # 簡寫形式

# 創建ServiceAccount
kubectl create serviceaccount myapp -n production

# 查看ServiceAccount詳情
kubectl describe sa myapp -n production

# 獲取ServiceAccount的Token
kubectl create token myapp -n production
kubectl create token myapp --duration=8760h -n production # 指定有效期

# 查看ServiceAccount關聯的Secret
kubectl get sa myapp -n production -o jsonpath='{.secrets[0].name}'

# 刪除ServiceAccount
kubectl delete sa myapp -n production

說明:ServiceAccount是Pod訪問API Server的身份憑證。Kubernetes 1.24+版本不再自動創建長期有效的Token Secret,需要使用kubectl create token命令動態生成。

3.2 工作負載管理命令(50+)

3.2.1 Pod管理命令

# 查看所有Pod
kubectl get pods -A
kubectl get po -n production # 簡寫形式

# 查看Pod詳細信息
kubectl get pods -o wide
kubectl describe pod nginx-pod -n production

# 創建Pod(命令行方式)
kubectl run nginx --image=nginx:1.21 --port=80

# 創建Pod并設置資源限制
kubectl run nginx --image=nginx:1.21 
 --requests='cpu=100m,memory=256Mi'
 --limits='cpu=200m,memory=512Mi'

# 創建臨時調試Pod
kubectl run debug-pod --image=busybox --rm -it -- sh

# 查看Pod日志
kubectl logs nginx-pod -n production
kubectl logs nginx-pod -n production --tail=100
kubectl logs nginx-pod -n production --since=1h
kubectl logs nginx-pod -n production -f # 實時查看

# 查看多容器Pod的特定容器日志
kubectl logs nginx-pod -c sidecar-container -n production

# 查看Pod的前一個實例日志(Pod重啟后)
kubectl logs nginx-pod --previous -n production

# 進入Pod執行命令
kubectlexec-it nginx-pod -n production -- bash
kubectlexecnginx-pod -n production -- ls /var/log

# 多容器Pod指定容器執行命令
kubectlexec-it nginx-pod -c nginx-container -n production -- sh

# 復制文件到Pod
kubectl cp /local/file.txt production/nginx-pod:/tmp/file.txt

# 從Pod復制文件
kubectl cp production/nginx-pod:/var/log/nginx/access.log ./access.log

# 查看Pod資源使用情況
kubectl top pod -n production
kubectl top pod --sort-by=cpu -A
kubectl top pod --sort-by=memory -n production

# 刪除Pod
kubectl delete pod nginx-pod -n production

# 強制刪除Pod
kubectl delete pod nginx-pod -n production --force --grace-period=0

# 根據標簽刪除Pod
kubectl delete pods -l app=nginx -n production

說明:Pod是Kubernetes中最小的調度單元。kubectl logs和kubectl exec是日常運維中最常用的命令。強制刪除Pod可能導致數據丟失,僅在必要時使用。

3.2.2 Deployment管理命令

# 查看所有Deployment
kubectl get deployments -A
kubectl get deploy -n production # 簡寫形式

# 創建Deployment
kubectl create deployment nginx --image=nginx:1.21 --replicas=3

# 查看Deployment詳情
kubectl describe deployment nginx -n production

# 擴縮容Deployment
kubectl scale deployment nginx --replicas=5 -n production

# 自動擴縮容(HPA)
kubectl autoscale deployment nginx --min=3 --max=10 --cpu-percent=80

# 更新鏡像(滾動更新)
kubectlsetimage deployment/nginx nginx=nginx:1.22 -n production

# 查看滾動更新狀態
kubectl rollout status deployment/nginx -n production

# 查看滾動更新歷史
kubectl rollouthistorydeployment/nginx -n production

# 回滾到上一個版本
kubectl rollout undo deployment/nginx -n production

# 回滾到指定版本
kubectl rollout undo deployment/nginx --to-revision=2 -n production

# 暫停滾動更新
kubectl rollout pause deployment/nginx -n production

# 恢復滾動更新
kubectl rollout resume deployment/nginx -n production

# 重啟Deployment(重建所有Pod)
kubectl rollout restart deployment/nginx -n production

說明:Deployment是最常用的工作負載控制器,支持滾動更新和版本回滾。rollout命令是管理應用發布的核心工具,生產環境建議保留足夠的歷史版本用于快速回滾。

3.2.3 StatefulSet和DaemonSet管理命令

# 查看StatefulSet
kubectl get statefulsets -A
kubectl get sts -n production # 簡寫形式

# 創建StatefulSet(需要YAML文件)
kubectl apply -f mysql-statefulset.yaml

# 擴縮容StatefulSet
kubectl scale statefulset mysql --replicas=5 -n production

# 查看StatefulSet滾動更新狀態
kubectl rollout status statefulset/mysql -n production

# 刪除StatefulSet但保留Pod
kubectl delete statefulset mysql --cascade=orphan -n production

# 查看DaemonSet
kubectl get daemonsets -A
kubectl get ds -n kube-system # 簡寫形式

# 查看DaemonSet詳情
kubectl describe daemonset fluentd -n kube-system

# 更新DaemonSet鏡像
kubectlsetimage daemonset/fluentd fluentd=fluentd:v1.15 -n kube-system

# 查看DaemonSet滾動更新狀態
kubectl rollout status daemonset/fluentd -n kube-system

說明:StatefulSet用于有狀態應用(如數據庫),提供穩定的網絡標識和持久化存儲。DaemonSet確保每個節點運行一個Pod副本,常用于日志收集、監控代理等場景。

3.2.4 Job和CronJob管理命令

# 創建一次性Job
kubectl create job backup --image=backup-tool:latest

# 查看Job
kubectl getjobs-A
kubectl describe job backup -n production

# 查看Job的Pod
kubectl get pods --selector=job-name=backup -n production

# 刪除Job及其Pod
kubectl delete job backup -n production

# 創建CronJob
kubectl create cronjob daily-backup 
 --image=backup-tool:latest 
 --schedule="0 2 * * *"

# 查看CronJob
kubectl get cronjobs -A
kubectl get cj -n production # 簡寫形式

# 手動觸發CronJob
kubectl create job manual-backup --from=cronjob/daily-backup -n production

# 暫停CronJob
kubectl patch cronjob daily-backup -p'{"spec":{"suspend":true}}'-n production

# 恢復CronJob
kubectl patch cronjob daily-backup -p'{"spec":{"suspend":false}}'-n production

說明:Job用于一次性任務,CronJob用于定時任務。CronJob的schedule格式遵循標準Cron表達式。生產環境建議設置合理的successfulJobsHistoryLimit和failedJobsHistoryLimit。

3.3 網絡和服務管理命令(40+)

3.3.1 Service管理命令

# 查看所有Service
kubectl get services -A
kubectl get svc -n production # 簡寫形式

# 創建ClusterIP類型Service
kubectl create service clusterip nginx --tcp=80:80

# 創建NodePort類型Service
kubectl create service nodeport nginx --tcp=80:80 --node-port=30080

# 創建LoadBalancer類型Service
kubectl create service loadbalancer nginx --tcp=80:80

# 通過Deployment暴露Service
kubectl expose deployment nginx --port=80 --target-port=8080 --type=ClusterIP

# 查看Service詳情
kubectl describe service nginx -n production

# 查看Service的Endpoints
kubectl get endpoints nginx -n production
kubectl get ep nginx -n production # 簡寫形式

# 編輯Service
kubectl edit service nginx -n production

# 刪除Service
kubectl delete service nginx -n production

說明:Service是Kubernetes中的服務發現和負載均衡機制。ClusterIP用于集群內部訪問,NodePort用于外部訪問,LoadBalancer用于云環境的負載均衡器集成。

3.3.2 Ingress管理命令

# 查看所有Ingress
kubectl get ingress -A
kubectl get ing -n production # 簡寫形式

# 查看Ingress詳情
kubectl describe ingress web-ingress -n production

# 創建Ingress(需要YAML文件)
kubectl apply -f ingress.yaml

# 查看Ingress Controller
kubectl get pods -n ingress-nginx
kubectl logs -f deployment/ingress-nginx-controller -n ingress-nginx

# 編輯Ingress
kubectl edit ingress web-ingress -n production

# 刪除Ingress
kubectl delete ingress web-ingress -n production

說明:Ingress提供HTTP/HTTPS路由功能,是集群外部訪問服務的標準方式。需要先部署Ingress Controller(如Nginx Ingress、Traefik等)才能使用Ingress資源。

3.3.3 NetworkPolicy和DNS命令

# 查看網絡策略
kubectl get networkpolicies -A
kubectl get netpol -n production # 簡寫形式

# 查看網絡策略詳情
kubectl describe networkpolicy deny-all -n production

# 創建網絡策略(需要YAML文件)
kubectl apply -f network-policy.yaml

# 刪除網絡策略
kubectl delete networkpolicy deny-all -n production

# 查看CoreDNS配置
kubectl get configmap coredns -n kube-system -o yaml

# 查看CoreDNS Pod
kubectl get pods -n kube-system -l k8s-app=kube-dns

# 測試DNS解析
kubectl run dnsutils --image=tutum/dnsutils --rm -it -- nslookup kubernetes.default

# 查看Service的DNS記錄
kubectl run dnsutils --image=tutum/dnsutils --rm -it -- nslookup nginx.production.svc.cluster.local

說明:NetworkPolicy用于實現Pod級別的網絡隔離,需要CNI插件支持(如Calico、Cilium)。DNS是服務發現的基礎,Service的完整域名格式為..svc.cluster.local。

3.4 存儲管理命令(30+)

3.4.1 PersistentVolume和PVC命令

# 查看PersistentVolume
kubectl get persistentvolumes
kubectl get pv # 簡寫形式

# 查看PV詳情
kubectl describe pv pv-name

# 查看PersistentVolumeClaim
kubectl get persistentvolumeclaims -A
kubectl get pvc -n production # 簡寫形式

# 查看PVC詳情
kubectl describe pvc data-pvc -n production

# 創建PVC(需要YAML文件)
kubectl apply -f pvc.yaml

# 刪除PVC
kubectl delete pvc data-pvc -n production

# 查看PVC使用情況
kubectl get pvc -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,VOLUME:.spec.volumeName,CAPACITY:.status.capacity.storage,STORAGECLASS:.spec.storageClassName -n production

說明:PV是集群級別的存儲資源,PVC是命名空間級別的存儲請求。PVC與PV通過StorageClass動態綁定,或通過標簽選擇器靜態綁定。

3.4.2 StorageClass命令

# 查看StorageClass
kubectl get storageclasses
kubectl get sc # 簡寫形式

# 查看StorageClass詳情
kubectl describe storageclass standard

# 設置默認StorageClass
kubectl patch storageclass standard -p'{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

# 取消默認StorageClass
kubectl patch storageclass standard -p'{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

說明:StorageClass定義了動態存儲供應的參數,包括存儲提供者、回收策略、卷綁定模式等。集群可以有多個StorageClass,但只能有一個默認StorageClass。

3.4.3 ConfigMap和Secret管理命令

# 查看ConfigMap
kubectl get configmaps -A
kubectl get cm -n production # 簡寫形式

# 創建ConfigMap(從文字)
kubectl create configmap app-config 
 --from-literal=database.host=mysql.prod 
 --from-literal=database.port=3306

# 創建ConfigMap(從文件)
kubectl create configmap nginx-config --from-file=nginx.conf

# 創建ConfigMap(從目錄)
kubectl create configmap app-configs --from-file=./configs/

# 查看ConfigMap內容
kubectl get configmap app-config -o yaml
kubectl describe configmap app-config -n production

# 編輯ConfigMap
kubectl edit configmap app-config -n production

# 刪除ConfigMap
kubectl delete configmap app-config -n production

# 查看Secret
kubectl get secrets -A
kubectl get secret -n production

# 創建Generic類型Secret
kubectl create secret generic db-secret 
 --from-literal=username=admin 
 --from-literal=password=P@ssw0rd

# 創建TLS類型Secret
kubectl create secret tls tls-secret 
 --cert=path/to/tls.crt 
 --key=path/to/tls.key

# 創建Docker Registry類型Secret
kubectl create secret docker-registry regcred 
 --docker-server=registry.example.com 
 --docker-username=user 
 --docker-password=password 
 --docker-email=user@example.com

# 查看Secret內容(Base64編碼)
kubectl get secret db-secret -o yaml

# 解碼Secret內容
kubectl get secret db-secret -o jsonpath='{.data.password}'| base64 -d

# 刪除Secret
kubectl delete secret db-secret -n production

說明:ConfigMap用于存儲非敏感配置數據,Secret用于存儲敏感信息(密碼、Token、證書等)。Secret數據以Base64編碼存儲,但并非加密,生產環境建議使用外部密鑰管理系統(如Vault、Sealed Secrets)。

3.5 高級命令和技巧(30+)

3.5.1 資源查詢和過濾命令

# 使用Label Selector查詢
kubectl get pods -l app=nginx
kubectl get pods -l'env in (prod,staging)'
kubectl get pods -l app=nginx,tier=frontend

# 使用Field Selector查詢
kubectl get pods --field-selector status.phase=Running
kubectl get pods --field-selector metadata.namespace=production
kubectl get events --field-selector involvedObject.kind=Pod

# 查看所有命名空間的資源
kubectl get pods --all-namespaces
kubectl get pods -A # 簡寫形式

# 按時間排序
kubectl get pods --sort-by=.metadata.creationTimestamp
kubectl get pods --sort-by=.status.startTime

# 自定義列輸出
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName,IP:.status.podIP

# 查看資源的特定字段
kubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="InternalIP")].address}'

# 查看Pod的容器鏡像
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"	"}{.spec.containers[*].image}{"
"}{end}'

說明:Label Selector和Field Selector是資源過濾的核心機制。JSONPath提供了強大的數據提取能力,適用于自動化腳本和數據分析場景。

3.5.2 資源管理和調試命令

# 查看資源定義(Dry Run)
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml

# 應用資源配置
kubectl apply -f deployment.yaml
kubectl apply -f ./manifests/ # 應用目錄下所有YAML文件

# 聲明式管理(記錄變更歷史)
kubectl apply -f deployment.yaml --record

# 查看資源變更差異
kubectl diff -f deployment.yaml

# 替換資源(強制更新)
kubectl replace -f deployment.yaml --force

# 修補資源(Patch)
kubectl patch deployment nginx -p'{"spec":{"replicas":5}}'
kubectl patch deployment nginx --type='json'-p='[{"op":"replace","path":"/spec/replicas","value":5}]'

# 實時監控資源變化
kubectl get pods -w
kubectl get events -w

# 查看資源使用的API版本
kubectl explain pod
kubectl explain deployment.spec.strategy

說明:apply是聲明式管理的推薦方式,支持增量更新。patch用于局部修改資源,支持strategic、merge、json三種策略。--dry-run=client可以預覽資源定義而不實際創建。

3.5.3 事件和調試命令

# 查看集群事件
kubectl get events -A
kubectl get events --sort-by=.metadata.creationTimestamp

# 查看特定資源的事件
kubectl get events --field-selector involvedObject.name=nginx-pod

# 查看最近的事件
kubectl get events --sort-by='.lastTimestamp'| tail -20

# 使用kubectl debug調試Pod(需要Kubernetes 1.23+)
kubectl debug nginx-pod -it --image=busybox --target=nginx-container

# 創建調試副本Pod
kubectl debug nginx-pod -it --copy-to=nginx-debug --container=debugger --image=busybox

說明:Events是故障排查的重要信息源,記錄了資源的狀態變化和異常情況。kubectl debug是Kubernetes 1.23+引入的新特性,提供了更便捷的Pod調試能力。

四、最佳實踐和注意事項

4.1 最佳實踐

4.1.1 性能優化

使用資源限制和請求:為所有Pod設置合理的resources.requests和resources.limits,避免資源爭搶

# 查看未設置資源限制的Pod
kubectl get pods -A -o json | jq'.items[] | select(.spec.containers[].resources.limits == null) | .metadata.name'

啟用HPA自動擴縮容:根據CPU/內存使用率自動調整副本數

kubectl autoscale deployment nginx --min=3 --max=10 --cpu-percent=70

使用親和性和反親和性:優化Pod調度分布,提高可用性

Pod反親和性:確保同一應用的Pod分散在不同節點

節點親和性:將Pod調度到特定類型的節點(如SSD節點)

優化鏡像拉取策略:使用imagePullPolicy: IfNotPresent減少鏡像拉取時間

# 查看Pod的鏡像拉取策略
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"	"}{.spec.containers[*].imagePullPolicy}{"
"}{end}'

4.1.2 安全加固

最小權限原則:避免使用cluster-admin角色,為每個應用創建專用ServiceAccount

# 檢查使用cluster-admin的綁定
kubectl get clusterrolebindings -o json | jq'.items[] | select(.roleRef.name=="cluster-admin") | .metadata.name'

啟用Pod安全策略:限制特權容器、主機網絡、主機路徑掛載等高危操作

# 查看以特權模式運行的Pod
kubectl get pods -A -o json | jq'.items[] | select(.spec.containers[].securityContext.privileged==true) | .metadata.name'

使用NetworkPolicy隔離網絡:實現命名空間級別的網絡隔離

# 檢查是否配置了網絡策略
kubectl get networkpolicies -A

定期輪換Secret和證書:避免使用長期有效的憑證

# 查看Secret的創建時間
kubectl get secrets -A -o json | jq'.items[] | {name: .metadata.name, age: .metadata.creationTimestamp}'

4.1.3 高可用配置

配置PodDisruptionBudget:保證滾動更新和節點維護時的最小可用副本數

# 創建PDB
kubectl create pdb nginx-pdb --selector=app=nginx --min-available=2

# 查看PDB狀態
kubectl get pdb -A

使用多副本部署:生產環境至少3個副本,跨多個可用區部署

配置健康檢查:設置livenessProbe和readinessProbe確保服務可用性

# 查看未配置健康檢查的Pod
kubectl get pods -A -o json | jq'.items[] | select(.spec.containers[].livenessProbe == null) | .metadata.name'

4.2 注意事項

4.2.1 配置注意事項

警告:以下操作可能導致服務中斷或數據丟失,操作前務必做好備份和驗證。

刪除命名空間前確認:刪除命名空間會級聯刪除所有資源,無法恢復

# 刪除前先查看命名空間下的所有資源
kubectl get all -n namespace-name

謹慎使用強制刪除:--force --grace-period=0可能導致數據不一致

# 僅在Pod長時間處于Terminating狀態時使用
kubectl delete pod stuck-pod --force --grace-period=0

生產環境禁用--insecure-skip-tls-verify:會導致中間人攻擊風險

注意資源配額限制:超出配額會導致Pod無法創建

# 檢查命名空間配額使用情況
kubectl describe quota -n production

4.2.2 常見錯誤

錯誤現象 原因分析 解決方案
ImagePullBackOff 鏡像不存在或無權限拉取 檢查鏡像名稱、標簽和imagePullSecrets配置
CrashLoopBackOff 容器啟動后立即退出 查看日志排查應用錯誤,檢查啟動命令和健康檢查配置
Pending狀態 資源不足或調度失敗 檢查節點資源、污點容忍、親和性配置
OOMKilled 內存超限被殺死 增加內存限制或優化應用內存使用
Evicted 節點資源壓力導致驅逐 檢查節點磁盤和內存使用,調整資源配置

五、故障排查和監控

5.1 故障排查

5.1.1 日志查看

# 查看Pod日志(最近100行)
kubectl logs nginx-pod --tail=100 -n production

# 查看最近1小時的日志
kubectl logs nginx-pod --since=1h -n production

# 實時查看日志
kubectl logs -f nginx-pod -n production

# 查看所有容器日志(多容器Pod)
kubectl logs nginx-pod --all-containers=true-n production

# 查看崩潰前的日志
kubectl logs nginx-pod --previous -n production

# 導出日志到文件
kubectl logs nginx-pod -n production > pod.log

5.1.2 常見問題排查

問題一:Pod一直處于Pending狀態

# 查看Pod詳情和事件
kubectl describe pod nginx-pod -n production

# 檢查節點資源
kubectl top nodes

# 查看調度失敗原因
kubectl get events --field-selector involvedObject.name=nginx-pod -n production

解決方案

檢查節點是否有足夠資源(CPU、內存)

檢查Pod的nodeSelector、親和性、污點容忍配置

確認PVC是否成功綁定

問題二:Service無法訪問

# 檢查Service配置
kubectl describe service nginx-svc -n production

# 檢查Endpoints是否正常
kubectl get endpoints nginx-svc -n production

# 測試Service連通性
kubectl runtest-pod --image=busybox --rm -it -- wget -O- http://nginx-svc.production.svc.cluster.local

解決方案

確認Service的selector與Pod標簽匹配

檢查Pod是否處于Ready狀態

驗證網絡策略是否阻止了流量

問題三:PVC無法綁定

癥狀:PVC一直處于Pending狀態

排查:檢查StorageClass是否存在,PV容量是否滿足要求

解決:創建匹配的PV或調整PVC的存儲請求大小

5.2 性能監控

5.2.1 關鍵指標監控

# 查看節點資源使用
kubectl top nodes

# 查看Pod資源使用
kubectl top pods -A --sort-by=cpu
kubectl top pods -A --sort-by=memory

# 查看容器資源使用
kubectl top pod nginx-pod --containers -n production

# 查看集群資源分配情況
kubectl describe nodes | grep -A 5"Allocated resources"

5.2.2 監控指標說明

指標名稱 正常范圍 告警閾值 說明
CPU使用率 <70% >85% 持續高CPU可能導致性能下降
內存使用 <80% >90% 接近限制可能觸發OOM
Pod重啟次數 0 >5次/小時 頻繁重啟表明應用不穩定
磁盤使用率 <80% >85% 磁盤滿會導致Pod驅逐

六、總結

6.1 技術要點回顧

kubectl基礎配置:掌握kubeconfig管理、context切換、命令行補全等基礎技能

資源管理命令:熟練使用200+命令管理集群、工作負載、網絡、存儲等各類資源

故障排查技巧:掌握日志查看、事件分析、調試工具等故障診斷方法

最佳實踐:遵循安全加固、性能優化、高可用配置等生產環境最佳實踐

6.2 進階學習方向

Kubernetes高級特性:深入學習Operator、CRD、Admission Webhook等擴展機制

學習資源:Kubernetes官方文檔、《Kubernetes Operators》

實踐建議:嘗試開發自定義Operator,實現業務自動化

云原生生態工具:掌握Helm、Kustomize、ArgoCD等配置管理和GitOps工具

學習資源:CNCF項目文檔、云原生社區

實踐建議:構建完整的CI/CD流水線,實現自動化部署

可觀測性體系:建立Prometheus+Grafana+Loki+Jaeger完整監控體系

學習資源:Prometheus官方文檔、Grafana教程

實踐建議:搭建生產級監控告警系統

6.3 參考資料

Kubernetes官方文檔- 最權威的Kubernetes學習資源

kubectl命令參考- kubectl完整命令手冊

Kubernetes GitHub倉庫- 源碼和Issue追蹤

CNCF云原生社區- 云原生技術生態和最佳實踐

Kubernetes中文社區- 中文學習資源和技術交流

附錄

A. 命令速查表

# 資源簡寫對照
po  # pods
svc # services
deploy# deployments
rs  # replicasets
ds  # daemonsets
sts # statefulsets
cm  # configmaps
ns  # namespaces
pv  # persistentvolumes
pvc # persistentvolumeclaims
sa  # serviceaccounts
ing # ingresses
netpol# networkpolicies

# 常用命令組合
kubectl get pods -A -o wide --sort-by=.metadata.creationTimestamp # 查看所有Pod并按創建時間排序
kubectl get events --sort-by='.lastTimestamp'-A # 查看所有事件按時間排序
kubectl top pods -A --sort-by=cpu # 查看Pod CPU使用率排序
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"	"}{.status.phase}{"
"}{end}'# 自定義輸出格式

B. 配置參數詳解

資源限制參數

requests.cpu: CPU請求量,調度時保證的最小CPU資源(如100m表示0.1核)

requests.memory: 內存請求量,調度時保證的最小內存資源(如256Mi)

limits.cpu: CPU限制量,容器可使用的最大CPU資源

limits.memory: 內存限制量,超出會觸發OOM Kill

健康檢查參數

initialDelaySeconds: 容器啟動后首次探測延遲時間

periodSeconds: 探測間隔時間

timeoutSeconds: 探測超時時間

successThreshold: 連續成功次數閾值

failureThreshold: 連續失敗次數閾值

C. 術語表

術語 英文 解釋
命名空間 Namespace Kubernetes中的邏輯隔離單元,用于多租戶環境
工作負載 Workload 在Kubernetes上運行的應用程序,包括Deployment、StatefulSet等
服務發現 Service Discovery 通過Service資源實現的Pod間通信機制
持久化卷 Persistent Volume 集群級別的存儲資源,獨立于Pod生命周期
標簽選擇器 Label Selector 通過標簽篩選資源的機制
污點容忍 Taint/Toleration 控制Pod調度到特定節點的機制
親和性 Affinity Pod或節點間的調度偏好規則
滾動更新 Rolling Update 逐步替換Pod實現零停機更新
水平擴縮容 HPA 根據指標自動調整Pod副本數
準入控制 Admission Control API請求的驗證和變更機制

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 集群
    +關注

    關注

    0

    文章

    149

    瀏覽量

    17684
  • 命令
    +關注

    關注

    5

    文章

    758

    瀏覽量

    23894
  • kubernetes
    +關注

    關注

    0

    文章

    273

    瀏覽量

    9523

原文標題:kubectl命令實戰寶典:Kubernetes集群管理與故障排查200+命令

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    在STM32實現命令行

    工作中的開發環境都是基于linux命令行交互,作為命令行的重度使用者,玩單片機也要使用命令行工具,百度了一些命令行
    發表于 12-09 11:32 ?3682次閱讀

    Linux命令行工具

    Linux 新手往往對命令行心存畏懼。部分原因是因為需要記憶大量的命令,畢竟掌握命令是高效使用命令行的前提不幸的是,學習這些命令并無捷徑,
    發表于 07-25 08:10

    caxa命令行中的應用

    caxa命令行中的應用 命令行對于大多用戶來說往往只是輸入數據的作用,但是其中的奧妙還有很多,下面就給大家
    發表于 10-18 18:18 ?2660次閱讀

    CMD的命令行高級教程

    CMD的命令行高級教程
    發表于 10-24 08:31 ?30次下載
    CMD的<b class='flag-5'>命令行</b>高級教程

    監控jvm常用的5個命令行工具

    常用的幾個命令行工具有jps、jstat、jinfo、jmap、jstack等。這幾個工具可以安裝openjdk-devel-debug包。
    的頭像 發表于 02-06 14:47 ?6572次閱讀
    監控jvm常用的5個<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>

    Xilinx軟件命令行工具:XSCT開發和調試

    了解如何使用XSCT,Xilinx軟件命令行工具進行開發和調試。 該視頻演示了XSCT如何充當Xilinx SDK的命令行控制臺。
    的頭像 發表于 11-21 06:02 ?1.6w次閱讀

    Xilinx軟件命令行工具進行開發和調試

    了解如何使用XSCT,Xilinx軟件命令行工具進行開發和調試。 該視頻演示了XSCT如何充當Xilinx SDK的命令行控制臺。
    的頭像 發表于 11-22 06:53 ?7810次閱讀

    Git常見的誤區和命令行工具等綜述

    Git常見的誤區和命令行工具等綜述
    發表于 08-31 09:51 ?0次下載

    命令行工具Kubectl的別樣用法

    ? kubectl 是 K8s 官方附帶的命令行工具,可以方便的操作 K8s 集群。這篇文章主要介紹一些 kubectl 的別樣用法,希望讀者有一定基礎的 K8s 使用經驗。 ? 有一
    的頭像 發表于 10-12 09:31 ?2696次閱讀

    Golang基于flag庫實現一個命令行工具

    Golang 標準庫中的 flag 庫提供了解析命令行選項的能力,我們可以基于此來開發命令行工具
    的頭像 發表于 10-28 09:26 ?2263次閱讀

    新的開源命令行工具west

    電子發燒友網站提供《新的開源命令行工具west.zip》資料免費下載
    發表于 11-11 09:25 ?0次下載
    新的開源<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>west

    介紹Go里面經常使用到的命令行工具

    優秀的工具配合熟練的使用,往往可以讓開發效率大幅度提升,本小節介紹 Go 里面經常使用到的命令行工具
    的頭像 發表于 05-22 16:58 ?2276次閱讀
    介紹Go里面經常使用到的<b class='flag-5'>命令行</b><b class='flag-5'>工具</b>

    PetaLinux工具文檔:命令行參考指南

    電子發燒友網站提供《PetaLinux工具文檔:命令行參考指南.pdf》資料免費下載
    發表于 09-15 14:52 ?0次下載
    PetaLinux<b class='flag-5'>工具</b>文檔:<b class='flag-5'>命令行</b>參考指南

    HarmonyOS開發:【基于命令行(安裝庫和工具集)】

    使用命令行進行設備開發時,可以通過以下步驟安裝編譯OpenHarmony需要的庫和工具
    的頭像 發表于 04-25 21:03 ?1328次閱讀
    HarmonyOS開發:【基于<b class='flag-5'>命令行</b>(安裝庫和<b class='flag-5'>工具</b>集)】

    詳解kubectl常用命令

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