有没有办法告诉kubectl,我的pod只能部署在特定的实例池上?
例如:
nodeSelector:
pool: poolname
假设我已经创建了我的池,类似于以下内容:
gcloud container node-pools create poolname --cluster=cluster-1 --num-nodes=10 --machine-type=n1-highmem-32
有没有办法告诉kubectl,我的pod只能部署在特定的实例池上?
例如:
nodeSelector:
pool: poolname
假设我已经创建了我的池,类似于以下内容:
gcloud container node-pools create poolname --cluster=cluster-1 --num-nodes=10 --machine-type=n1-highmem-32
好的,我找到了一个解决方案:
gcloud 为池名称创建了一个标签。 在我的清单中,我只需将其放置在节点选择器下面即可。非常简单。
这是我的manifest.yaml文件:我使用Kubernetes部署ipyparallel。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ipengine
spec:
replicas: 1
template:
metadata:
labels:
app: ipengine
spec:
containers:
- name: ipengine
image: <imageaddr.>
args:
- ipengine
- --ipython-dir=/tmp/config/
- --location=ipcontroller.default.svc.cluster.local
- --log-level=0
resources:
requests:
cpu: 1
#memory: 3Gi
nodeSelector:
#<labelname>:value
cloud.google.com/gke-nodepool: pool-highcpu32
taint-a
给pool-a
涂上污点,并用taint-b
给pool-b
涂上污点,并为pool-a
和pool-b
的pod提供适当的污点以使它们不进入彼此的池中。doks.digitalocean.com/node-id
doks.digitalocean.com/node-pool
doks.digitalocean.com/node-pool-id
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: ipengine
spec:
replicas: 1
template:
metadata:
labels:
app: ipengine
spec:
containers:
- name: ipengine
image: <imageaddr.>
args:
- ipengine
- --ipython-dir=/tmp/config/
- --location=ipcontroller.default.svc.cluster.local
- --log-level=0
resources:
requests:
cpu: 1
#memory: 3Gi
nodeSelector:
doks.digitalocean.com/node-pool: pool-highcpu32
doks.digitalocean.com/node-pool
期望值为池名称,您还可以使用doks.digitalocean.com/node-pool-id
,该标签期望池的ID作为值。或者你可以两者都做!
这意味着您不需要对每个池进行污点容忍(例如,如果您有一个“默认池”,您希望默认情况下运行事物(即如果用户对其pod未做任何特殊处理,则将其部署在此处),以及用于更特殊/受限用例的“其他池”。
这种模型允许pod在不需要特殊配置调整的情况下运行,而不是对所有内容进行污点容忍,这意味着如果没有容忍配置,pod永远不会运行。
取决于您/您的用户需求,您需要多么严格地锁定所有内容等等。
像往常一样,剥离猫皮有多种方法。