本文永久链接: https://www.xtplayer.cn/rke2/rke2-enable-event-rate-limit-always-pull-images/

rke2 中如果要启用 event_rate_limit 和 always_pull_images 功能,需要单独手动配置。这两个参数对应 k8s 的

https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/admission-controllers/#alwayspullimages

https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/admission-controllers/#eventratelimit

启用插件

如果要启用这两个功能,先在主机上执行 ps -ef| grep kube-apiserver ,找到 enable-admission-plugins 后面已启用的插件。然后在 kube-apiserver-arg 下添加 enable-admission-plugins=xxxx,xxxx,xxx(需要将原来启用的插件一起加上)。因为配置中添加 enable-admission-plugins 参数,是覆盖而不是追加,如果不添加默认启用的参数,默认的参数将会丢失。

配置插件

根据这里的示例 https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/admission-controllers/#eventratelimit 创建一个 eventratelimit 和 AdmissionConfiguration 配置文件,将其放在 server 节点的某个路径。AdmissionConfiguration 配置文件中定义的 eventratelimit 配置路径为 apiserver pod 中的某个路径。然后根据 https://docs.rke2.io/zh/advanced#ro-%E4%B8%BB%E6%9C%BA%E8%B7%AF%E5%BE%84%E5%8D%B7%E6%8C%82%E8%BD%BD 将上一步中创建的配置文件挂载到 apiserver pod 中。注意,这里挂载到 pod 中的 eventratelimit 配置文件路径需要与 AdmissionConfiguration 中定义的路径匹配。

配置步骤

1,在 rke2 master 节点上执行 ps -ef| grep enable-admission-plugins,找到 enable-admission-plugins 后启用的插件。

2,执行命令 mkdir -p /etc/rancher/rke2/config 创建配置目录

3,在 /etc/rancher/rke2/config 目录下,创建 eventconfig.yaml 配置文件。示例配置如下,具体配置内容可以查看 k8s 官方文档 https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/admission-controllers/#eventratelimit

apiVersion: eventratelimit.admission.k8s.io/v1alpha1
kind: Configuration
limits:
- type: Namespace
qps: 50
burst: 100
cacheSize: 2000
- type: User
qps: 10
burst: 50

4,在 /etc/rancher/rke2 目录下有个 rke2-pss.yaml 文件,拷贝这个文件到 /etc/rancher/rke2/config 目录,然后重命名为 rke2-pss-custom.yaml。在 rke2-pss-custom.yaml 文件中定义 EventRateLimit 插件配置路径,此配置文件为 3 步骤中创建的配置文件。

apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: EventRateLimit
path: /etc/rancher/rke2/config/eventconfig.yaml
- name: PodSecurity
configuration:
apiVersion: pod-security.admission.config.k8s.io/v1beta1
kind: PodSecurityConfiguration
defaults:
enforce: "privileged"
enforce-version: "latest"
exemptions:
usernames: []
runtimeClasses: []
namespaces: []

5,修改 kube-apiserver-arg 和 kube-apiserver-extra-mount,将 /etc/rancher/rke2/config 配置目录挂载到 apiserver pod 中,并通过 admission-control-config-file 指定自定义配置文件路径。

spec:
......
rkeConfig:
......
machineGlobalConfig:
......
kube-apiserver-arg:
- enable-admission-plugins=NodeRestriction,AlwaysPullImages,EventRateLimit
- admission-control-config-file=/etc/rancher/rke2/config/rke2-pss-custom.yaml

kube-scheduler-arg: []
kube-apiserver-extra-mount:
- /etc/rancher/rke2/config/:/etc/rancher/rke2/config/
......