kubectl - 基础语法
kubectl 是 Kubernetes 的命令行工具(CLI),是 Kubernetes 用户和管理员必备的管理工具。kubectl 通过与 apiserver 交互可以实现对 k8s 集群中各种资源的增删改查。
语法格式
bash
kubectl [command] [TYPE] [NAME] [flags]- command:指定要对资源执行的操作,例如
create、get、describe、delete。 - TYPE:指定资源类型(如
pod、deployment、service),不区分大小写,可使用单数、复数或缩写形式(例如pod/pods/po)。 - NAME:指定资源的名称,区分大小写。如果省略,则显示所有该类型资源。
- flags:指定可选参数,例如
-n指定命名空间,-o指定输出格式。
选项
| 选项 | 描述 | 示例 |
|---|---|---|
-n namespace | 指定命名空间 | kubectl get pods -n default |
-o output_format | 设置输出格式(如 wide、yaml、json) | kubectl 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)。bashkubectl 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注意事项
- 配置管理:使用
kubectl前需正确配置 kubeconfig 文件,通常位于~/.kube/config,可通过环境变量KUBECONFIG或--kubeconfig参数指定其他配置文件。 - 资源删除:
kubectl delete命令会立即删除资源,尤其使用-f指定配置文件时,请谨慎操作。对于由控制器(如 Deployment)管理的 Pod,删除后会自动重建。 - 危险操作警示:
kubectl drain会驱逐节点上的 Pod,可能导致服务中断,操作前应确保副本数量足够或已获批准。- 直接使用
kubectl delete pod --all会删除所有 Pod,可能导致服务不可用。 - 生产环境中谨慎使用
--force参数强制删除资源,可能绕过安全删除流程。
- 命名空间:默认操作命名空间为
default。明确使用-n指定命名空间或-A查看所有命名空间,避免操作错误环境。 - 帮助信息:忘记命令时可使用
kubectl -h查看子命令列表,或kubectl [command] --help查看特定命令的详细用法。使用kubectl explain RESOURCE(如kubectl explain pod.spec)可查看资源定义字段的详细说明。
