跳到主要内容

获取更多AI技术与应用的第一手资讯,包括大语言模型、AI框架、算法等热门内容。 我们会定期推送高质量的AI知识、工具使用指南和行业动态。

微信公众号二维码

🚀 Kubernetes 常用命令完全指南

一个全面的 kubectl 命令参考手册,包含实际使用示例和最佳实践

📋 目录


🚀 快速开始

基础检查命令

# 检查集群连接和基本信息
kubectl cluster-info # 显示集群主节点和服务的地址信息
kubectl version # 显示客户端和服务器版本信息
kubectl get nodes # 列出集群中的所有节点

# 查看当前上下文和命名空间
kubectl config current-context # 显示当前使用的上下文
kubectl config get-contexts # 列出所有可用的上下文

常用输出格式

# 不同输出格式
kubectl get pods -o wide # 显示详细信息,包括IP地址和所在节点
kubectl get pods -o yaml # 以YAML格式输出
kubectl get pods -o json # 以JSON格式输出
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase # 自定义列显示

🏗️ 集群管理

节点管理

# 查看节点状态
kubectl get nodes # 列出所有节点及其状态
kubectl get nodes -o wide # 显示节点的详细信息,包括IP和角色

# 节点详细信息
kubectl describe node <node-name> # 显示指定节点的详细信息
kubectl describe node worker-1 # 查看worker-1节点的详细信息

# 节点资源使用情况(需要 metrics-server)
kubectl top nodes # 显示所有节点的资源使用情况
kubectl top nodes --sort-by=cpu # 按CPU使用率排序显示节点
kubectl top nodes --sort-by=memory # 按内存使用率排序显示节点

# 节点标签管理
kubectl label nodes <node-name> disktype=ssd # 给节点添加标签
kubectl get nodes --show-labels # 显示所有节点及其标签

集群信息

# 集群基本信息
kubectl cluster-info # 显示集群主节点和服务地址
kubectl cluster-info dump # 导出集群状态信息到文件

# 查看API资源
kubectl api-resources # 列出所有可用的API资源类型
kubectl api-versions # 显示服务器支持的API版本

🐳 Pod 管理

基础操作

# 查看Pod
kubectl get pods # 列出当前命名空间的所有Pod
kubectl get pods -A # 列出所有命名空间的Pod
kubectl get pods -n kube-system # 列出指定命名空间的Pod
kubectl get pods -o wide # 显示Pod的详细信息,包括IP和节点

# 查看Pod状态
kubectl get pods --field-selector=status.phase=Running # 只显示运行中的Pod
kubectl get pods --field-selector=status.phase=Pending # 只显示等待中的Pod

Pod 详细信息

# 查看Pod详细信息
kubectl describe pod <pod-name> # 显示指定Pod的详细信息
kubectl describe pod nginx-deployment-7d4f6b8c9d-abc123 # 查看具体Pod的详细信息

# 查看Pod日志
kubectl logs <pod-name> # 查看Pod的日志
kubectl logs <pod-name> -c <container-name> # 查看多容器Pod中指定容器的日志
kubectl logs <pod-name> --previous # 查看上一个容器实例的日志
kubectl logs <pod-name> -f # 实时跟踪日志输出
kubectl logs <pod-name> --tail=100 # 只显示最后100行日志

Pod 交互

# 进入Pod
kubectl exec -it <pod-name> -- bash # 进入Pod的bash shell
kubectl exec -it <pod-name> -c <container-name> -- sh # 进入多容器Pod中指定容器的sh shell

# 在Pod中执行命令
kubectl exec <pod-name> -- ls /app # 在Pod中执行ls命令查看/app目录
kubectl exec <pod-name> -- cat /etc/hosts # 在Pod中查看hosts文件

# 复制文件
kubectl cp <pod-name>:/path/to/file ./local-file # 从Pod复制文件到本地
kubectl cp ./local-file <pod-name>:/path/to/file # 从本地复制文件到Pod

Pod 生命周期

# 删除Pod
kubectl delete pod <pod-name> # 删除指定的Pod
kubectl delete pod <pod-name> --force --grace-period=0 # 强制立即删除Pod

# 重启Pod(通过删除重建)
kubectl delete pod <pod-name> # 删除Pod,如果由Deployment管理会自动重建

⚙️ 工作负载管理

Deployment 管理

# 查看Deployment
kubectl get deployments # 列出所有Deployment
kubectl get deployments -o wide # 显示Deployment的详细信息

# 创建和更新
kubectl apply -f deployment.yaml # 创建或更新Deployment(推荐)
kubectl create -f deployment.yaml # 创建Deployment(如果已存在会报错)

# 扩缩容
kubectl scale deployment <name> --replicas=3 # 将Deployment扩展到3个副本
kubectl scale deployment nginx-deployment --replicas=5 # 将nginx-deployment扩展到5个副本

