前言
本文系统整理了kubectl的常用命令和参数说明,涵盖集群管理、应用部署、服务发布、故障排查等核心场景。通过清晰的分类和实用的示例,帮助读者快速掌握这一重要工具,提升Kubernetes集群的管理效率。
无论您是初学者还是有一定经验的用户,都能从本文中找到实用的操作指南,为云原生之旅奠定坚实的基础。
一、基本说明
kubectl 是 Kubernetes 官方命令行工具,用于与 kube-apiserver 通信。它将用户输入转化为 API 请求,再由控制组件(controller、scheduler、kubelet)执行操作,是管理 Kubernetes 集群的核心工具。
二、集群信息与环境配置
1. 版本信息
bash
kubectl version
-
作用:查看 kubectl 客户端与集群服务端的版本信息
-
用途:排查版本兼容问题(客户端版本需与集群版本兼容)
2. 资源类型查询
bash
kubectl api-resources
-
作用:列出所有可操作的资源类型(Pod、Service、Deployment 等)
-
用途:了解资源的全名、缩写和所属的 API 组
3. 集群信息
bash
kubectl cluster-info
-
作用:查看集群主控组件(API Server、Controller Manager、Scheduler)的访问地址
4. 自动补全
bash
source <(kubectl completion bash)
-
作用:启用命令自动补全功能
-
参数解释:
-
<(kubectl completion bash):输出 bash 补全脚本 -
source:在当前终端加载脚本
-
5. 服务日志
bash
journalctl -u kubelet -f
-
作用:实时查看 kubelet 服务日志
-
参数解释:
-
-u kubelet:只显示 kubelet 服务 -
-f:持续输出最新日志(follow)
-
三、资源查看命令
基本查询语法
bash
kubectl get <resource> [-o wide|json|yaml] [-n namespace]
-
作用:查看资源对象列表
-
参数解释:
-
<resource>:资源类型,如pods、svc、deployment -
-n <namespace>:指定命名空间 -
-A:显示所有命名空间 -
-o wide:显示更多列信息(如节点名) -
-o yaml/json:以 YAML 或 JSON 格式输出
-
实用示例
bash
# 查看所有命名空间下的所有 Pod kubectl get pods -A # 查看 default 命名空间中的所有资源 kubectl get all -n default
四、命名空间管理
bash
# 查看集群中现有的命名空间 kubectl get ns # 创建命名空间 kubectl create ns app # 删除命名空间 kubectl delete ns app
⚠️ 注意:系统命名空间(如 kube-system、kube-public)受保护,无法删除。
五、Deployment 管理
创建 Deployment
bash
kubectl create deployment nginx-wl --image=nginx -n kube-public
-
参数解释:
-
--image=nginx:指定镜像 -
-n kube-public:命名空间
-
查看 Deployment 信息
bash
kubectl describe deployment nginx-wl -n kube-public
-
作用:查看 Deployment 的详细信息(状态、副本数、事件等)
Pod 操作
bash
# 查看 Pod 状态 kubectl get pods -n kube-public # 进入 Pod 容器执行交互式命令 kubectl exec -it nginx-wl-d47f99cb6-hv6gz -n kube-public -- bash # 删除指定 Pod kubectl delete pod nginx-wl-d47f99cb6-hv6gz -n kube-public
强制删除 Pod
bash
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
-
参数解释:
-
--force:跳过 API 安全检查,立即删除 -
--grace-period=0:优雅退出时间设为 0 秒
-
六、扩缩容
bash
kubectl scale deployment nginx-wl --replicas=2 -n kube-public
-
参数解释:
-
--replicas=<num>:目标副本数量
-
七、删除 Deployment
bash
kubectl delete deployment nginx-wl -n kube-public
-
删除整个 Deployment 及其所有 Pod
八、应用生命周期操作
创建 Deployment
bash
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
-
参数说明:
-
--image=nginx:1.14:指定镜像及版本 -
--port=80:容器开放端口 -
--replicas=3:副本数量为 3
-
验证状态
bash
kubectl get pods
-
查看 Pod 状态,验证是否运行
九、发布 Service
暴露服务
bash
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort
-
参数解释:
-
--target-port:容器内部监听端口 -
--type=NodePort:以 NodePort 方式暴露 -
--name:自定义 Service 名称 -
--port:Service 对外暴露的端口
-
查看服务状态
bash
kubectl get pods,svc -o wide
-
查看 Pod 和 Service 的详细信息
十、滚动更新
更新镜像
bash
kubectl set image deployment/nginx nginx=nginx:1.15
-
参数解释:
-
set image:修改容器镜像 -
deployment/nginx:指定资源类型与名称 -
nginx=nginx:1.15:容器名=新镜像
-
监控更新过程
bash
# 实时监控 Pod 状态变化 kubectl get pods -w # 查看 Deployment 滚动更新进度 kubectl rollout status deployment/nginx
十一、金丝雀发布(Canary Release)
暂停式更新
bash
kubectl set image deployment/nginx nginx=nginx:1.14 && kubectl rollout pause deployment/nginx
-
参数解释:
-
rollout pause deployment/nginx:暂停 Deployment 的滚动更新
-
验证新版本
bash
# 查看更新状态 kubectl rollout status deployment/nginx # 实时监控 Pod 状态 kubectl get pods -w # 验证新版本 Pod 功能 curl -I <新版本Pod的IP>
完成更新
bash
# 继续完成剩余 Pod 的滚动更新 kubectl rollout resume deployment/nginx # 验证最终状态 kubectl get pods -w curl -I <新版本Pod的IP>
十二、回滚操作
bash
# 查看历史版本 kubectl rollout history deployment/nginx # 回滚至上一个版本 kubectl rollout undo deployment/nginx # 回滚至指定版本号 kubectl rollout undo deployment/nginx --to-revision=1
十三、删除应用
bash
kubectl delete deployment nginx kubectl delete svc nginx-service kubectl get all
-
删除应用与服务,查看结果确认是否清理干净
十四、声明式管理方式
YAML 操作
bash
# 导出当前 Deployment 的 YAML 配置 kubectl get deployment nginx -o yaml # 声明式更新:让实际状态与 YAML 描述一致 kubectl apply -f nginx.yaml # 根据 YAML 删除对应资源 kubectl delete -f nginx.yaml # 在线编辑 Service 配置 kubectl edit svc nginx
十五、调试与监控命令
bash
# 查看 Pod 的详细信息 kubectl describe pod <pod-name> # 查看容器日志输出 kubectl logs <pod-name> # 进入容器调试 kubectl exec -it <pod-name> -- bash # 查看资源使用率(需启用 metrics-server) kubectl top pod kubectl top node
十六、节点维护命令
bash
# 标记节点为"不可调度" kubectl cordon node01 # 驱逐节点上运行的 Pod(用于维护或下线) kubectl drain node01 # 恢复节点为可调度状态 kubectl uncordon node01
十七、权限与账户管理
bash
# 创建 ServiceAccount kubectl create serviceaccount admin-user # 绑定最高权限角色 kubectl create clusterrolebinding admin-user --clusterrole=cluster-admin --serviceaccount=default:admin-user
十八、标签与选择器
bash
# 给 Pod 添加标签 kubectl label pods mypod app=nginx # 按标签筛选 Pod kubectl get pods -l app=nginx
十九、帮助命令
bash
# 查看字段的详细说明与结构 kubectl explain pod.spec.containers
总结
kubectl 是 Kubernetes 的中枢工具,它不直接"干活",而是将命令转换成 API 调用。集群的其他组件(scheduler、controller、kubelet)会根据这些声明,去达成用户定义的"理想状态"。
通过熟练掌握这些命令,您可以高效地管理和维护 Kubernetes 集群,实现应用的自动化部署、扩展和管理。
1087

被折叠的 条评论
为什么被折叠?



