前言:作為運維工程師,掌握 Kubernetes 命令行工具是日常工作的核心技能。本文將深入解析 K8S 最實用的命令,從基礎操作到高級技巧,助你成為容器化集群管理專家。
快速導航
?基礎集群信息查看
?Pod 生命周期管理
?服務與網(wǎng)絡管理
?存儲與配置管理
?故障排查神技
?性能監(jiān)控與優(yōu)化
?高級運維技巧
基礎集群信息查看
集群狀態(tài)總覽
# 查看集群信息 kubectl cluster-info # 查看節(jié)點狀態(tài) kubectl get nodes -o wide # 查看節(jié)點詳細信息 kubectl describe node# 查看集群資源使用情況 kubectl top nodes kubectl top pods --all-namespaces
命名空間管理
# 查看所有命名空間 kubectl get namespaces # 創(chuàng)建命名空間 kubectl create namespace# 刪除命名空間(謹慎操作) kubectl delete namespace # 設置默認命名空間 kubectl config set-context --current --namespace=
實戰(zhàn)技巧:使用kubectl config view --minify | grep namespace快速查看當前命名空間。
Pod 生命周期管理
Pod 基礎操作
# 查看所有 Pod kubectl get pods --all-namespaces # 查看指定命名空間的 Pod kubectl get pods -n# 實時監(jiān)控 Pod 狀態(tài)變化 kubectl get pods -w # 查看 Pod 詳細信息 kubectl describe pod -n # 刪除 Pod kubectl delete pod -n # 強制刪除卡住的 Pod kubectl delete pod --grace-period=0 --force
Pod 高級查詢
# 按標簽選擇器查詢 kubectl get pods -l app=nginx # 按字段選擇器查詢 kubectl get pods --field-selector status.phase=Running # 查看 Pod 的 YAML 配置 kubectl get pod-o yaml # 查看 Pod 資源使用情況 kubectl top pod # 查看所有容器狀態(tài) kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.status.phase}{" "}{end}'
運維秘籍:使用kubectl get pods --sort-by=.metadata.creationTimestamp按創(chuàng)建時間排序,快速定位新部署的應用。
服務與網(wǎng)絡管理
Service 服務管理
# 查看所有服務 kubectl get services --all-namespaces # 查看服務詳細信息 kubectl describe service# 查看服務端點 kubectl get endpoints # 臨時端口轉(zhuǎn)發(fā)(調(diào)試神器) kubectl port-forward pod/ 8080:80 kubectl port-forward service/ 8080:80 # 查看服務的選擇器匹配的 Pod kubectl get pods -l
Ingress 管理
# 查看 Ingress 規(guī)則 kubectl get ingress --all-namespaces # 查看 Ingress 詳細配置 kubectl describe ingress# 查看 Ingress 控制器日志 kubectl logs -n ingress-nginx deployment/nginx-ingress-controller
網(wǎng)絡策略與排查
# 查看網(wǎng)絡策略 kubectl get networkpolicies --all-namespaces # 測試 Pod 間網(wǎng)絡連通性 kubectlexec-it-- ping kubectlexec-it -- nslookup # 查看 DNS 配置 kubectlexec-it --cat/etc/resolv.conf
存儲與配置管理
ConfigMap 和 Secret
# 查看配置映射 kubectl get configmaps --all-namespaces # 查看 ConfigMap 內(nèi)容 kubectl describe configmapkubectl get configmap -o yaml # 創(chuàng)建 ConfigMap kubectl create configmap --from-file= kubectl create configmap --from-literal=key=value # 查看密鑰 kubectl get secrets --all-namespaces # 查看 Secret 內(nèi)容(Base64 解碼) kubectl get secret -o jsonpath='{.data.password}'|base64-d
持久化存儲
# 查看持久卷 kubectl get pv # 查看持久卷聲明 kubectl get pvc --all-namespaces # 查看存儲類 kubectl get storageclass # 查看卷詳細信息 kubectl describe pvkubectl describe pvc
性能優(yōu)化:使用kubectl get pvc -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,VOLUME:.spec.volumeName,CAPACITY:.status.capacity.storage,STORAGECLASS:.spec.storageClassName快速查看存儲概況。
故障排查神技
日志查看與分析
# 查看 Pod 日志 kubectl logs-n # 查看多容器 Pod 的特定容器日志 kubectl logs -c # 實時跟蹤日志 kubectl logs -f # 查看之前崩潰容器的日志 kubectl logs --previous # 查看最近指定時間的日志 kubectl logs --since=1h kubectl logs --since-time=2024-01-01T0000Z # 導出所有 Pod 日志 forpodin$(kubectl get pods -o name);do kubectl logs$pod>${pod##*/}.log2>&1 done
容器調(diào)試
# 進入容器 Shell kubectlexec-it-- /bin/bash kubectlexec-it -- /bin/sh # 在多容器 Pod 中指定容器 kubectlexec-it -c -- /bin/bash # 復制文件到/從容器 kubectlcp : kubectlcp : # 臨時運行調(diào)試容器 kubectl run debug-pod --rm-it --image=busybox -- /bin/sh # 在現(xiàn)有網(wǎng)絡命名空間中運行調(diào)試容器 kubectl debug -it --image=nicolaka/netshoot
事件與狀態(tài)分析
# 查看集群事件 kubectl get events --sort-by='.lastTimestamp' # 查看特定資源的事件 kubectl describe# 監(jiān)控資源變化 kubectl get pods -w kubectl get events -w # 查看資源使用情況 kubectl describe node | grep -A 5"Allocated resources"
故障定位心法:
1. 先看 Pod 狀態(tài):kubectl get pods
2. 再看事件:kubectl describe pod
3. 查看日志:kubectl logs
4. 最后進容器調(diào)試:kubectl exec -it
性能監(jiān)控與優(yōu)化
資源監(jiān)控
# 查看節(jié)點資源使用 kubectl top nodes # 查看 Pod 資源使用 kubectl top pods --all-namespaces # 查看特定命名空間資源使用 kubectl top pods -n# 按 CPU 使用率排序 kubectl top pods --sort-by=cpu # 按內(nèi)存使用率排序 kubectl top pods --sort-by=memory
擴縮容管理
# 手動擴縮容 Deployment kubectl scale deployment--replicas=5 # 查看 HPA(水平自動擴縮容) kubectl get hpa # 查看 VPA(垂直自動擴縮容) kubectl get vpa # 查看 Deployment 滾動更新狀態(tài) kubectl rollout status deployment/ # 查看滾動更新歷史 kubectl rollouthistorydeployment/ # 回滾到上一個版本 kubectl rollout undo deployment/
資源配額管理
# 查看資源配額 kubectl get resourcequota --all-namespaces # 查看 LimitRange kubectl get limitrange --all-namespaces # 查看資源配額詳情 kubectl describe resourcequota
高級運維技巧
批量操作與自動化
# 批量刪除狀態(tài)為 Evicted 的 Pod
kubectl get pods --all-namespaces | grep Evicted | awk'{print $1, $2}'| xargs -n2 kubectl delete pod -n
# 批量重啟所有 Deployment
kubectl get deployments -o name | xargs -I {} kubectl rollout restart {}
# 批量獲取所有 Pod 的鏡像信息
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.name}{" "}{.spec.containers[*].image}{"
"}{end}'
# 查找沒有設置資源限制的 Pod
kubectl get pods --all-namespaces -o json | jq'.items[] | select(.spec.containers[].resources.limits == null) | .metadata.name'
安全與權限管理
# 查看當前用戶權限 kubectl auth can-i --list # 檢查特定用戶權限 kubectl auth can-i create pods --as=# 查看 RBAC 角色 kubectl get roles,rolebindings --all-namespaces kubectl get clusterroles,clusterrolebindings # 查看服務賬戶 kubectl get serviceaccounts --all-namespaces # 查看安全策略 kubectl get podsecuritypolicies
集群維護與備份
# 驅(qū)逐節(jié)點(維護前) kubectl drain--ignore-daemonsets --delete-emptydir-data # 標記節(jié)點不可調(diào)度 kubectl cordon # 恢復節(jié)點調(diào)度 kubectl uncordon # 導出資源配置(備份) kubectl get all --all-namespaces -o yaml > cluster-backup.yaml # 導出特定資源類型 kubectl get configmaps --all-namespaces -o yaml > configmaps-backup.yaml kubectl get secrets --all-namespaces -o yaml > secrets-backup.yaml
性能調(diào)優(yōu)命令
# 查看集群組件狀態(tài) kubectl get componentstatuses # 查看 API Server 指標 kubectl get --raw /metrics # 查看調(diào)度器隊列 kubectl get events --field-selector reason=FailedScheduling # 分析 Pod 啟動時間 kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,START_TIME:.status.startTime,NODE:.spec.nodeName
實用技巧錦囊
命令行優(yōu)化
# 設置別名提高效率 aliask='kubectl' aliaskgp='kubectl get pods' aliaskgs='kubectl get services' aliaskgn='kubectl get nodes' aliaskdp='kubectl describe pod' aliaskl='kubectl logs' # 使用 kubectx 快速切換集群 kubectx# 使用 kubens 快速切換命名空間 kubens
輸出格式化
# JSON 輸出
kubectl get pods -o json
# YAML 輸出
kubectl get pods -o yaml
# 自定義列輸出
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName
# 使用 JSONPath 提取特定字段
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
# 格式化輸出(需要 jq)
kubectl get pods -o json | jq'.items[] | {name: .metadata.name, status: .status.phase}'
總結與最佳實踐
日常運維檢查清單
1.集群健康檢查
? 節(jié)點狀態(tài):kubectl get nodes
? 系統(tǒng) Pod:kubectl get pods -n kube-system
? 資源使用:kubectl top nodes
2.應用狀態(tài)監(jiān)控
? Pod 狀態(tài):kubectl get pods --all-namespaces
? 服務狀態(tài):kubectl get services --all-namespaces
? 事件監(jiān)控:kubectl get events --sort-by='.lastTimestamp'
3.性能優(yōu)化檢查
? 資源配額:kubectl describe node
? HPA 狀態(tài):kubectl get hpa
? 存儲使用:kubectl get pvc --all-namespaces
安全運維準則
? 定期備份關鍵配置:ConfigMap、Secret、PV
? 設置合理的資源限制和配額
? 監(jiān)控異常事件和失敗的調(diào)度
? 及時清理不需要的資源和鏡像
? 保持集群組件版本更新
寫在最后
掌握這些 K8S 命令,你已經(jīng)具備了高效管理容器化集群的核心技能。記住,熟練運用這些命令不僅能提高工作效率,更能在關鍵時刻快速定位和解決問題。
-
集群
+關注
關注
0文章
143瀏覽量
17666 -
命令
+關注
關注
5文章
755瀏覽量
23757 -
kubernetes
+關注
關注
0文章
263瀏覽量
9494
原文標題:30分鐘掌握K8S核心命令:快速上手指南
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
什么是 K8S,如何使用 K8S
OpenStack與K8s結合的兩種方案的詳細介紹和比較
Docker不香嗎為什么還要用K8s
簡單說明k8s和Docker之間的關系
K8S集群服務訪問失敗怎么辦 K8S故障處理集錦
切換k8s上下文有多快
k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres
什么是K3s和K8s?K3s和K8s有什么區(qū)別?
k8s生態(tài)鏈包含哪些技術
解析K8S實用命令
評論