Admission controller
Last updated
Was this helpful?
Last updated
Was this helpful?
修改pod神器。
Inject Information into Pods Using a PodPreset:
PodPreset design proposal:
Diving into Kubernetes MutatingAdmissionWebhook:
可以根据需要自主地(要自己写webhook)修改pod。
我们可以使用它给pod自动加上NodeSelector
,这样可以为不同namesapce的pod分配指定的机器,达到各namespace业务机器隔离的作用。这样的效果通过MutatingAdmissionWebhook
也可以达到,但我们需要写一个AdmissionWebhook,有时间的话可以自己写一个。
具体配置如下所示:
为所有namespace分配机器,并用kubectl label node NODE_NAME_XXX dedicatedNode=NAMESAPCE_XXX
命令给机器加上相应的标签,其中dedicatedNode
为任一有意义的命名字,和下文一致就行。比如:kubectl label node test-node dedicatedNode=demo
的意义是:将test-node
节点分配给demo
namespace下的pod使用。
给apiserver增加参数:--admission-control=...,PodNodeSelector
和--admission-control-config-file=/etc/kubernetes/admission-control.yaml
,其中admission-control.yaml内容如下:
所有没有指定默认nodeSelector的namespace下的pod都会加上nodeSelector dedicatedNode=ItDoesNotExist
,显然这些pod将不会被调度到任何机器上(标签为dedicatedNode=ItDoesNotExist
的机器应该不存在吧:))
新建namespace时,使用以下命令为namespace下的pod指定默认的nodeSelector(否则将为使用上文默认的dedicatedNode=ItDoesNotExist
):
kubectl patch namespace NAMESPACE_XXX -p '{"metadata":{"annotations":{"scheduler.alpha.kubernetes.io/node-selector":"dedicatedNode=NAMESPACE_XXX"}}}'
,例:kubectl patch namespace demo -p '{"metadata":{"annotations":{"scheduler.alpha.kubernetes.io/node-selector":"dedicatedNode=demo"}}}'
,namespace demo下的pod将会被自动加上nodeSelector dedicatedNode=demo
如果要同时支持mutate和validate webhook,写起来还比较麻烦,单独只支持其中一种时很方便。另外,它暂时不支持glog。
这个示例不错。
通过以上框架的学习,发现自己写一个更方便。
通过框架可以很方便地写一个webhook
admission-controller-webhook-demo:
example-webhook-admission-controller:
generic-admission-server:
admission-webhook-example:
Using Admission Controllers:
Understanding and using the Kubernetes PodNodeSelector Admission Controller: