从同一个 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
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,不被任何replicaset
、deployment
、[=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-1
、pod-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
所以,我有一个 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
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,不被任何replicaset
、deployment
、[=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-1
、pod-2
... pod-10
:
$ 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