Kubernetes 将 pods 分配给池
Kubernetes assign pods to pool
有没有办法告诉 kubectl 我的 pods 应该只部署在某个实例池上?
例如:
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
您还可以使用 taints 和 tolerations。这样,您就不必 know/hardcode 特定的池名称,而只需知道它将具有 taint high-cpu
,例如。然后你给你的 pods 一个 tolerance 对于那个污点,他们可以在那个目标池上安排。
这允许您拥有多个池,或部署 HA 池,您可以在其中通过更改池上的污点从一个池迁移到另一个池。
然而,这里的 问题 是,虽然容忍度允许 pods 在受污染的池上进行调度,但不会阻止它们在其他地方进行调度。因此,您需要用 taint-a
污染 pool-a
,用 taint-b
污染 pool-b
,并为 pool-a
和 [=13 提供 pods =] 适当的污点使它们远离彼此的池。
或者两者都做!
- 使用标签 select 运行
上的运行
- 使用 taints 和 tolerations 来确保 only other pods don不要尝试 运行 这个 node-pool
这意味着你不需要需要到每个池taint-n-tolerate(例如,如果你有一个'default pool',你想要运行 默认情况下(即如果 uusers 对他们的 pods 没有做任何特别的事情,他们将部署在这里)和“其他池”用于更多 special/restricted 用例。
此模型允许 pods 到 运行 而无需对配置进行任何特殊调整,而不是 tain-n-tolerate 一切,这意味着 pods 永远不会 运行 如果配置没有容忍度.
取决于 your/your 用户需求,您需要的一切都被严格锁定的程度,等等。
一如既往,剥除猫科动物真皮的方法不止一种。
如果您使用的是 Digital ocean Kubernetes,您可以访问以下每个节点池的标签。
doks.digitalocean.com/node-id
doks.digitalocean.com/node-pool
doks.digitalocean.com/node-pool-id
您可以将 nodeSelector 与任何提供的标签一起使用。第一个标签允许将部署分配给特定节点,而最后两个标签以节点池为目标。
我会说以 NodePool 为目标比特定的 pods 更可取,因为可以销毁 pods 并创建新的。下面的快速示例
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 作为值。
有没有办法告诉 kubectl 我的 pods 应该只部署在某个实例池上?
例如:
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
您还可以使用 taints 和 tolerations。这样,您就不必 know/hardcode 特定的池名称,而只需知道它将具有 taint high-cpu
,例如。然后你给你的 pods 一个 tolerance 对于那个污点,他们可以在那个目标池上安排。
这允许您拥有多个池,或部署 HA 池,您可以在其中通过更改池上的污点从一个池迁移到另一个池。
然而,这里的 问题 是,虽然容忍度允许 pods 在受污染的池上进行调度,但不会阻止它们在其他地方进行调度。因此,您需要用 taint-a
污染 pool-a
,用 taint-b
污染 pool-b
,并为 pool-a
和 [=13 提供 pods =] 适当的污点使它们远离彼此的池。
或者两者都做!
- 使用标签 select 运行 上的运行
- 使用 taints 和 tolerations 来确保 only other pods don不要尝试 运行 这个 node-pool
这意味着你不需要需要到每个池taint-n-tolerate(例如,如果你有一个'default pool',你想要运行 默认情况下(即如果 uusers 对他们的 pods 没有做任何特别的事情,他们将部署在这里)和“其他池”用于更多 special/restricted 用例。
此模型允许 pods 到 运行 而无需对配置进行任何特殊调整,而不是 tain-n-tolerate 一切,这意味着 pods 永远不会 运行 如果配置没有容忍度.
取决于 your/your 用户需求,您需要的一切都被严格锁定的程度,等等。
一如既往,剥除猫科动物真皮的方法不止一种。
如果您使用的是 Digital ocean Kubernetes,您可以访问以下每个节点池的标签。
doks.digitalocean.com/node-id
doks.digitalocean.com/node-pool
doks.digitalocean.com/node-pool-id
您可以将 nodeSelector 与任何提供的标签一起使用。第一个标签允许将部署分配给特定节点,而最后两个标签以节点池为目标。
我会说以 NodePool 为目标比特定的 pods 更可取,因为可以销毁 pods 并创建新的。下面的快速示例
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 作为值。