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

切換k8s上下文有多快

k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres
什么是K3s和K8s?K3s和K8s有什么區(qū)別?
k8s生態(tài)鏈包含哪些技術(shù)

k8s云原生開發(fā)要求

評(píng)論