Skip to content

kubectl - 基础语法

kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用户和管理员必备的管理工具。kubectl 通过与 apiserver 交互可以实现对 k8s 集群中各种资源的增删改查。

语法格式

bash
kubectl [command] [TYPE] [NAME] [flags]
  • command:指定要对资源执行的操作,例如 creategetdescribedelete
  • TYPE:指定资源类型(如 poddeploymentservice),不区分大小写,可使用单数、复数或缩写形式(例如 pod/pods/po)。
  • NAME:指定资源的名称,区分大小写。如果省略,则显示所有该类型资源。
  • flags:指定可选参数,例如 -n 指定命名空间,-o 指定输出格式。

选项

选项描述示例
-n namespace指定命名空间kubectl get pods -n default
-o output_format设置输出格式(如 wideyamljsonkubectl get pods -o yaml
-l key=value根据标签筛选资源kubectl get pods -l app=nginx
--all-namespaces-A查看所有命名空间的资源kubectl get pods --all-namespaces
-f filename指定配置文件(YAML/JSON)kubectl apply -f deployment.yaml
--dry-run=client试运行,不实际执行操作kubectl run nginx --image=nginx --dry-run=client

基础命令

  • create:从文件或标准输入创建资源。
    bash
    kubectl create -f pod.yaml
  • expose:将资源(如 Deployment)暴露为新的 Service。
    bash
    kubectl expose deployment nginx --port=80 --target-port=80
  • run:在集群上运行一个特定镜像的容器。
    bash
    kubectl run nginx --image=nginx:latest
  • get:获取资源信息。
    bash
    kubectl get pods -o wide          # 查看 Pod 列表及详细信息
    kubectl get deployment,service    # 同时查看多种资源
  • describe:显示资源的详细状态和事件。
    bash
    kubectl describe pod nginx-pod
  • edit:编辑服务器上的资源配置。
    bash
    kubectl edit deployment nginx
  • delete:删除资源。
    bash
    kubectl delete pod nginx-pod
    kubectl delete -f deployment.yaml  # 通过文件删除

部署命令

  • rollout:管理资源的部署(如查看状态、回滚)。
    bash
    kubectl rollout status deployment/nginx  # 查看部署状态
    kubectl rollout undo deployment/nginx     # 回滚到上一版本
  • scale:扩缩容 Deployment 或 ReplicaSet。
    bash
    kubectl scale deployment nginx --replicas=3
  • autoscale:自动扩缩容。
    bash
    kubectl autoscale deployment nginx --min=2 --max=5 --cpu-percent=80

集群管理命令

  • cordon/uncordon:标记节点为不可调度/可调度。
    bash
    kubectl cordon node01      # 标记节点不可调度
    kubectl uncordon node01    # 恢复节点可调度
  • drain:安全驱逐节点上的所有 Pod(用于维护)。
    bash
    kubectl drain node01 --ignore-daemonsets
  • top:显示资源(CPU/内存)使用情况(需安装 metrics-server)。
    bash
    kubectl top nodes  # 查看节点资源使用
    kubectl top pods   # 查看 Pod 资源使用

故障排查与调试命令

  • logs:查看 Pod 中容器的日志。
    bash
    kubectl logs nginx-pod -c container-name   # 查看指定容器日志
    kubectl logs -f nginx-pod                  # 实时查看日志流
  • exec:在容器内执行命令。
    bash
    kubectl exec -it nginx-pod -- /bin/bash     # 交互式进入容器
    kubectl exec nginx-pod -- ls /app          # 执行单条命令
  • port-forward:将本地端口转发到 Pod。
    bash
    kubectl port-forward pod/nginx 8080:80     # 将本地 8080 转发到 Pod 的 80 端口
  • cp:在容器和本地系统之间拷贝文件(要求容器内包含 tar)。
    bash
    kubectl cp /local/file.txt pod-name:/path/  # 本地文件拷贝到容器
    kubectl cp pod-name:/path/file.txt ./      # 从容器拷贝到本地
  • apply:通过文件声明式地应用或更新资源(推荐)。
    bash
    kubectl apply -f deployment.yaml
  • patch:使用补丁更新资源字段。
    bash
    kubectl patch pod nginx-pod -p '{"metadata":{"labels":{"version":"v2"}}}'
  • config:管理 kubeconfig 配置。
    bash
    kubectl config view                          # 查看当前配置
    kubectl config use-context my-cluster        # 切换上下文

经典案例

bash
# 1. 部署一个 Nginx 应用并暴露服务
kubectl create deployment nginx --image=nginx:latest
kubectl expose deployment nginx --port=80 --type=NodePort

# 2. 查看部署状态和服务访问信息
kubectl get pods,svc -o wide

# 3. 检查 Pod 详细状态和事件
kubectl describe pod nginx-pod-name

# 4. 实时查看应用日志
kubectl logs -f deployment/nginx

# 5. 进入 Pod 内的容器进行调试
kubectl exec -it nginx-pod-name -- /bin/bash

# 6. 扩容实例数量
kubectl scale deployment nginx --replicas=3

# 7. 更新镜像版本(滚动更新)
kubectl set image deployment/nginx nginx=nginx:1.21

# 8. 端口转发以便本地访问
kubectl port-forward svc/nginx 8080:80

# 9. 资源更新后查看滚动发布状态
kubectl rollout status deployment/nginx

# 10. 出现问题需要回滚到上一个版本
kubectl rollout undo deployment/nginx

注意事项

  1. 配置管理:使用 kubectl 前需正确配置 kubeconfig 文件,通常位于 ~/.kube/config,可通过环境变量 KUBECONFIG--kubeconfig 参数指定其他配置文件。
  2. 资源删除kubectl delete 命令会立即删除资源,尤其使用 -f 指定配置文件时,请谨慎操作。对于由控制器(如 Deployment)管理的 Pod,删除后会自动重建。
  3. 危险操作警示
    • kubectl drain 会驱逐节点上的 Pod,可能导致服务中断,操作前应确保副本数量足够或已获批准。
    • 直接使用 kubectl delete pod --all 会删除所有 Pod,可能导致服务不可用。
    • 生产环境中谨慎使用 --force 参数强制删除资源,可能绕过安全删除流程。
  4. 命名空间:默认操作命名空间为 default。明确使用 -n 指定命名空间或 -A 查看所有命名空间,避免操作错误环境。
  5. 帮助信息:忘记命令时可使用 kubectl -h 查看子命令列表,或 kubectl [command] --help 查看特定命令的详细用法。使用 kubectl explain RESOURCE(如 kubectl explain pod.spec)可查看资源定义字段的详细说明。