# 滚动更新
kubectl set image deployment/<name> <container>=<new-image> # 更新Deployment中的镜像
kubectl set image deployment/nginx-deployment nginx=nginx:1.20 # 更新nginx镜像到1.20版本

# 更新管理
kubectl rollout status deployment/<name> # 查看Deployment的滚动更新状态
kubectl rollout history deployment/<name> # 查看Deployment的更新历史
kubectl rollout undo deployment/<name> # 回滚到上一个版本
kubectl rollout undo deployment/<name> --to-revision=2 # 回滚到指定版本

# 重启Deployment
kubectl rollout restart deployment/<name> # 重启Deployment(触发滚动更新)

ReplicaSet 管理

# 查看ReplicaSet
kubectl get replicasets # 列出所有ReplicaSet
kubectl get rs # 列出所有ReplicaSet(简写)

# 删除ReplicaSet(会删除相关Pod)
kubectl delete replicaset <rs-name> # 删除指定的ReplicaSet

StatefulSet 管理

# StatefulSet操作
kubectl get statefulsets # 列出所有StatefulSet
kubectl describe statefulset <name> # 查看StatefulSet的详细信息
kubectl scale statefulset <name> --replicas=3 # 将StatefulSet扩展到3个副本

DaemonSet 管理

# DaemonSet操作
kubectl get daemonsets # 列出所有DaemonSet
kubectl describe daemonset <name> # 查看DaemonSet的详细信息

🌐 服务与网络

Service 管理

# 查看Service
kubectl get services # 列出所有Service
kubectl get svc # 列出所有Service(简写)
kubectl get svc -o wide # 显示Service的详细信息

# 创建Service
kubectl expose deployment <name> --type=NodePort --port=80 # 为Deployment创建NodePort类型的Service
kubectl expose deployment nginx --type=LoadBalancer --port=80 --target-port=8080 # 创建LoadBalancer类型的Service

# Service详细信息
kubectl describe service <service-name> # 查看Service的详细信息

端口转发

# 端口转发到Pod
kubectl port-forward pod/<pod-name> 8080:80 # 将本地8080端口转发到Pod的80端口
kubectl port-forward pod/nginx-abc123 8080:80 # 将本地8080端口转发到nginx Pod的80端口

# 端口转发到Service
kubectl port-forward svc/<service-name> 8080:80 # 将本地8080端口转发到Service的80端口
kubectl port-forward svc/nginx-service 8080:80 # 将本地8080端口转发到nginx Service的80端口

# 后台运行端口转发
kubectl port-forward pod/<pod-name> 8080:80 & # 在后台运行端口转发

Ingress 管理

# Ingress操作
kubectl get ingress # 列出所有Ingress
kubectl describe ingress <ingress-name> # 查看Ingress的详细信息
kubectl apply -f ingress.yaml # 创建或更新Ingress

🔧 配置管理

Namespace 管理

# 查看命名空间
kubectl get namespaces # 列出所有命名空间
kubectl get ns # 列出所有命名空间(简写)

# 创建和删除命名空间
kubectl create namespace <name> # 创建新的命名空间
kubectl create namespace development # 创建名为development的命名空间
kubectl delete namespace <name> # 删除指定的命名空间

# 切换默认命名空间
kubectl config set-context --current --namespace=<ns> # 设置当前上下文的默认命名空间
kubectl config set-context --current --namespace=development # 将默认命名空间设置为development

# 在指定命名空间操作
kubectl get pods -n <namespace> # 查看指定命名空间的Pod
kubectl get pods -n kube-system # 查看kube-system命名空间的Pod

ConfigMap 管理

# 查看ConfigMap
kubectl get configmaps # 列出所有ConfigMap
kubectl get cm # 列出所有ConfigMap(简写)

# 创建ConfigMap
kubectl create configmap <name> --from-literal=key=value # 从键值对创建ConfigMap
kubectl create configmap app-config --from-literal=database_url=mysql://localhost:3306 # 创建包含数据库URL的ConfigMap

# 从文件创建ConfigMap
kubectl create configmap <name> --from-file=config.properties # 从配置文件创建ConfigMap
kubectl create configmap <name> --from-env-file=.env # 从环境变量文件创建ConfigMap

# 查看ConfigMap内容
kubectl describe configmap <name> # 查看ConfigMap的详细信息
kubectl get configmap <name> -o yaml # 以YAML格式查看ConfigMap内容

Secret 管理

# 查看Secret
kubectl get secrets # 列出所有Secret
kubectl get secrets -o wide # 显示Secret的详细信息

# 创建Secret
kubectl create secret generic <name> --from-literal=username=admin --from-literal=password=secret # 从键值对创建Secret
kubectl create secret generic db-secret --from-literal=username=admin --from-literal=password=password123 # 创建数据库Secret

