Kubernetes 官方文档
  • 前言
  • 词汇表
  • 概念
    • 概述
      • 组件
      • 对象
        • 理解 Kubernetes 对象
        • 管理 Kubernetes 对象
        • 对象名称和 ID
        • 标签(Label)和选择算符(Selector)
        • 命名空间(Namespace)
        • 注解(Annotation)
        • 字段选择器
        • Finalizers
        • 属主与附属
    • 架构
      • 节点
    • 工作负载
      • 工作负载资源
        • Job
    • 服务、负载均衡和网络
      • 服务
        • 服务定义
        • 无头服务(Headless Service)
        • 发布服务
    • 配置
      • 配置最佳实践
    • 策略
      • 资源配额
    • 调度、抢占和驱逐
      • Kubernetes 调度器
    • 集群管理
      • 证书
      • 管理资源
        • 组织资源配置
        • kubectl 中的批量操作
        • 有效地使用标签
        • 金丝雀部署
        • 更新标签
      • 集群网络系统
  • 任务
    • 管理集群
      • 手动生成证书
    • 运行应用
      • Pod 水平自动扩缩容
        • HPA 是如何工作的?
      • HPA 演练
        • 创建 HPA
        • 附录
    • TLS
      • 管理集群中的 TLS 认证
  • 参考
    • API 访问控制
      • 使用 RBAC 鉴权
        • API 对象
        • 默认 Roles 和 Role Bindings
        • 初始化与预防权限提升
        • 命令行工具
        • ServiceAccount 权限
        • EndpointSlices 和 Endpoints 写权限
        • 从 ABAC 升级
    • 组件工具
      • kube-scheduler
    • 调度
      • 调度器配置
      • 调度策略
    • 网络参数
      • Service 所用的协议
      • 虚拟 IP 和服务代理
    • 命令行工具 (kubectl)
  • 博客
    • 移除 Dockershim 的常见问题
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. 概念
  2. 集群管理
  3. 管理资源

kubectl 中的批量操作

资源创建并不是 kubectl 可以批量执行的唯一操作。kubectl 还可以人配置文件中提取资源名,以便执行其他操作,特别是删除之前创建的资源:

kubectl delete -f https://k8s.io/examples/application/nginx-app.yaml

输出

deployment.apps "my-nginx" deleted
service "my-nginx-svc" deleted

在仅有两种资源的情况下,可以使用 "资源类型/资源名" 的语法在命令行中同时指定这两种资源:

kubectl delete deployments/my-nginx services/my-nginx-svc

对于资源数目较大的情况,可以使用 -l 或 --selector 指定筛选器(标签查询),很容器根据标签筛选资源:

kubectl delete deployment,services -l app=nginx

由于 kubectl 用来输出资源名称的语法与其所接受的资源名称的语法相同,所以,可以使用 $() 或 xargs 进行链式操作:

kubectl get $(kubectl create -f docs/concepts/cluster-administration/nginx/ -o name | grep service)
kubectl create -f docs/concepts/cluster-administration/nginx/ -o name | grep service | xargs -i kubectl get {}

输出

NAME           TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)      AGE
my-nginx-svc   LoadBalancer   10.0.0.208   <pending>     80/TCP       0s

上面的命令中,首选使用配置文件创建资源,并使用 -o name 的输出格式(以 "资源/名称" 的形式打印每个资源)打印所创建的资源。然后,通过 grep 来过滤 "service" ,最后再打印 kubectl get 的内容。

如果碰巧在某个路径下的多个子路径中组织资源,那么也可以递归地在所有子路径上执行操作,方法是 --filename,-f 后指定 --recursive,-R 参数。

例如,假设有一个目录路径为 project/k8s/development,它保存开发环境所需的所有清单,并按资源类型组织:

project/k8s/development
├── configmap
│   └── my-configmap.yaml
├── deployment
│   └── my-deployment.yaml
└── pvc
    └── my-pvc.yaml

默认情况下,对 project/k8s/development 执行的批量操作只执行目录的第一层,而不是所有子目录。如果试图使用以下命令指定目录创建资源时,会报错:

kubectl apply -f project/k8s/development

输出

error: you must provide one or more resources by argument or filename (.json|.yaml|.yml|stdin)

正确的做法是,在 --filename,-f 参数后指定 --recursive,-R 参数:

kubectl apply -f project/k8s/development --recurisve

输出

configmap/my-config created
deployment.apps/my-deployment created
persistentvolumeclaim/my-pvc created

--recursive 可以用来接受 --filename,-f 参数的任何操作,例如 kubectl {create,get,delete,describe,rollout} 等。

有多个 -f 参数出现的时候,--recursive参数也同样可以正常执行:

kubectl apply -f project/k8s/namespaces -f project/k8s/development --recursive
上一页组织资源配置下一页有效地使用标签

最后更新于2年前

这有帮助吗?

如果需要进一步学习 kubectl 的内容,请参阅 。

命令行工具(kubectl)