## 14.8 Kubernetes 命令行 kubectl [kubectl](https://github.com/kubernetes/kubernetes) 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes。 kubectl 的基本用法格式为: ```bash kubectl [command] [resource] [name] [flags] ``` 其中 `command` 是操作命令(如 get、apply、delete),`resource` 是资源类型(如 pod、deployment、service),`name` 是资源名称(可选),`flags` 是各种选项参数。 ### 14.8.1 get 显示一个或多个资源。最常用的命令之一,用于查询集群中的资源状态。 ```bash # 查看所有 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 ``` ### 14.8.2 describe 显示资源的详细信息,包括事件、状态、配置等。用于调试和查看资源的完整信息。 ```bash # 查看特定 Pod 的详情 $ kubectl describe pod my-pod # 查看 Node 的详情 $ kubectl describe node node-1 # 查看 Deployment 的详情 $ kubectl describe deployment nginx-deployment ``` ### 14.8.3 apply 从文件或标准输入应用配置。这是声明式资源管理的标准方式,可用于创建或更新资源。 ```bash # 应用 YAML 文件 $ kubectl apply -f deployment.yaml # 应用目录中的所有 YAML 文件 $ kubectl apply -f ./manifests/ # 从标准输入应用配置 $ cat deployment.yaml | kubectl apply -f - ``` ### 14.8.4 create 从文件或标准输入创建资源。与 apply 不同,create 仅用于创建新资源,如果资源已存在会报错。 ```bash # 创建资源 $ kubectl create -f pod.yaml # 从标准输入创建 $ kubectl create -f - < deployment.yaml ``` ### 14.8.5 delete 删除一个或多个资源。支持按名称、标签、资源类型等多种方式删除。 ```bash # 按名称删除 $ kubectl delete pod my-pod # 删除整个 Deployment(同时删除其管理的 Pod) $ kubectl delete deployment nginx-deployment # 按标签删除 $ kubectl delete pods -l app=nginx # 从文件删除 $ kubectl delete -f deployment.yaml ``` ### 14.8.6 logs 查看 Pod 中容器的日志。用于调试应用和查看容器输出。 ```bash # 查看 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 ``` ### 14.8.7 exec 在运行中的容器内部执行命令。用于调试、排查问题或执行应用内的操作。 ```bash # 进入容器的交互式 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 ``` ### 14.8.8 port-forward 将本地端口转发到 Pod 的端口。用于本地访问集群内的服务,无需暴露 Service。 ```bash # 将本地 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 ``` ### 14.8.9 rollout 对 Deployment、DaemonSet、StatefulSet 等资源执行滚动更新、暂停、继续或回滚操作。 ```bash # 查看滚动更新状态 $ 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 ``` ### 14.8.10 label 向资源添加、修改或删除标签。标签用于组织和选择资源。 ```bash # 为 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 ``` ### 14.8.11 annotate 向资源添加或修改注解。注解用于存储任意元数据,不用于资源选择。 ```bash # 添加注解 $ kubectl annotate pod my-pod description=”Production pod” # 修改注解 $ kubectl annotate pod my-pod description=”Staging pod” --overwrite # 删除注解 $ kubectl annotate pod my-pod description- ``` ### 14.8.12 edit 直接编辑 Kubernetes 资源。编辑器由 `EDITOR` 环境变量指定。 ```bash # 编辑 Pod $ kubectl edit pod my-pod # 编辑 Deployment $ kubectl edit deployment nginx-deployment ``` ### 14.8.13 config 管理 kubectl 的配置文件(通常位于 `~/.kube/config`)。 ```bash # 查看当前配置 $ kubectl config view # 切换上下文 $ kubectl config use-context my-cluster # 查看所有上下文 $ kubectl config get-contexts # 设置默认命名空间 $ kubectl config set-context --current --namespace=my-namespace ``` ### 14.8.14 cluster-info 显示集群的连接信息和组件状态。 ```bash # 显示集群信息 $ kubectl cluster-info # 显示完整的集群状态(包括所有组件) $ kubectl get componentstatuses ``` ### 14.8.15 version 显示 kubectl 客户端和 Kubernetes API server 的版本信息。 ```bash # 显示版本 $ kubectl version # 仅显示客户端版本 $ kubectl version --client # 以 JSON 格式输出 $ kubectl version --output=json ``` ### 14.8.16 api-versions 列出 API server 支持的所有 API 版本,格式为 “组/版本”。 ```bash $ kubectl api-versions ``` ### 14.8.17 explain 解释资源的字段含义。用于了解 YAML 配置文件中各字段的作用。 ```bash # 查看 Pod 资源的字段说明 $ kubectl explain pod # 查看 Pod 下 spec 字段的说明 $ kubectl explain pod.spec # 查看具体字段的详细说明 $ kubectl explain pod.spec.containers ``` ### 14.8.18 auth 检查用户权限,用于验证 RBAC 配置。 ```bash # 检查当前用户是否有权限执行操作 $ kubectl auth can-i create pods # 检查特定用户的权限 $ kubectl auth can-i create pods --as=other-user ``` ### 14.8.19 help 显示任何命令的帮助信息。 ```bash # 显示 kubectl 的一般帮助 $ kubectl help # 显示特定命令的帮助 $ kubectl get --help # 显示资源的 API 文档 $ kubectl explain deployment ```