# 从文件创建Secret
kubectl create secret generic <name> --from-file=username.txt --from-file=password.txt # 从文件创建Secret

# 查看Secret(注意:值会以base64编码显示)
kubectl describe secret <name> # 查看Secret的详细信息
kubectl get secret <name> -o yaml # 以YAML格式查看Secret内容

# 解码Secret值
kubectl get secret <name> -o jsonpath='{.data.password}' | base64 -d # 解码并显示Secret中的密码值

📊 监控与调试

资源监控

# 查看资源使用情况
kubectl top nodes # 显示所有节点的资源使用情况
kubectl top pods # 显示所有Pod的资源使用情况
kubectl top pods --containers # 显示所有容器的资源使用情况
kubectl top pods --sort-by=cpu # 按CPU使用率排序显示Pod
kubectl top pods --sort-by=memory # 按内存使用率排序显示Pod

# 查看资源配额
kubectl describe quota # 查看资源配额限制
kubectl get resourcequotas # 列出所有资源配额

事件查看

# 查看事件
kubectl get events # 列出所有事件
kubectl get events --sort-by=.metadata.creationTimestamp # 按创建时间排序显示事件
kubectl get events --field-selector involvedObject.name=<pod-name> # 查看与指定Pod相关的事件
kubectl get events -n <namespace> # 查看指定命名空间的事件

调试工具

# 查看Pod状态和事件
kubectl describe pod <pod-name> # 查看Pod的详细状态和事件

# 查看Pod日志
kubectl logs <pod-name> --previous # 查看上一个容器实例的日志
kubectl logs <pod-name> -c <container-name> --previous # 查看多容器Pod中指定容器的上一个实例日志

# 进入Pod调试
kubectl exec -it <pod-name> -- /bin/bash # 进入Pod的bash shell进行调试
kubectl exec -it <pod-name> -- /bin/sh # 进入Pod的sh shell进行调试

�� 故障排除

常见问题诊断

# 检查Pod状态
kubectl get pods --all-namespaces | grep -v Running # 查看所有非运行状态的Pod

# 查看Pod详细信息
kubectl describe pod <pod-name> # 查看Pod的详细信息和事件

# 查看Pod日志
kubectl logs <pod-name> --previous # 查看Pod的日志以诊断问题

# 检查节点状态
kubectl get nodes # 检查所有节点状态
kubectl describe node <node-name> # 查看指定节点的详细信息

# 检查系统Pod
kubectl get pods -n kube-system # 检查系统命名空间的Pod状态

网络问题诊断

# 检查Service和Endpoint
kubectl get svc # 查看所有Service
kubectl get endpoints # 查看所有Endpoint
kubectl describe svc <service-name> # 查看Service的详细信息

# 测试网络连接
kubectl exec -it <pod-name> -- nslookup <service-name> # 在Pod中测试DNS解析
kubectl exec -it <pod-name> -- wget -O- <service-url> # 在Pod中测试HTTP连接

存储问题诊断

# 检查PVC和PV
kubectl get pvc # 查看所有持久卷声明
kubectl get pv # 查看所有持久卷
kubectl describe pvc <pvc-name> # 查看PVC的详细信息
kubectl describe pv <pv-name> # 查看PV的详细信息

💡 最佳实践

命令别名设置

# 添加到 ~/.bashrc 或 ~/.zshrc
alias k='kubectl' # 简化kubectl命令
alias kgp='kubectl get pods' # 快速查看Pod
alias kgs='kubectl get services' # 快速查看Service
alias kgd='kubectl get deployments' # 快速查看Deployment
alias kdp='kubectl describe pod' # 快速描述Pod
alias kl='kubectl logs' # 快速查看日志
alias ke='kubectl exec -it' # 快速进入Pod

常用组合命令

# 快速查看所有资源
kubectl get all # 查看当前命名空间的所有资源

# 查看特定标签的资源
kubectl get pods -l app=nginx # 查看标签为app=nginx的Pod
kubectl get services -l app=nginx # 查看标签为app=nginx的Service

# 删除所有Pod(谨慎使用)
kubectl delete pods --all # 删除当前命名空间的所有Pod

# 查看资源使用情况
kubectl top pods --sort-by=memory | head -10 # 查看内存使用率最高的10个Pod

资源清理

# 清理失败的Pod
kubectl delete pods --field-selector=status.phase=Failed # 删除所有失败的Pod

# 清理所有资源(在测试环境)
kubectl delete all --all # 删除当前命名空间的所有资源
kubectl delete all --all --namespace=<namespace> # 删除指定命名空间的所有资源

📚 参考资源


💡 提示: 使用 kubectl explain <resource> 可以查看任何Kubernetes资源的详细文档和字段说明。