我正在使用命令来创建 Pod 并选择节点
kubectl run newpod --image image1 --command run over --overrides='{ "apiVersion": "v1", "spec": { "template": { "spec": { "nodeSelector": { "kubernetes.io/hostname": "one-worker-node" } } } } }'
Run Code Online (Sandbox Code Playgroud)
问题是它运行在一个名为“one-worker-node”的工作节点上。我无法让它在两个或更多工作节点上运行。喜欢
kubectl run newpod --image image1 --command run over --overrides='{ "apiVersion": "v1", "spec": { "template": { "spec": { "nodeSelector": { "kubernetes.io/hostname": "one-worker-node" : "second-worker-node"} } } } }'
Run Code Online (Sandbox Code Playgroud)
您不能使用 来做到这一点nodeSelector
,因为您需要使用相同的键传递两个键值。像这样的东西:
kubectl run newpod --image image1 --overrides='{ "apiVersion": "v1", "spec": { "nodeSelector": { "kubernetes.io/hostname": "one-worker-node", "kubernetes.io/hostname": "second-worker-node" } } }'
Run Code Online (Sandbox Code Playgroud)
这相当于:
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
run: nginx
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
kubernetes.io/hostname: one-worker-node
kubernetes.io/hostname: second-worker-node
Run Code Online (Sandbox Code Playgroud)
如果您要部署此 pod,则只有最后一个标签才会生效,因为 Pod yaml 中的第一个标签将被覆盖。
所以,你会使用nodeAffinity
. 这应该可以从命令行运行:
kubectl run newpod --image image1 --overrides='{ "spec": { "affinity": { "nodeAffinity": { "requiredDuringSchedulingIgnoredDuringExecution": { "nodeSelectorTerms": [{ "matchExpressions": [{ "key": "kubernetes.io/hostname", "operator": "In", "values": [ "one-worker-node", "second-worker-node" ]} ]} ]} } } } }'
Run Code Online (Sandbox Code Playgroud)
这相当于:
apiVersion: v1
kind: Pod
metadata:
name: newpod
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- one-worker-node
- second-worker-node
containers:
- name: image1
image: image1
Run Code Online (Sandbox Code Playgroud)
您可以将所有候选人添加到values
. 另外,您可能希望将其作为首选项preferredDuringSchedulingIgnoredDuringExecution
,或两者兼而有之;偏好和要求。
概念验证
root@master-1-v1-20:~# kubectl get no
NAME STATUS ROLES AGE VERSION
master-1-v1-20 Ready master 43d v1.20.2
worker-1-v1-20 Ready worker-1 42d v1.20.2
worker-2-v1-20 Ready worker-2 42d v1.20.2
root@master-1-v1-20:~# grep affinity -A8 affinity.yaml
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-1-v1-20
root@master-1-v1-20:~# kubectl create -f affinity.yaml
pod/newpod created
root@master-1-v1-20:~# kubectl get po newpod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
newpod 1/1 Running 0 18s 192.168.127.102 worker-1-v1-20 <none> <none>
Run Code Online (Sandbox Code Playgroud)
我将名称更改为newpod-2
并将其配置为在第二个节点上运行:
root@master-1-v1-20:~# vim affinity.yaml
root@master-1-v1-20:~# grep affinity -A8 affinity.yaml
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- worker-2-v1-20
root@master-1-v1-20:~# kubectl create -f affinity.yaml
pod/newpod-2 created
root@master-1-v1-20:~# kubectl get po newpod newpod-2 -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
newpod 1/1 Running 0 4m26s 192.168.127.102 worker-1-v1-20 <none> <none>
newpod-2 1/1 Running 0 3m25s 192.168.118.172 worker-2-v1-20 <none> <none>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5383 次 |
最近记录: |