【容器】Kubernetes 常用命令总结
1. 集群管理命令
1.1 集群信息查看
# 查看集群信息
kubectl cluster-info
# 查看集群详细状态
kubectl get componentstatuses
# 查看集群版本
kubectl version
# 查看集群资源使用情况
kubectl top nodes
kubectl top pods
# 查看集群事件
kubectl get events --all-namespaces --sort-by='.lastTimestamp'
1.2 节点管理
# 查看所有节点
kubectl get nodes
kubectl get nodes -o wide
# 查看节点详细信息
kubectl describe node <node-name>
# 标记节点
kubectl label nodes <node-name> <key>=<value>
# 驱逐节点(维护前)
kubectl drain <node-name> --ignore-daemonsets --delete-local-data
# 恢复节点
kubectl uncordon <node-name>
# 查看节点资源
kubectl describe nodes | grep -A 10 -B 10 "Allocated resources"
2. 命名空间管理
# 查看所有命名空间
kubectl get namespaces
kubectl get ns
# 创建命名空间
kubectl create namespace <namespace-name>
# 切换到指定命名空间
kubectl config set-context --current --namespace=<namespace-name>
# 查看当前命名空间
kubectl config view --minify | grep namespace
# 删除命名空间
kubectl delete namespace <namespace-name>
# 查看指定命名空间的资源
kubectl get all -n <namespace-name>
3. Pod 管理命令
3.1 基本 Pod 操作
# 查看所有 Pod
kubectl get pods --all-namespaces
kubectl get pods -A
# 查看指定命名空间的 Pod
kubectl get pods -n <namespace>
# 查看 Pod 详细信息
kubectl describe pod <pod-name> -n <namespace>
# 查看 Pod 日志
kubectl logs <pod-name> -n <namespace>
# 实时查看日志
kubectl logs -f <pod-name> -n <namespace>
# 查看前一个容器的日志(用于崩溃的 Pod)
kubectl logs -p <pod-name> -n <namespace>
# 进入 Pod 容器
kubectl exec -it <pod-name> -n <namespace> -- /bin/bash
# 在 Pod 中执行命令
kubectl exec <pod-name> -n <namespace> -- <command>
# 删除 Pod
kubectl delete pod <pod-name> -n <namespace>
# 强制删除 Pod
kubectl delete pod <pod-name> -n <namespace> --grace-period=0 --force
3.2 Pod 调试和诊断
# 查看 Pod 事件
kubectl describe pod <pod-name> | grep -A 10 -B 10 Events
# 查看 Pod 资源限制
kubectl describe pod <pod-name> | grep -A 5 -B 5 "Limits\|Requests"
# 端口转发到本地
kubectl port-forward <pod-name> <local-port>:<pod-port> -n <namespace>
# 复制文件到 Pod
kubectl cp <local-file> <namespace>/<pod-name>:<path-in-pod>
# 从 Pod 复制文件到本地
kubectl cp <namespace>/<pod-name>:<path-in-pod> <local-file>
4. Deployment 管理命令
4.1 Deployment 基本操作
# 查看所有 Deployment
kubectl get deployments --all-namespaces
# 创建 Deployment
kubectl create deployment <deployment-name> --image=<image> -n <namespace>
# 应用 YAML 文件创建/更新 Deployment
kubectl apply -f deployment.yaml
# 查看 Deployment 状态
kubectl get deployment <deployment-name> -n <namespace>
# 查看 Deployment 详细信息
kubectl describe deployment <deployment-name> -n <namespace>
# 扩容 Deployment
kubectl scale deployment <deployment-name> --replicas=3 -n <namespace>
# 自动扩容
kubectl autoscale deployment <deployment-name> --min=2 --max=10 --cpu-percent=80
# 更新 Deployment 镜像
kubectl set image deployment/<deployment-name> <container-name>=<new-image> -n <namespace>
# 回滚 Deployment
kubectl rollout undo deployment/<deployment-name> -n <namespace>
# 查看 Deployment 回滚历史
kubectl rollout history deployment/<deployment-name> -n <namespace>
# 回滚到特定版本
kubectl rollout undo deployment/<deployment-name> --to-revision=2 -n <namespace>
# 查看滚动更新状态
kubectl rollout status deployment/<deployment-name> -n <namespace>
# 暂停/恢复 Deployment 更新
kubectl rollout pause deployment/<deployment-name> -n <namespace>
kubectl rollout resume deployment/<deployment-name> -n <namespace>
5. Service 管理命令
# 查看所有 Service
kubectl get services --all-namespaces
kubectl get svc -A
# 创建 Service
kubectl expose deployment <deployment-name> --port=80 --target-port=8080 -n <namespace>
# 查看 Service 详细信息
kubectl describe service <service-name> -n <namespace>
# 查看 Service 的 Endpoints
kubectl get endpoints <service-name> -n <namespace>
# 删除 Service
kubectl delete service <service-name> -n <namespace>
6. Ingress 管理命令
# 查看所有 Ingress
kubectl get ingress --all-namespaces
# 查看 Ingress 详细信息
kubectl describe ingress <ingress-name> -n <namespace>
# 查看 Ingress 类
kubectl get ingressclasses
7. ConfigMap 和 Secret 管理
7.1 ConfigMap 操作
# 查看 ConfigMap
kubectl get configmaps -n <namespace>
# 从文件创建 ConfigMap
kubectl create configmap <config-name> --from-file=<file-path> -n <namespace>
# 从字面量创建 ConfigMap
kubectl create configmap <config-name> --from-literal=key=value -n <namespace>
# 查看 ConfigMap 内容
kubectl get configmap <config-name> -o yaml -n <namespace>
# 编辑 ConfigMap
kubectl edit configmap <config-name> -n <namespace>
7.2 Secret 操作
# 查看 Secret
kubectl get secrets -n <namespace>
# 创建 Secret
kubectl create secret generic <secret-name> --from-literal=username=admin --from-literal=password=secret -n <namespace>
# 从文件创建 Secret
kubectl create secret generic <secret-name> --from-file=./username.txt --from-file=./password.txt -n <namespace>
# 查看 Secret 内容(Base64 解码)
kubectl get secret <secret-name> -o json -n <namespace> | jq '.data | map_values(@base64d)'
# 编码字符串为 Base64(用于创建 Secret)
echo -n "password" | base64
8. 存储管理命令
8.1 PersistentVolume 和 PersistentVolumeClaim
# 查看 PV
kubectl get pv
# 查看 PVC
kubectl get pvc -n <namespace>
# 查看存储类
kubectl get storageclass
kubectl get sc
9. 资源管理和限制
# 查看资源配额
kubectl get resourcequotas -n <namespace>
# 查看限制范围
kubectl get limitranges -n <namespace>
# 设置资源限制
kubectl set resources deployment/<deployment-name> -c=<container-name> --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi
10. 故障排查和调试命令
10.1 高级诊断
# 查看 Pod 详细状态(包括节点分配信息)
kubectl get pods -o wide -n <namespace>
# 查看 Pod 事件序列
kubectl get events --field-selector involvedObject.name=<pod-name> -n <namespace>
# 检查 API 资源
kubectl api-resources
# 检查 API 版本
kubectl api-versions
# 查看 kubeconfig
kubectl config view
# 查看当前上下文
kubectl config current-context
# 切换上下文
kubectl config use-context <context-name>
10.2 网络诊断
# 临时启动一个调试 Pod
kubectl run debug-pod --image=busybox --rm -it --restart=Never -- nslookup <service-name>
# 测试网络连通性
kubectl run network-test --image=appropriate/curl --rm -it --restart=Never -- curl http://<service>.<namespace>.svc.cluster.local
# 查看网络策略
kubectl get networkpolicies -n <namespace>
11. 批量操作和脚本命令
# 批量删除失败的 Pod
kubectl delete pods --field-selector=status.phase=Failed -n <namespace>
# 删除所有 Evicted 状态的 Pod
kubectl get pods -n <namespace> | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n <namespace>
# 重启 Deployment(通过修改注解实现)
kubectl patch deployment <deployment-name> -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\":\"$(date +'%s')\"}}}}}" -n <namespace>
# 批量获取所有 Pod 的镜像
kubectl get pods -n <namespace> -o jsonpath="{.items[*].spec.containers[*].image}"
# 导出资源配置为 YAML
kubectl get deployment <deployment-name> -o yaml -n <namespace> > deployment.yaml
# 导出所有资源配置
kubectl get all -o yaml -n <namespace> > all-resources.yaml
12. 实用别名和快捷方式
# 添加到 ~/.bashrc 或 ~/.zshrc
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgs='kubectl get services'
alias kgd='kubectl get deployments'
alias kgn='kubectl get nodes'
alias kaf='kubectl apply -f'
alias kdf='kubectl delete -f'
alias kd='kubectl describe'
alias ke='kubectl edit'
alias kl='kubectl logs'
alias kx='kubectl exec -it'
# 命名空间快捷方式
alias kgpa='kubectl get pods --all-namespaces'
alias kgsa='kubectl get services --all-namespaces'
# 设置默认命名空间
kubectl config set-context --current --namespace=default
13. 常用 YAML 模板生成命令
# 生成 Pod YAML 模板
kubectl run nginx --image=nginx --dry-run=client -o yaml > pod.yaml
# 生成 Deployment YAML 模板
kubectl create deployment nginx --image=nginx --dry-run=client -o yaml > deployment.yaml
# 生成 Service YAML 模板
kubectl create service clusterip nginx --tcp=80:80 --dry-run=client -o yaml > service.yaml
# 生成 ConfigMap YAML 模板
kubectl create configmap my-config --from-literal=key=value --dry-run=client -o yaml > configmap.yaml
14. 监控和日志相关命令
# 查看 Pod 资源使用情况
kubectl top pod <pod-name> -n <namespace>
# 查看节点资源使用情况
kubectl top node
# 查看多个 Pod 的日志
kubectl logs -f -l app=my-app -n <namespace>
# 查看指定时间段的日志
kubectl logs <pod-name> --since=1h -n <namespace>
kubectl logs <pod-name> --since-time="2023-01-01T00:00:00Z" -n <namespace>
# 查看日志并包含时间戳
kubectl logs <pod-name> --timestamps -n <namespace>
15. 安全相关命令
# 查看 ServiceAccount
kubectl get serviceaccounts -n <namespace>
# 查看 Role 和 RoleBinding
kubectl get roles,rolebindings -n <namespace>
# 查看 ClusterRole 和 ClusterRoleBinding
kubectl get clusterroles,clusterrolebindings
# 检查 Pod 的安全上下文
kubectl get pod <pod-name> -o jsonpath='{.spec.securityContext}' -n <namespace>
实用技巧和最佳实践
- 使用标签选择器:
kubectl get pods -l app=nginx
kubectl delete pods -l app=nginx
- JSONPath 查询:
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.capacity.cpu}{"\n"}{end}'
- 自定义列输出:
kubectl get pods -o custom-columns="NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName"
- watch 实时监控:
kubectl get pods -w
kubectl get deployments -w
这个总结涵盖了 Kubernetes 日常使用中的大部分命令,从基础操作到高级调试都有涉及。建议根据实际工作需求重点掌握相关部分的命令。
本文来自博客园,作者:NeoLshu,转载请注明原文链接:https://www.cnblogs.com/neolshu/p/19513689

浙公网安备 33010602011771号