从同一个 YAML 定义文件创建多个 pods

Create multiple pods from the same YAML definition file

所以,我有一个 pod 定义文件,我想知道是否有一种方法可以使用 kubectl apply 命令从同一个定义文件创建 pod 的多个实例。我知道这可以通过部署来完成,但想知道是否有一种方法可以使用应用命令快速启动多个 pods?

仅使用 deployment最简单 方法,对于缩放,您只需使用 scale 命令 或实施 HPA 或 VPA。

您也可以更改部署中的副本数以快速启动多个 pods。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  **replicas: 3**

后台部署使用副本集或 RC。

如果您想要 pods 的静态名称,则使用 statefulset 进行副本创建。 例如,如果您创建 3 个副本,名称将是这样的, pod1:statefulset_name-0 pod2:statefulset_name-1 等等。

您也可以通过部署来完成。但部署将在部署后创建一个具有随机值的 pod 名称。 这是有状态集的示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx"
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web

Ref

I know this can be done with a deployment but wondering if there was a way to quickly spin up multiple pods using the apply command?

是的,这是可能的,但不能使用简单的 kubectl apply 命令,因为它没有 options/capabilities 并且不能用于从单个 yaml 定义文件创建 pod 的多个实例.

如果你只需要创建n number个独立的pods,不被任何replicasetdeployment、[=17管理=] 等等,你可以为此使用一个简单的 bash 单行。

假设我们要基于以下 yaml 模板快速启动 10 个独立的 pods,名为 pod-template.yaml:

apiVersion: v1
kind: Pod
metadata:
  name: {{pod-name}}
spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP

我们可以用下面的脚本来完成:

for i in {1..10}; do sed "s/{{pod-name}}/pod-$i/g" pod-template.yaml | kubectl apply -f - ; done

它将创建 10 个名为 pod-1pod-2 ... pod-10:

的 pods
$ for i in {1..10}; do sed "s/{{pod-name}}/pod-$i/g" pod-template.yaml | kubectl apply -f - ; done
pod/pod-1 created
pod/pod-2 created
pod/pod-3 created
pod/pod-4 created
pod/pod-5 created
pod/pod-6 created
pod/pod-7 created
pod/pod-8 created
pod/pod-9 created
pod/pod-10 created

以防万一你现在想删除它们而不想一个一个删除 ;)

for i in {1..10};do kubectl delete pod pod-$i; done