今天有幸看到一个设计方案,使用webhook来做资源高可用设计方案,这个设计方案本身不是多么优秀,但是webhook的使用方式挺有意思。具体设计方式如下:

        

       

       这种使用方式可以用在其他方案设计中,但是这个使用也是有缺点,比如在大量频发资源创建情况,webhook的性能将会是一种瓶颈。因此在适当场景下使用。

     webhook理解:可以比作编程代码中回调函数,而它不是函数而已一个http post的请求,来实现某些功能。

      深入理解

      k8s中提供自定义资源类型和自定义控制器,这个就是常见operator机制;还提供了动态准入控制,这种控制就是采用webhook方式实现,具体分两种方式,一种是验证性质,(validating admission webhook),另一种方式修改性质准入(mutating admission webhook),这两种方式都是资源持久化到etcd的时候进行验证与修改,

      admission webhook

      提到动态准入控制,在k8s api request lifecycle 中生效阶段

     从这个图上可以看到,admission webhook 就像一个java的重点filter的作用。

 使用注意

     检查apiserver是否开启 admission webhook      

# 获取apiserver pod名字
apiserver_pod_name=`kubectl get --no-headers=true po -n kube-system | grep kube-apiserver | awk '{ print $1 }'`
# 查看api server的启动参数plugin
kubectl get po $apiserver_pod_name -n kube-system -o yaml | grep plugin

     如果没有开启需要修改k8s的配置文件/etc/kubernetes/manifests/kube-apiserver.yaml. 加上相应插件参数保存,然后对于apiserver 的pod进行重启。

     后续写一个webhook的实现样例子,(未完)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