Kubernetes Notes
  • README
  • 序:Kubernetes之道
  • 搭建开发环境
    • 搭建本地开发测试环境
  • 基本概念
    • Workloads
      • StatefulSet
    • 认证鉴权
      • 理解证书
      • Kubelet配置
    • 垃圾回收
    • Service
  • 基础组件
    • Scheduler
    • 自动扩缩容(HPA)
  • 容器运行时(Container Runtime)
    • CRI
    • Docker
      • 安装配置Docker
      • Docker FAQ
    • Containerd
  • 资源隔离与限制
    • 基础知识
      • Cgroup
      • Namespaces
    • CPU
    • Memory
    • 网络出/入带宽
    • GPU
    • Container
    • FAQ
  • 网络
    • 基础知识
      • Linux network interfaces
      • Iptables
      • Overlay network
    • CNI
    • Flannel
      • Flannel原理
      • host-gw
      • vxlan
      • ipip
    • Calico
    • Cilium
  • Service Mesh
    • Istio
  • 扩展Kubernetes
    • Admission controller
    • Custom resource definition(CRD)
    • Scheduler extender
    • 扩展资源维度
    • Kubectl plugin
    • Aggregator
    • Device plugin
  • 现网问题
    • Kubernetes
    • ETCD
    • Docker
  • 最佳实践
    • 各组件参数配置调优
    • 各大公司生产环境实践
    • 如何打造一个Kubernetes平台
  • 生产力小工具
    • 生成特定权限和配额的kubeconfig
  • 社区贡献
  • 学习资料
  • 附录:RTFSC
    • Informer
    • Pod deletion
Powered by GitBook
On this page
  • 1. PodPreset
  • 2. MutatingAdmissionWebhook
  • 3. PodNodeSelector
  • 4. Admission controller编写示例与框架
  • 5. 参考资料

Was this helpful?

  1. 扩展Kubernetes

Admission controller

Previous扩展KubernetesNextCustom resource definition(CRD)

Last updated 6 years ago

Was this helpful?

1. PodPreset

修改pod神器。

  • Inject Information into Pods Using a PodPreset:

  • PodPreset design proposal:

2. MutatingAdmissionWebhook

Diving into Kubernetes MutatingAdmissionWebhook:

可以根据需要自主地(要自己写webhook)修改pod。

3. PodNodeSelector

This admission controller defaults and limits what node selectors may be used within a namespace by reading a namespace annotation and a global configuration.

我们可以使用它给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内容如下:

    podNodeSelectorPluginConfig:
      clusterDefaultNodeSelector: "dedicatedNode=ItDoesNotExist"

    所有没有指定默认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

4. Admission controller编写示例与框架

  • 如果要同时支持mutate和validate webhook,写起来还比较麻烦,单独只支持其中一种时很方便。另外,它暂时不支持glog。

  • 这个示例不错。

  • 通过以上框架的学习,发现自己写一个更方便。

5. 参考资料

通过框架可以很方便地写一个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:

https://kubernetes.io/docs/tasks/inject-data-application/podpreset/
https://github.com/kubernetes/community/blob/master/contributors/design-proposals/service-catalog/pod-preset.md
https://medium.com/ibm-cloud/diving-into-kubernetes-mutatingadmissionwebhook-6ef3c5695f74
kubewebhook
https://github.com/stackrox/admission-controller-webhook-demo
https://github.com/caesarxuchao/example-webhook-admission-controller
https://github.com/openshift/generic-admission-server
https://github.com/banzaicloud/admission-webhook-example
https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/
https://www.mgasch.com/post/podnodesel/