简介:
本文列出常用 kubectl 命令与简短示例,便于日常集群管理、调试与部署使用。假设已正确配置 kubeconfig。

  1. 概览

    1
    2
    3
    4
    kubectl version               # 客户端/服务端版本
    kubectl cluster-info # 集群信息
    kubectl config current-context # 当前上下文
    kubectl config get-contexts # 列出上下文
  2. 查看资源(get / describe / explain)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    kubectl get nodes                # 节点列表
    kubectl get pods --all-namespaces -o wide
    kubectl get svc,deploy,rs,po -n myns
    kubectl get pods -o jsonpath='{.items[*].metadata.name}' # jsonpath 输出
    kubectl describe pod mypod -n myns # 详细信息
    kubectl explain deployment.spec # 字段说明

    常用输出格式:
    kubectl get pods -o wide
    kubectl get pod mypod -o yaml
    kubectl get pod mypod -o json
    kubectl get pods -o custom-columns=NAME:.metadata.name,IP:.status.podIP
  3. 日志与交互

    1
    2
    3
    4
    5
    6
    7
    kubectl logs pod-name                    # 查看单个容器日志
    kubectl logs -f pod-name # 跟随日志
    kubectl logs pod-name -c container-name # 指定容器
    kubectl logs deploy/my-deployment --since=1h
    kubectl exec -it pod-name -- /bin/bash # 进入容器(交互)
    kubectl port-forward pod/mypod 8080:80 # 本地端口转发
    kubectl cp localfile mypod:/tmp/remote # 拷贝文件到容器
  4. 创建、应用与删除资源

    1
    2
    3
    4
    5
    kubectl apply -f resource.yaml       # 声明式应用(建议)
    kubectl create -f resource.yaml # 立即创建
    kubectl delete -f resource.yaml
    kubectl delete pod mypod -n myns
    kubectl replace -f resource.yaml # 替换资源
  5. 部署、滚动更新与回滚

    1
    2
    3
    4
    5
    6
    7
    kubectl set image deployment/nginx nginx=nginx:1.19.3   # 更新镜像
    kubectl rollout status deployment/nginx # 查看滚动更新状态
    kubectl rollout history deployment/nginx # 历史版本
    kubectl rollout undo deployment/nginx # 回滚到上一个版本
    kubectl rollout undo deployment/nginx --to-revision=2 # 回滚到指定版本
    kubectl scale deployment/nginx --replicas=5
    kubectl autoscale deployment/nginx --min=2 --max=10 --cpu-percent=80
  6. 标签与注释

    1
    2
    3
    kubectl label pod mypod env=prod
    kubectl annotate deploy mydeploy description='blue-green test'
    kubectl get pods --selector=env=prod
  7. 资源编辑与补丁

    1
    2
    3
    kubectl edit deployment mydeploy              # 在默认编辑器中编辑
    kubectl patch deployment mydeploy -p '{"spec":{"replicas":3}}' # json patch
    kubectl replace -f - < resource.yaml # 从 stdin 替换
  8. 管理命名空间、ConfigMap、Secret、存储

    1
    2
    3
    4
    5
    kubectl create namespace myns
    kubectl config set-context --current --namespace=myns
    kubectl create configmap mycfg --from-file=app.conf
    kubectl create secret generic mysecret --from-literal=key=secret
    kubectl get pvc,pv
  9. 节点与调度

    1
    2
    3
    4
    5
    6
    7
    kubectl cordon node01         # 标记不可调度
    kubectl uncordon node01
    kubectl drain node01 --ignore-daemonsets --delete-local-data
    kubectl taint nodes node01 key=value:NoSchedule # 添加污点
    kubectl describe node node01
    kubectl top nodes
    kubectl top pods --all-namespaces
  10. 诊断与调试技巧

    1
    2
    3
    4
    5
    kubectl get events -n myns --sort-by='.lastTimestamp'
    kubectl describe pod mypod -n myns
    kubectl logs pod --previous pod-name # 查看上一个容器实例的日志(崩溃后)
    kubectl run -it --rm debug --image=nicolaka/netshoot -- bash # 运行调试 Pod
    kubectl port-forward svc/myservice 9090:80
  11. 批量与筛选

    1
    2
    3
    kubectl get pods -l app=nginx             # 根据标签筛选
    kubectl get pods --field-selector=status.phase=Running
    kubectl get pods -n kube-system
  12. 常用组合示例

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 查看所有命名空间下最近 1 小时内含 error 的日志
    kubectl get pods --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name | \
    awk 'NR>1{print $1,$2}' | while read ns name; do kubectl logs -n $ns $name --since=1h | grep -i error && echo "$ns/$name"; done

    # 在所有节点上重启 DaemonSet(通过修改注解触发)
    kubectl patch daemonset myds -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"kubectl.kubernetes.io/restartedAt\":\"$(date -Iseconds)\"}}}}}"

    # 递归应用目录
    kubectl apply -k ./overlays/production
  13. 提示与替代工具

    1
    2
    3
    - 使用 --dry-run=client|server 与 kubectl apply --server-side 来先验证变更。
    - 对大仓库或频繁搜索建议使用 k9s、kubectx/kubens、stern(聚合日志)、kubetail、kubectl-neat 等工具。
    - 对于大量文本处理,结合 jq、yq、awk、sed 能极大提升效率。

小结:
掌握 get/describe/logs/exec/apply/rollout/scale/drain 等核心命令,结合标签/输出格式与脚本化操作,可以高效完成大部分集群运维与调试任务。