is there a way to tell kubectl that my pods should only deployed on a certain instance pool?
For example:
nodeSelector:
pool: poolname
Assumed i created already my pool with something like:
gcloud container node-pools create poolname --cluster=cluster-1 --num-nodes=10 --machine-type=n1-highmem-32
答案 0 :(得分:25)
好的,我找到了解决方案:
gcloud为池名称创建标签。在我的清单中,我只是将它放在节点选择器下面。很容易。
这是我的manifest.yaml:我使用kubernetes部署ipyparallel
\d
答案 1 :(得分:2)
您还可以使用污点和公差。这样,您不必知道/硬编码特定的池名称,只需简单地将其带有 taint high-cpu
。然后,您为豆荚赋予该污渍的容忍度,他们可以在该目标池中进行调度。
这使您可以拥有多个池,或进行HA池部署,在其中可以通过更改池上的污点从一个池迁移到另一个池。
这里的 gotcha 是,尽管容忍度允许Pod在受污染的池上进行调度,但不会阻止它们在其他地方进行调度。因此,您需要用pool-a
污染taint-a
,并用pool-b
污染taint-b
,并给pool-a
和pool-b
适当的豆荚将它们挡在彼此池外的污点。
答案 2 :(得分:1)
或者两者都做!
这意味着您不必不需要对每个池进行污染N容忍(例如,如果您有一个“默认池”,则您希望默认情况下运行该程序(即,如果用户不执行任何操作)对于他们的豆荚来说很特殊,他们将在这里部署)和“其他池”以用于更特殊/受限制的用例。
此模型允许Pod在运行时无需对配置进行任何特殊的调整,而不必对所有内容进行n-n容忍,这意味着如果在没有容忍的情况下进行配置,pod将永远不会运行。
取决于您/您的用户需求,对所有需求的严格锁定等等。
和往常一样,有多种方法可以将真皮从猫身上剥下来。
答案 3 :(得分:0)
如果您使用的是Digital ocean Kubernetes,则可以访问下面每个节点池的标签。
type GenericType = {
[key: string]: {
prop1: string,
prop2?: string,
prop3?: number,
};
};
const enforce = <T extends GenericType>(obj: T): T => obj;
const Obj1 = enforce({
key1: {
prop1: "hi",
},
key2: {
prop1: "bye",
prop2: "sup",
},
});
Obj1.key1.prop1; // Ok
Obj1.key2.prop1; // Ok
/**
* ERROR: does not match passed in object
*/
Obj1.key1.prop2 // Error
Obj1.key2.prop3 // Error
Obj1.key2.prop321 // Error
Obj1.key3; // Error
/**
* ERRORS: Does not match GenericType
*/
const Obj2 = enforce({
key1: { // Error
}
});
const Obj3 = enforce({
key1: {
prop1: 123, // Error
}
});
您可以将nodeSelector与提供的任何标签一起使用。第一个标签允许一个将部署分配给特定节点,而后两个则将节点池作为目标。
我会说以NodePool为目标而不是特定的Pod是可取的,因为Pod可以被销毁并创建新的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
将期望池的ID作为值。