Kubectl运行集nodeSelector

nbi*_*lal 7 kubernetes

使用Kubernetes run命令时是否可以指定nodeSelector?

我没有yaml文件,我只想覆盖nodeSelector。

我尝试了以下操作,但没有成功:

kubectl run myservice --image myserviceimage:latest --overrides='{ "nodeSelector": { "beta.kubernetes.io/os": "windows" } }'
Run Code Online (Sandbox Code Playgroud)

Vit*_*Vit 9

尝试这个:

kubectl run myservice --image myserviceimage:latest --overrides='{"apiVersion": "v1", "spec": {"nodeSelector": { "beta.kubernetes.io/os": "windows" }}}'


Ruw*_*uwd 7

我现在有一个实际的答案... 这是我的最终答案

为了通过运行命令指定节点选择器(并使之运行,使其在特定节点上运行),我们可以执行以下操作:

0)确保要定位的节点可以在其上调度Pod。我的主节点(master-0)对此没有准备,所以我必须通过以下命令删除其污点:

kubectl taint node master-0 node-role.kubernetes.io/master:NoSchedule-
Run Code Online (Sandbox Code Playgroud)

(尾随-很重要),如果需要,则将master-0替换为您的名字。

1)将override命令添加到kubectl run命令中。

run hello-world --replicas=1 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0  --port=8080 --overrides='{ "apiVersion": "apps/v1beta1", "spec": { "template": { "spec": { "nodeSelector": { "kubernetes.io/hostname": "master-0" } } } } }'
Run Code Online (Sandbox Code Playgroud)

*确保支持您的apiVersion ...尝试使用v1时出现以下错误:

错误:没有为版本“ v1”注册任何种类的“部署”

为了克服这个问题,我运行了命令:

kubectl api-versions
Run Code Online (Sandbox Code Playgroud)

并且在此线程的推动下,https://github.com/kubernetes/kubernetes/issues/55894选择了“ apps / v1beta1”

我不确定上面的答案如何工作,因为它们在json中没有足够的封装...也不知道如何:https//github.com/kubernetes/kubernetes/issues/45153起作用,对我来说问题是:

我缺少的关键是:不是.spec.nodeSelector,必须是.spec.template.spec.nodeSelector

  • “api版本”:“v1” (3认同)

ece*_*ulm 7

nodeSelector必须用spec. 像这样

kubectl run -ti --rm test --image=ubuntu:18.04 --overrides='{"spec": { "nodeSelector": {"nodename": "eks-prod-4"}}}'
Run Code Online (Sandbox Code Playgroud)


小智 5

在 Kubernetes 1.12 及更高版本中,匹配规则已更改为使用 nodeAffinity。

kubectl run hello-world --replicas=1 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0  --port=8080 --overrides='{"apiVersion":"v1","spec":{"affinity":{"nodeAffinity":{"requiredDuringSchedulingIgnoredDuringExecution":{"nodeSelectorTerms":[{"matchFields":[{"key":"metadata.name","operator":"In","values":["my-chosen-node-01"]}]}]}}}}}'
Run Code Online (Sandbox Code Playgroud)

请注意,此方法在类 Unix shell 中运行良好,但在 Windows 上的 PowerShell 下运行时存在引用问题。


Von*_*onC 2

文档提到kubectl run

--overrides="": 
Run Code Online (Sandbox Code Playgroud)

生成对象的内联 JSON 覆盖。
如果它非空,则用于覆盖生成的对象。
要求对象提供有效的 apiVersion 字段

所以至少尝试一下:

--overrides='{ "apiVersion": "v1", "nodeSelector"... }'
Run Code Online (Sandbox Code Playgroud)

如果这不起作用,请检查实际生成的 yaml(来自问题 24873);

for n in $(kubectl get -o=name pvc,configmap,serviceaccount,secret,ingress,service,deployment,statefulset,hpa,job,cronjob)
do
    mkdir -p $(dirname $n)
    kubectl get -o=yaml --export $n > $n.yaml
done
Run Code Online (Sandbox Code Playgroud)