【一起来学kubernetes】32、kubectl使用详解
一、kubectl 核心概念
kubectl 是 Kubernetes 的官方 CLI 工具,用于与集群交互,支持对资源(如 Pod、Service、Deployment 等)的增删改查操作。其核心特性包括:
- 多资源管理:支持通过 YAML/JSON 文件或命令行参数操作资源。
- 动态调试:提供日志查看、容器内命令执行等功能。
- 多集群配置:通过
kubeconfig
文件切换不同集群上下文。
二、基础命令与操作
1. 资源查询
- 获取资源列表:
kubectl get pods # 列出默认命名空间的 Pod kubectl get svc -n dev # 指定命名空间查询 Service kubectl get all -A # 查看所有命名空间的资源
- 详细信息查看:
kubectl describe pod/nginx # 显示 Pod 的详细状态与事件 kubectl explain deployment.spec # 查看资源字段的文档说明
2. 资源创建与更新
- 声明式管理(YAML/JSON):
kubectl apply -f deployment.yaml # 创建或更新资源(推荐) kubectl create -f service.yaml # 仅创建新资源(若存在则报错)
- 命令式创建:
kubectl run nginx --image=nginx # 启动一个 Pod(已弃用,建议用 Deployment) kubectl expose deployment/nginx --port=80 --type=NodePort # 创建 Service
3. 资源删除
- 按名称或文件删除:
kubectl delete pod/nginx # 删除指定 Pod kubectl delete -f config.yaml # 删除配置文件中的资源
- 按标签批量删除:
kubectl delete pods -l app=web # 删除所有标签为 app=web 的 Pod
4. 容器调试
- 查看日志:
kubectl logs nginx -c container1 --follow # 实时跟踪指定容器的日志
- 执行命令:
kubectl exec -it nginx -- /bin/bash # 进入容器交互终端 kubectl exec nginx -- curl localhost:80 # 在容器内执行单次命令
三、高级操作与技巧
1. 动态资源调整
- 扩缩容:
kubectl scale deployment/nginx --replicas=3 # 调整副本数 kubectl autoscale deployment/nginx --min=2 --max=5 # 自动扩缩容
- 滚动更新与回滚:
kubectl rollout status deployment/nginx # 查看更新状态 kubectl rollout undo deployment/nginx # 回滚到上一版本
2. 网络与端口转发
- 本地端口转发:
kubectl port-forward pod/nginx 8080:80 # 将本地 8080 转发到 Pod 的 80 端口
3. 高效查询与输出
- 按标签过滤:
kubectl get pods -l env=prod # 筛选特定标签的 Pod
- 自定义输出格式:
kubectl get pods -o jsonpath='{.items[*].metadata.name}' # 提取名称列表 kubectl get pods -o wide # 显示 IP 和节点信息
4. 多集群管理
- 切换上下文:
kubectl config use-context cluster-prod # 切换到生产集群
四、常见问题与排错
- 资源状态异常:
- 使用
kubectl describe
查看事件和错误详情。 - 检查 YAML 文件语法:
kubectl apply --dry-run=client -f config.yaml
。
- 使用
- Pod 无法删除:
kubectl delete pod/nginx --force --grace-period=0 # 强制删除
- 日志分析:
- 结合
kubectl logs
和grep
过滤关键信息。
- 结合
五、扩展功能
- 插件支持:
kubectl plugin list # 查看已安装插件
- 自定义资源(CRD):
kubectl get crds # 查看自定义资源类型 kubectl apply -f custom-resource.yaml # 部署自定义资源
拓展
【一起来学kubernetes】31、Helm使用详解
【一起来学kubernetes】25、Master使用详解