k8s源码分析:kube-apiserver –admission-control及–enable-admission-plugins –disable-admission-plugins参数差异

kubernetes源码分支:1.18

先说结论,kube-apiserver启动时:

  1. –admission-control参数带的插件将是apiserver启动的插件,不包括默认插件
  2. –admission-control和–enable-admission-plugins –disable-admission-plugins不能同时使用
  3. –enable-admission-plugins参数不需要按加载顺序填写
  4. 不使用–admission-control参数时,api server会同时启动默认插件
  5. –enable-admission-plugins参数启用时,api server会同时启动默认插件,除非使用了–disable-admission-plugins显示的关闭某个插件
  6. –enable-admission-plugins和–disable-admission-plugins如果同时填写了某一个插件,这个插件将会被加载

源码pkg/kubeapiserver/options/plugins.go内按加载顺序定义了所有的插件,同时也定义了默认的插件:

源码pkg/kubeapiserver/options/admission.go

  • AddFlags函数内,admission-control启动参数带的值存在了a.PluginNames内

  • ApplyTo函数内,31行和39行,将a.PluginNames内的插件直接传给了a.GenericAdmission.EnablePlugins,同时与a.GenericAdmission.RecommendedPluginOrder差异对比,差异的部分给了a.GenericAdmission.DisablePlugins

  • –enable-admission-plugins –disable-admission-plugins参数的值分别存a.GenericAdmission.EnablePlugins和a.GenericAdmission.DisablePlugins内。

源码k8s.io/apiserver/pkg/server/options/admission.go

a.EnablePlugins用于存放–enable-admission-plugins参数的值

a.DisablePlugins用于存放–disable-admission-plugins参数的值

ApplyTo方法的关键在enabledPluginNames,enabledPluginNames确定了需要加载的插件列表。

allOffPlugins为默认关闭的插件列表和–disable-admission-plugins参数带的插件列表

再使用allOffPlugins和enabledPlugins进行差异对比,差异的部分保存在disabledPlugins

最后按RecommendedPluginOrder(RecommendedPluginOrder为所有插件)内的顺序排序和过滤(过滤到disabledPlugins存在的插件)并返回需要加载的插件列表。

这样就说明:

  • 如果–enable-admission-plugins和–disable-admission-plugins如果同时填写了某一个插件,这个插件将会被加载。
  • 如果只是使用–enable-admission-plugins和–disable-admission-plugins参数,默认插件是会加载的

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

8 − 5 =

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据