Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes Kubectl运行集节点选择器_Kubernetes - Fatal编程技术网

Kubernetes Kubectl运行集节点选择器

Kubernetes Kubectl运行集节点选择器,kubernetes,Kubernetes,在使用Kubernetes run命令时,是否有方法指定节点选择器 我没有yaml文件,我只想覆盖节点选择器 我尝试了以下方法,但没有成功: kubectl run myservice --image myserviceimage:latest --overrides='{ "nodeSelector": { "beta.kubernetes.io/os": "windows" } }' 报告提到: --overrides="": 生成的对象的内联JSON覆盖。 如果非空,则用于覆盖生成的

在使用Kubernetes run命令时,是否有方法指定节点选择器

我没有yaml文件,我只想覆盖节点选择器

我尝试了以下方法,但没有成功:

kubectl run myservice --image myserviceimage:latest --overrides='{ "nodeSelector": { "beta.kubernetes.io/os": "windows" } }'
报告提到:

--overrides="": 
生成的对象的内联JSON覆盖。
如果非空,则用于覆盖生成的对象。
要求对象提供一个

因此,至少尝试一下:

--overrides='{ "apiVersion": "v1", "nodeSelector"... }'
如果不起作用,请检查实际生成的yaml(从)

试试这个:


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

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

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

0)确保要作为目标的节点可以在其上安排播客。我的主节点(master-0)对此没有准备,因此我必须通过以下命令移除其污染:

kubectl taint node master-0 node-role.kubernetes.io/master:NoSchedule-
kubectl api-versions
(尾随-很重要),如果需要,则master-0将替换为您的名称

1) 将覆盖命令添加到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" } } } } }'
*请确保您的API版本受支持。。。当我尝试使用v1时,出现以下错误:

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

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

kubectl taint node master-0 node-role.kubernetes.io/master:NoSchedule-
kubectl api-versions
在这个帖子的催促下,选择了“apps/v1beta1”

我不确定上面的答案是如何工作的,因为它们在json中没有足够的封装。。。也不知道:如何工作,对我来说问题是:


我缺少的关键是:它不是
.spec.nodeSelector
,它必须是
.spec.template.spec.nodeSelector
,在Kubernetes 1.12及更新版本中,匹配规则已更改为使用nodeAffinity

kubectl run hello world--replications=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-Selected-node-01”]}]}]}

请注意,这种方法在类似Unix的Shell中工作得很好,但在Windows上的PowerShell下运行这种方法时存在引用问题。

nodeSelector
必须用
规范
包装。就像这样

kubectl run -ti --rm test --image=ubuntu:18.04 --overrides='{"spec": { "nodeSelector": {"nodename": "eks-prod-4"}}}'

我正在寻找一种只提供nodeSelector而不必提供完整yaml的方法。上面的方法是覆盖生成的yaml还是只覆盖nodeSelector?(我认为它覆盖了整个过程)@nbilal我没有直接测试它,但它应该覆盖公共值。我有点怀疑这是否有效,因为没有提供完整的json路径。nodeSelector在“spec”下。@nbilal在这种情况下,那将是
spec.nodeSelector…
我发现如果我删除
“apiVersion”:“apps/v1beta1”“,
然后它也可以这样工作。“apiVersion”:“v1”tl:tr将此标志添加到kubectl运行:--overrides='{“apiVersion”:“v1”,“spec”:{“template”:{“spec”:{“nodeSelector”:{“kubernetes.io/hostname”:“NODE_HOSTANME”}}“对于1.14,我不得不添加
--generator=run pod/v1
--generator=run pod/v1
已弃用,不再需要。命令的其余部分工作正常