14_kubernetes_setup/14.8_kubectl.md
kubectl 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes。
kubectl 的基本用法格式为:
kubectl [command] [resource] [name] [flags]
其中 command 是操作命令(如 get、apply、delete),resource 是资源类型(如 pod、deployment、service),name 是资源名称(可选),flags 是各种选项参数。
显示一个或多个资源。最常用的命令之一,用于查询集群中的资源状态。
# 查看所有 Pod
$ kubectl get pods
# 查看指定命名空间中的 Deployment
$ kubectl get deployment -n kube-system
# 查看所有资源
$ kubectl get all
# 使用更详细的输出格式
$ kubectl get pods -o wide
# 输出为 YAML 格式
$ kubectl get pod my-pod -o yaml
# 根据标签选择资源
$ kubectl get pods -l app=nginx
显示资源的详细信息,包括事件、状态、配置等。用于调试和查看资源的完整信息。
# 查看特定 Pod 的详情
$ kubectl describe pod my-pod
# 查看 Node 的详情
$ kubectl describe node node-1
# 查看 Deployment 的详情
$ kubectl describe deployment nginx-deployment
从文件或标准输入应用配置。这是声明式资源管理的标准方式,可用于创建或更新资源。
# 应用 YAML 文件
$ kubectl apply -f deployment.yaml
# 应用目录中的所有 YAML 文件
$ kubectl apply -f ./manifests/
# 从标准输入应用配置
$ cat deployment.yaml | kubectl apply -f -
从文件或标准输入创建资源。与 apply 不同,create 仅用于创建新资源,如果资源已存在会报错。
# 创建资源
$ kubectl create -f pod.yaml
# 从标准输入创建
$ kubectl create -f - < deployment.yaml
删除一个或多个资源。支持按名称、标签、资源类型等多种方式删除。
# 按名称删除
$ kubectl delete pod my-pod
# 删除整个 Deployment(同时删除其管理的 Pod)
$ kubectl delete deployment nginx-deployment
# 按标签删除
$ kubectl delete pods -l app=nginx
# 从文件删除
$ kubectl delete -f deployment.yaml
查看 Pod 中容器的日志。用于调试应用和查看容器输出。
# 查看 Pod 的日志
$ kubectl logs my-pod
# 查看 Pod 中特定容器的日志
$ kubectl logs my-pod -c container-name
# 实时跟踪日志(类似 tail -f)
$ kubectl logs -f my-pod
# 查看最近 100 行日志
$ kubectl logs my-pod --tail=100
# 查看 Pod 启动前的日志(适用于已崩溃的容器)
$ kubectl logs my-pod --previous
在运行中的容器内部执行命令。用于调试、排查问题或执行应用内的操作。
# 进入容器的交互式 shell
$ kubectl exec -it my-pod -- /bin/sh
# 在容器中执行命令
$ kubectl exec my-pod -- ls -la /app
# 在 Pod 中的特定容器执行命令
$ kubectl exec -it my-pod -c container-name -- /bin/bash
将本地端口转发到 Pod 的端口。用于本地访问集群内的服务,无需暴露 Service。
# 将本地 8080 端口转发到 Pod 的 80 端口
$ kubectl port-forward pod/my-pod 8080:80
# 使用随机本地端口
$ kubectl port-forward pod/my-pod :80
# 转发到 Service
$ kubectl port-forward svc/my-service 8080:80
对 Deployment、DaemonSet、StatefulSet 等资源执行滚动更新、暂停、继续或回滚操作。
# 查看滚动更新状态
$ kubectl rollout status deployment/nginx-deployment
# 暂停滚动更新
$ kubectl rollout pause deployment/nginx-deployment
# 继续滚动更新
$ kubectl rollout resume deployment/nginx-deployment
# 查看更新历史
$ kubectl rollout history deployment/nginx-deployment
# 回滚到前一个版本
$ kubectl rollout undo deployment/nginx-deployment
# 回滚到特定版本
$ kubectl rollout undo deployment/nginx-deployment --to-revision=2
向资源添加、修改或删除标签。标签用于组织和选择资源。
# 为 Pod 添加标签
$ kubectl label pod my-pod env=production
# 修改已有标签
$ kubectl label pod my-pod env=staging --overwrite
# 删除标签
$ kubectl label pod my-pod env-
# 为多个资源添加标签
$ kubectl label pods -l app=nginx version=v1
向资源添加或修改注解。注解用于存储任意元数据,不用于资源选择。
# 添加注解
$ kubectl annotate pod my-pod description="Production pod"
# 修改注解
$ kubectl annotate pod my-pod description="Staging pod" --overwrite
# 删除注解
$ kubectl annotate pod my-pod description-
直接编辑 Kubernetes 资源。编辑器由 EDITOR 环境变量指定。
# 编辑 Pod
$ kubectl edit pod my-pod
# 编辑 Deployment
$ kubectl edit deployment nginx-deployment
管理 kubectl 的配置文件(通常位于 ~/.kube/config)。
# 查看当前配置
$ kubectl config view
# 切换上下文
$ kubectl config use-context my-cluster
# 查看所有上下文
$ kubectl config get-contexts
# 设置默认命名空间
$ kubectl config set-context --current --namespace=my-namespace
显示集群的连接信息和组件状态。
# 显示集群信息
$ kubectl cluster-info
# 显示完整的集群状态(包括所有组件)
$ kubectl get componentstatuses
显示 kubectl 客户端和 Kubernetes API server 的版本信息。
# 显示版本
$ kubectl version
# 仅显示客户端版本
$ kubectl version --client
# 以 JSON 格式输出
$ kubectl version --output=json
列出 API server 支持的所有 API 版本,格式为 “组/版本”。
$ kubectl api-versions
解释资源的字段含义。用于了解 YAML 配置文件中各字段的作用。
# 查看 Pod 资源的字段说明
$ kubectl explain pod
# 查看 Pod 下 spec 字段的说明
$ kubectl explain pod.spec
# 查看具体字段的详细说明
$ kubectl explain pod.spec.containers
检查用户权限,用于验证 RBAC 配置。
# 检查当前用户是否有权限执行操作
$ kubectl auth can-i create pods
# 检查特定用户的权限
$ kubectl auth can-i create pods --as=other-user
显示任何命令的帮助信息。
# 显示 kubectl 的一般帮助
$ kubectl help
# 显示特定命令的帮助
$ kubectl get --help
# 显示资源的 API 文档
$ kubectl explain deployment