Kubernetes 常用命令
最完整、最实用、按场景分类的 Kubernetes 常用命令大全
覆盖:Pod、Deployment、Service、Events、调度、网络、日志、节点、卷、集群、排障、常用脚本化技巧等。
适用 Kubernetes ≥ 1.33(向下兼容 1.20+)
查看集群版本
kubectl version --short
查看当前上下文
kubectl config current-context
查看 contexts
kubectl config get-contexts
切换 context
kubectl config use-context my-context
查看所有命名空间
kubectl get ns
创建 namespace
kubectl create ns dev
删除 namespace
kubectl delete ns dev
查看 Pod
kubectl get pods
kubectl get pods -A
kubectl get pods -o wide
查看带 label 的 Pod
kubectl get pods -l app=myapp
查看 Pod 详情
kubectl describe pod pod-name
查看 Pod YAML
kubectl get pod pod-name -o yaml
强制删除 Pod(强制跳过 graceful)
kubectl delete pod pod-name --force --grace-period=0
进入 Pod 容器
kubectl exec -it pod-name -- sh
kubectl exec -it pod-name -c container -- bash
查看 Pod 内文件
kubectl exec pod-name -- ls /etc
Pod 日志
kubectl logs pod-name
kubectl logs -f pod-name
kubectl logs pod-name -c container
查看上一个崩溃日志
kubectl logs pod-name --previous
查看 Deployment
kubectl get deploy
kubectl describe deploy myapp
更新镜像
kubectl set image deploy/myapp myapp=nginx:1.21
滚动更新状态
kubectl rollout status deploy/myapp
回滚
kubectl rollout undo deploy/myapp
指定版本回滚
kubectl rollout undo deploy/myapp --to-revision=3
暂停/继续更新
kubectl rollout pause deploy/myapp
kubectl rollout resume deploy/myapp
查看历史记录
kubectl rollout history deploy/myapp
查看 Service
kubectl get svc
kubectl describe svc myapp
查看 Endpoints
kubectl get endpoints
查看 Ingress
kubectl get ingress
kubectl describe ingress myapp
查看节点
kubectl get nodes -o wide
查看节点标签
kubectl get nodes --show-labels
给节点打标签
kubectl label node node1 env=prod
删除节点标签
kubectl label node node1 env-
给 node 打 taint
kubectl taint nodes node1 key=value:NoSchedule
删除 taint
kubectl taint nodes node1 key-
添加/更新 label
kubectl label pod mypod version=v1 --overwrite
删除 label
kubectl label pod mypod version-
添加 annotation
kubectl annotate pod mypod description="hello"
查看 Pod 调度情况
kubectl get events --sort-by='.metadata.creationTimestamp'
查看 Pod 在哪个节点
kubectl get pod -o wide
查看 Scheduler 日志(取决于你的集群)
journalctl -u kube-scheduler -f
查看
kubectl get configmap
kubectl get secret
查看 details
kubectl describe configmap myconfig
以 YAML 输出
kubectl get secret mysecret -o yaml
创建一个临时 Pod 调试
kubectl run debug --rm -it --image=busybox -- sh
Debug 进入容器 namespace(K8s 1.18+)
kubectl debug pod-name -it --image=busybox
应用 YAML
kubectl apply -f app.yaml
删除 YAML
kubectl delete -f app.yaml
先 dry-run 检查
kubectl apply -f app.yaml --dry-run=client
查看 Pod 事件
kubectl get events -A --sort-by='.metadata.creationTimestamp'
排查 Pod 失败
kubectl describe pod pod-name
kubectl logs pod-name --previous
查看资源占用
kubectl top pod -A
kubectl top node
自定义列
kubectl get pods -o custom-columns=NAME:.metadata.name,IP:.status.podIP
使用 jsonpath
kubectl get pod mypod -o jsonpath='{.status.podIP}'
推荐添加到 ~/.bashrc:
alias k=kubectl
alias kgp='kubectl get pods'
alias kgs='kubectl get svc'
alias kga='kubectl get all'
alias kdp='kubectl describe pod'
kubectl describe pod myapp-xxx
kubectl logs myapp-xxx
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl rollout restart deploy/myapp
source <(kubectl completion bash)
查找 app=myapp 的 Pod
kubectl get pods -l app=myapp
查找 env=prod 的节点
kubectl get nodes -l env=prod
kubectl port-forward pod/myapp 8080:80
kubectl port-forward svc/myapp 8080:80
Pod -> Deployment -> ReplicaSet
kubectl get pod myapp-xxxx -o jsonpath='{.metadata.ownerReferences}'
删除 Completed 的 Job
kubectl delete job --field-selector status.successful=1
清理不正常的 pod
kubectl delete pod -A --field-selector=status.phase=Failed
查看所有资源类型
kubectl api-resources
查看某资源的 API 版本
kubectl explain deployment