Kubernetes 实操命令大全
基础命令
查看集群信息
bash
# 查看集群信息
kubectl cluster-info
# 查看集群详细信息
kubectl cluster-info dump
# 查看 Kubernetes 版本
kubectl version
# 查看客户端和服务器版本
kubectl version --short
# 查看 API 资源列表
kubectl api-resources
# 查看 API 版本
kubectl api-versions
查看配置
bash
# 查看当前上下文
kubectl config current-context
# 查看所有上下文
kubectl config get-contexts
# 切换上下文
kubectl config use-context <context-name>
# 查看配置
kubectl config view
# 查看特定配置
kubectl config view --minify
Pod 管理
创建和删除 Pod
bash
# 从 YAML 文件创建 Pod
kubectl create -f pod.yaml
# 从 YAML 文件创建或更新 Pod
kubectl apply -f pod.yaml
# 删除 Pod
kubectl delete pod <pod-name>
# 删除指定命名空间的 Pod
kubectl delete pod <pod-name> -n <namespace>
# 强制删除 Pod
kubectl delete pod <pod-name> --force --grace-period=0
查看 Pod
bash
# 查看所有 Pod
kubectl get pods
# 查看所有命名空间的 Pod
kubectl get pods --all-namespaces
kubectl get pods -A
# 查看指定命名空间的 Pod
kubectl get pods -n <namespace>
# 查看 Pod 详细信息
kubectl get pods <pod-name> -o wide
# 查看 Pod 完整信息(YAML)
kubectl get pod <pod-name> -o yaml
# 查看 Pod 描述信息
kubectl describe pod <pod-name>
# 查看 Pod 标签
kubectl get pods --show-labels
Pod 状态管理
bash
# 查看 Pod 状态
kubectl get pods -w
# 查看 Pod 事件
kubectl get events --sort-by=.metadata.creationTimestamp
# 查看 Pod 日志
kubectl logs <pod-name>
# 查看 Pod 中特定容器的日志
kubectl logs <pod-name> -c <container-name>
# 实时查看日志
kubectl logs -f <pod-name>
# 查看最近 100 行日志
kubectl logs --tail=100 <pod-name>
# 查看指定时间范围的日志
kubectl logs --since=1h <pod-name>
Deployment 管理
创建和更新 Deployment
bash
# 创建 Deployment
kubectl create deployment <deployment-name> --image=<image-name>
# 从 YAML 文件创建 Deployment
kubectl create -f deployment.yaml
# 应用 Deployment(创建或更新)
kubectl apply -f deployment.yaml
# 更新 Deployment 镜像
kubectl set image deployment/<deployment-name> <container-name>=<new-image>
# 更新 Deployment 环境变量
kubectl set env deployment/<deployment-name> KEY=VALUE
查看 Deployment
bash
# 查看所有 Deployment
kubectl get deployments
kubectl get deploy
# 查看 Deployment 详细信息
kubectl describe deployment <deployment-name>
# 查看 Deployment 的 ReplicaSet
kubectl get rs
# 查看 Deployment 历史版本
kubectl rollout history deployment/<deployment-name>
Deployment 扩缩容
bash
# 扩展 Deployment
kubectl scale deployment <deployment-name> --replicas=3
# 自动扩缩容
kubectl autoscale deployment <deployment-name> --min=2 --max=10 --cpu-percent=80
滚动更新和回滚
bash
# 查看滚动更新状态
kubectl rollout status deployment/<deployment-name>
# 暂停滚动更新
kubectl rollout pause deployment/<deployment-name>
# 恢复滚动更新
kubectl rollout resume deployment/<deployment-name>
# 回滚到上一个版本
kubectl rollout undo deployment/<deployment-name>
# 回滚到指定版本
kubectl rollout undo deployment/<deployment-name> --to-revision=2
# 查看回滚历史
kubectl rollout history deployment/<deployment-name>
删除 Deployment
bash
# 删除 Deployment
kubectl delete deployment <deployment-name>
# 删除 Deployment 但保留 Pod
kubectl delete deployment <deployment-name> --cascade=orphan
Service 管理
创建 Service
bash
# 创建 Service
kubectl create service clusterip <service-name> --tcp=80:8080
# 从 YAML 文件创建 Service
kubectl create -f service.yaml
# 应用 Service
kubectl apply -f service.yaml
# 创建 NodePort Service
kubectl expose deployment <deployment-name> --type=NodePort --port=80
# 创建 LoadBalancer Service
kubectl expose deployment <deployment-name> --type=LoadBalancer --port=80
查看 Service
bash
# 查看所有 Service
kubectl get services
kubectl get svc
# 查看 Service 详细信息
kubectl describe service <service-name>
# 查看 Service 端点
kubectl get endpoints <service-name>
删除 Service
bash
# 删除 Service
kubectl delete service <service-name>
ConfigMap 和 Secret
ConfigMap 操作
bash
# 从字面量创建 ConfigMap
kubectl create configmap <configmap-name> --from-literal=key1=value1 --from-literal=key2=value2
# 从文件创建 ConfigMap
kubectl create configmap <configmap-name> --from-file=path/to/file
# 从目录创建 ConfigMap
kubectl create configmap <configmap-name> --from-file=path/to/dir
# 查看 ConfigMap
kubectl get configmap
kubectl get cm
# 查看 ConfigMap 内容
kubectl describe configmap <configmap-name>
# 查看 ConfigMap 的 YAML
kubectl get configmap <configmap-name> -o yaml
# 删除 ConfigMap
kubectl delete configmap <configmap-name>
Secret 操作
bash
# 从字面量创建 Secret
kubectl create secret generic <secret-name> --from-literal=username=admin --from-literal=password=secret
# 从文件创建 Secret
kubectl create secret generic <secret-name> --from-file=username.txt --from-file=password.txt
# 创建 TLS Secret
kubectl create secret tls <secret-name> --cert=path/to/cert --key=path/to/key
# 查看 Secret
kubectl get secrets
# 查看 Secret 详细信息
kubectl describe secret <secret-name>
# 查看 Secret 内容(base64 编码)
kubectl get secret <secret-name> -o yaml
# 解码 Secret
kubectl get secret <secret-name> -o jsonpath='{.data.password}' | base64 -d
# 删除 Secret
kubectl delete secret <secret-name>
Namespace 管理
创建和删除 Namespace
bash
# 创建 Namespace
kubectl create namespace <namespace-name>
# 从 YAML 文件创建 Namespace
kubectl create -f namespace.yaml
# 删除 Namespace
kubectl delete namespace <namespace-name>
# 强制删除 Namespace(清理所有资源)
kubectl delete namespace <namespace-name> --force --grace-period=0
查看 Namespace
bash
# 查看所有 Namespace
kubectl get namespaces
kubectl get ns
# 查看 Namespace 详细信息
kubectl describe namespace <namespace-name>
# 查看指定 Namespace 的所有资源
kubectl get all -n <namespace-name>
切换 Namespace
bash
# 设置默认 Namespace
kubectl config set-context --current --namespace=<namespace-name>
# 查看当前 Namespace
kubectl config view --minify | grep namespace
节点管理
查看节点
bash
# 查看所有节点
kubectl get nodes
# 查看节点详细信息
kubectl describe node <node-name>
# 查看节点资源使用情况
kubectl top nodes
# 查看节点标签
kubectl get nodes --show-labels
节点操作
bash
# 标记节点为不可调度
kubectl cordon <node-name>
# 取消节点不可调度标记
kubectl uncordon <node-name>
# 排空节点(驱逐 Pod)
kubectl drain <node-name>
# 排空节点但忽略 DaemonSet
kubectl drain <node-name> --ignore-daemonsets
# 删除节点
kubectl delete node <node-name>
日志和调试
查看日志
bash
# 查看 Pod 日志
kubectl logs <pod-name>
# 查看多个 Pod 的日志
kubectl logs -l app=<app-label>
# 查看前一个容器的日志(容器重启后)
kubectl logs <pod-name> --previous
# 查看指定容器的日志
kubectl logs <pod-name> -c <container-name>
# 实时跟踪日志
kubectl logs -f <pod-name>
# 查看最近 N 行日志
kubectl logs --tail=100 <pod-name>
# 查看指定时间范围的日志
kubectl logs --since=10m <pod-name>
kubectl logs --since=2023-01-01T00:00:00Z <pod-name>
进入容器调试
bash
# 进入 Pod 的容器执行命令
kubectl exec <pod-name> -- <command>
# 进入 Pod 的容器交互式 shell
kubectl exec -it <pod-name> -- /bin/bash
kubectl exec -it <pod-name> -- /bin/sh
# 在指定容器中执行命令
kubectl exec <pod-name> -c <container-name> -- <command>
# 在容器中执行命令并获取输出
kubectl exec <pod-name> -- env
kubectl exec <pod-name> -- ps aux
调试工具
bash
# 查看 Pod 事件
kubectl get events --sort-by=.metadata.creationTimestamp
# 查看特定资源的事件
kubectl describe pod <pod-name>
# 查看集群事件
kubectl get events -A --sort-by=.metadata.creationTimestamp
# 查看资源使用情况
kubectl top pod
kubectl top node
# 查看特定 Pod 的资源使用
kubectl top pod <pod-name>
资源查看
通用查看命令
bash
# 查看所有资源
kubectl get all
# 查看所有命名空间的所有资源
kubectl get all -A
# 查看特定类型的资源
kubectl get <resource-type>
# 查看资源的详细信息
kubectl get <resource-type> <resource-name> -o yaml
kubectl get <resource-type> <resource-name> -o json
# 查看资源的描述信息
kubectl describe <resource-type> <resource-name>
# 查看资源的宽格式输出
kubectl get <resource-type> -o wide
常用资源类型
bash
# Pods
kubectl get pods
# Deployments
kubectl get deployments
kubectl get deploy
# Services
kubectl get services
kubectl get svc
# ReplicaSets
kubectl get replicasets
kubectl get rs
# StatefulSets
kubectl get statefulsets
kubectl get sts
# DaemonSets
kubectl get daemonsets
kubectl get ds
# Jobs
kubectl get jobs
# CronJobs
kubectl get cronjobs
# ConfigMaps
kubectl get configmaps
kubectl get cm
# Secrets
kubectl get secrets
# PersistentVolumes
kubectl get pv
# PersistentVolumeClaims
kubectl get pvc
# Ingress
kubectl get ingress
kubectl get ing
扩缩容
手动扩缩容
bash
# 扩展 Deployment
kubectl scale deployment <deployment-name> --replicas=5
# 扩展 ReplicaSet
kubectl scale rs <replicaset-name> --replicas=3
# 扩展 StatefulSet
kubectl scale statefulset <statefulset-name> --replicas=5
# 扩展当前 YAML 文件中定义的资源
kubectl scale --replicas=3 -f deployment.yaml
自动扩缩容(HPA)
bash
# 创建 HorizontalPodAutoscaler
kubectl autoscale deployment <deployment-name> --min=2 --max=10 --cpu-percent=80
# 查看 HPA
kubectl get hpa
# 查看 HPA 详细信息
kubectl describe hpa <hpa-name>
# 删除 HPA
kubectl delete hpa <hpa-name>
端口转发
端口转发到 Pod
bash
# 转发 Pod 端口到本地
kubectl port-forward <pod-name> 8080:80
# 转发到指定命名空间的 Pod
kubectl port-forward <pod-name> 8080:80 -n <namespace>
# 转发到指定容器的端口
kubectl port-forward <pod-name> 8080:80 -c <container-name>
# 在后台运行端口转发
kubectl port-forward <pod-name> 8080:80 &
端口转发到 Service
bash
# 转发 Service 端口到本地
kubectl port-forward service/<service-name> 8080:80
# 转发到指定命名空间的 Service
kubectl port-forward service/<service-name> 8080:80 -n <namespace>
端口转发到 Deployment
bash
# 转发 Deployment 端口到本地
kubectl port-forward deployment/<deployment-name> 8080:80
执行命令
在容器中执行命令
bash
# 执行单条命令
kubectl exec <pod-name> -- <command>
# 交互式执行命令
kubectl exec -it <pod-name> -- /bin/bash
# 在指定容器中执行命令
kubectl exec <pod-name> -c <container-name> -- <command>
# 执行命令并传递环境变量
kubectl exec <pod-name> -- env
# 执行多个命令
kubectl exec <pod-name> -- sh -c "command1 && command2"
临时容器调试
bash
# 使用 kubectl debug 创建临时调试容器
kubectl debug <pod-name> -it --image=busybox --target=<container-name>
# 创建 Pod 的副本用于调试
kubectl debug <pod-name> -it --copy-to=my-debug-pod --share-processes
标签和选择器
标签操作
bash
# 给资源添加标签
kubectl label pod <pod-name> app=myapp
# 给资源添加多个标签
kubectl label pod <pod-name> app=myapp env=production
# 覆盖现有标签
kubectl label pod <pod-name> app=newapp --overwrite
# 删除标签
kubectl label pod <pod-name> app-
# 查看带标签的资源
kubectl get pods --show-labels
# 使用标签选择器查看资源
kubectl get pods -l app=myapp
kubectl get pods -l 'app in (myapp,webapp)'
kubectl get pods -l 'app=myapp,env=production'
选择器查询
bash
# 使用等号选择器
kubectl get pods -l app=myapp
# 使用不等号选择器
kubectl get pods -l app!=myapp
# 使用 in 选择器
kubectl get pods -l 'app in (myapp,webapp)'
# 使用 notin 选择器
kubectl get pods -l 'app notin (myapp,webapp)'
# 使用 exists 选择器
kubectl get pods -l 'app'
# 使用 does not exist 选择器
kubectl get pods -l '!app'
滚动更新和回滚
滚动更新
bash
# 查看滚动更新状态
kubectl rollout status deployment/<deployment-name>
# 查看滚动更新历史
kubectl rollout history deployment/<deployment-name>
# 查看特定版本的详细信息
kubectl rollout history deployment/<deployment-name> --revision=2
# 暂停滚动更新
kubectl rollout pause deployment/<deployment-name>
# 恢复滚动更新
kubectl rollout resume deployment/<deployment-name>
# 重启 Deployment(触发滚动更新)
kubectl rollout restart deployment/<deployment-name>
回滚
bash
# 回滚到上一个版本
kubectl rollout undo deployment/<deployment-name>
# 回滚到指定版本
kubectl rollout undo deployment/<deployment-name> --to-revision=2
# 回滚 StatefulSet
kubectl rollout undo statefulset/<statefulset-name>
# 回滚 DaemonSet
kubectl rollout undo daemonset/<daemonset-name>
资源清理
删除资源
bash
# 删除 Pod
kubectl delete pod <pod-name>
# 删除 Deployment
kubectl delete deployment <deployment-name>
# 删除 Service
kubectl delete service <service-name>
# 删除多个资源
kubectl delete pod <pod1> <pod2> <pod3>
# 使用标签选择器删除资源
kubectl delete pods -l app=myapp
# 删除命名空间中的所有资源
kubectl delete all --all -n <namespace-name>
# 从文件删除资源
kubectl delete -f deployment.yaml
# 强制删除资源
kubectl delete pod <pod-name> --force --grace-period=0
清理命名空间
bash
# 删除命名空间(会删除其中的所有资源)
kubectl delete namespace <namespace-name>
# 强制删除命名空间
kubectl delete namespace <namespace-name> --force --grace-period=0
YAML 文件操作
从资源生成 YAML
bash
# 获取资源的 YAML
kubectl get pod <pod-name> -o yaml
# 获取资源的 YAML(不包含运行时信息)
kubectl get pod <pod-name> -o yaml --export
# 获取资源的 JSON
kubectl get pod <pod-name> -o json
# 获取资源的自定义格式
kubectl get pod <pod-name> -o jsonpath='{.metadata.name}'
应用 YAML 文件
bash
# 创建资源
kubectl create -f deployment.yaml
# 应用资源(创建或更新)
kubectl apply -f deployment.yaml
# 应用目录中的所有 YAML 文件
kubectl apply -f ./manifests/
# 应用多个文件
kubectl apply -f file1.yaml -f file2.yaml
# 应用 URL 中的 YAML
kubectl apply -f https://example.com/manifest.yaml
# 应用时验证但不实际创建
kubectl apply -f deployment.yaml --dry-run=client
# 应用时显示差异
kubectl diff -f deployment.yaml
编辑资源
bash
# 编辑资源(使用默认编辑器)
kubectl edit pod <pod-name>
# 编辑 Deployment
kubectl edit deployment <deployment-name>
# 使用特定编辑器
KUBE_EDITOR="nano" kubectl edit pod <pod-name>
事件和监控
查看事件
bash
# 查看所有事件
kubectl get events
# 查看所有命名空间的事件
kubectl get events -A
# 按时间排序查看事件
kubectl get events --sort-by=.metadata.creationTimestamp
# 查看特定资源的事件
kubectl describe pod <pod-name>
# 查看最近的事件
kubectl get events --field-selector involvedObject.kind=Pod
资源监控
bash
# 查看 Pod 资源使用情况
kubectl top pod
# 查看节点资源使用情况
kubectl top node
# 查看特定 Pod 的资源使用
kubectl top pod <pod-name>
# 查看特定命名空间的 Pod 资源使用
kubectl top pod -n <namespace>
# 持续监控资源使用
watch kubectl top pod
存储管理
PersistentVolume 和 PersistentVolumeClaim
bash
# 查看 PersistentVolume
kubectl get pv
# 查看 PersistentVolumeClaim
kubectl get pvc
# 查看 PV 详细信息
kubectl describe pv <pv-name>
# 查看 PVC 详细信息
kubectl describe pvc <pvc-name>
# 删除 PVC
kubectl delete pvc <pvc-name>
# 删除 PV
kubectl delete pv <pv-name>
StorageClass
bash
# 查看 StorageClass
kubectl get storageclass
kubectl get sc
# 查看 StorageClass 详细信息
kubectl describe storageclass <storageclass-name>
网络管理
Ingress
bash
# 查看 Ingress
kubectl get ingress
kubectl get ing
# 查看 Ingress 详细信息
kubectl describe ingress <ingress-name>
# 创建 Ingress
kubectl create ingress <ingress-name> --rule="host/path=service:port"
# 删除 Ingress
kubectl delete ingress <ingress-name>
网络策略
bash
# 查看 NetworkPolicy
kubectl get networkpolicies
kubectl get netpol
# 查看 NetworkPolicy 详细信息
kubectl describe networkpolicy <networkpolicy-name>
权限管理
ServiceAccount
bash
# 查看 ServiceAccount
kubectl get serviceaccounts
kubectl get sa
# 创建 ServiceAccount
kubectl create serviceaccount <serviceaccount-name>
# 查看 ServiceAccount 详细信息
kubectl describe serviceaccount <serviceaccount-name>
# 删除 ServiceAccount
kubectl delete serviceaccount <serviceaccount-name>
Role 和 RoleBinding
bash
# 查看 Role
kubectl get roles
# 查看 RoleBinding
kubectl get rolebindings
# 查看 ClusterRole
kubectl get clusterroles
# 查看 ClusterRoleBinding
kubectl get clusterrolebindings
实用技巧
批量操作
bash
# 批量删除 Pod
kubectl delete pods --all
# 批量删除指定标签的 Pod
kubectl delete pods -l app=myapp
# 批量重启 Deployment
kubectl rollout restart deployment/<deployment-name>
输出格式
bash
# YAML 格式
kubectl get pod <pod-name> -o yaml
# JSON 格式
kubectl get pod <pod-name> -o json
# 自定义列
kubectl get pods -o custom-columns=NAME:.metadata.name,STATUS:.status.phase
# JSONPath
kubectl get pods -o jsonpath='{.items[*].metadata.name}'
# Go 模板
kubectl get pods -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'
别名设置
bash
# 设置常用别名(添加到 ~/.bashrc 或 ~/.zshrc)
alias k='kubectl'
alias kgp='kubectl get pods'
alias kgd='kubectl get deployments'
alias kgs='kubectl get services'
alias kdp='kubectl describe pod'
alias kdd='kubectl describe deployment'
alias kds='kubectl describe service'
alias kl='kubectl logs'
alias ke='kubectl exec -it'
上下文切换
bash
# 查看所有上下文
kubectl config get-contexts
# 切换上下文
kubectl config use-context <context-name>
# 查看当前上下文
kubectl config current-context
# 重命名上下文
kubectl config rename-context <old-name> <new-name>
故障排查
常见问题排查
bash
# 查看 Pod 无法启动的原因
kubectl describe pod <pod-name>
# 查看 Pod 事件
kubectl get events --field-selector involvedObject.name=<pod-name>
# 查看容器退出码
kubectl get pod <pod-name> -o jsonpath='{.status.containerStatuses[0].lastState.terminated.exitCode}'
# 查看镜像拉取失败的原因
kubectl describe pod <pod-name> | grep -A 5 "Events"
# 查看节点资源
kubectl describe node <node-name>
# 查看节点上的 Pod
kubectl get pods --field-selector spec.nodeName=<node-name>
调试技巧
bash
# 查看 Pod 的完整状态
kubectl get pod <pod-name> -o yaml
# 查看 Pod 的日志和事件
kubectl logs <pod-name> && kubectl describe pod <pod-name>
# 进入 Pod 检查网络连接
kubectl exec -it <pod-name> -- ping <service-name>
# 检查 DNS 解析
kubectl exec -it <pod-name> -- nslookup <service-name>
# 检查环境变量
kubectl exec <pod-name> -- env
# 检查挂载的卷
kubectl exec <pod-name> -- ls -la /path/to/mount
总结
本文档涵盖了 Kubernetes 日常操作中最常用的命令,包括:
- 基础操作:集群信息查看、配置管理
- 资源管理:Pod、Deployment、Service 等核心资源
- 存储和网络:ConfigMap、Secret、PV/PVC、Ingress
- 监控和调试:日志查看、事件监控、故障排查
- 高级功能:滚动更新、自动扩缩容、端口转发
掌握这些命令可以大大提高 Kubernetes 集群管理的效率。建议根据实际使用场景,将常用命令设置为别名,以便快速执行。
提示:
- 使用
kubectl --help查看任何命令的详细帮助 - 使用
kubectl explain <resource>查看资源的字段说明 - 使用
kubectl api-resources查看所有可用的 API 资源类型