Rancher 创建的自定义集群,其实就是通过 RKE 部署 Kubernetes 集群,所以无论是通过 Rancher UI 去创建的自定义集群,还是通过 RKE 去启动的 Kubernetes 集群,都可以参考cluster.yml 文件示例去设置对应的参数。cluster.yml 文件示例中内置了一些常用的 Kubernetes 服务配置项,例如 NodePort 端口范围、Service IP CIDR 等,如果要修改这类参数,我们只需要修改参数对应的值即可:
kube-api:
# IP range for any services created on Kubernetes
# This must match the service_cluster_ip_range in kube-controller
service_cluster_ip_range: 10.43.0.0/16
# Expose a different port range for NodePort services
service_node_port_range: 30000-32767 … …
如果内置的参数选项不包含你要修改的 Kubernetes 服务参数,我们可以在每个 Kubernetes 服务的extra_args:下面添加对应的 Kubernetes 参数选项,例如修改 kube-apiserver 的 NodePort 范围和启用 RemoveSelfLink:
kube-api:
extra_args: (# extra_args 中的参数优先级高于rke默认的参数优先级,所以”service-node-port-range”会覆盖掉上层的”service_node_port_range”参数的值)
service-node-port-range: 40000-42767
feature-gates: ‘RemoveSelfLink=false’
那么,如何在 Rancher 中修改自定义集群的 Kubernetes 服务参数呢,我们可以在 Rancher UI 上选中集群,点击右侧竖起来的 …,然后点击Edit,进入到编辑集群页面:
如何在 Rancher 中修改 Kubernetes 服务的参数 - 图1
然后,点击Edit as YAML:
如何在 Rancher 中修改 Kubernetes 服务的参数 - 图2
接下来,我们就可以在 rancher_kubernetes_engine_config.services 中修改各个 Kubernetes 服务的配置参数:
如何在 Rancher 中修改 Kubernetes 服务的参数 - 图3
最后,点击Save,保存修改的参数配置。如果配置格式正确,Rancher 会自动更新下游 Kubernetes 集群。

在 Rancher 中修改 Kubernetes 服务参数的原则

  1. 所有的 kubernetes 服务的修改层级都是在 rancher_kubernetes_engine_config.services 下,例如:

kube-apiserver的参数层级:
rancher_kubernetes_engine_config: services: kube-api: {}
kube-controller-manager的参数层级:
rancher_kubernetes_engine_config: services: kube-controller: {}

  1. YAML 中默认的参数名称是通过-分隔,而 Kubernetes 服务的参数是使用_分隔,例如:

通过 YAML 编辑集群时,默认的参数命名规则:
service-node-port-range: 40000-42767
Kubernetes 服务 api 的参数的命名规则:
service_node_port_range: 30000-32767

  1. 可以在extra_args:中添加额外的 Kubernetes 服务参数,但需要移除每个参数前面的—,例如 kube-apiserver中对应的启用SelfLink的参数为—feature-gates=RemoveSelfLink=false,而在 Rancher YAML 中添加的参数格式应该为:

rancher_kubernetes_engine_config: services: kube-api: extra_args: feature-gates: ‘RemoveSelfLink=false’

  1. extra_args 中的参数优先级高于 RKE 默认的参数优先级,所以 service-node-port-range 会覆盖掉上层的 service_node_port_range 参数的值。

rancher_kubernetes_engine_config: services: kube-api: service_node_port_range: 30000-32767 extra_args: # extra_args 中的参数优先级高于rke默认的参数优先级,所以”service-node-port-range”会覆盖掉上层的”service_node_port_range”参数的值 service-node-port-range: 40000-42767

如何确认参数是否生效

参数修改后,如果可以成功保存并更新集群,代表你的参数格式是正确的。那么,如何确认修改的参数已经生效了呢?我们可以登录到对应节点,然后通过 docker inspect 查看对应 Kubernetes 服务的Args:
# docker inspect kube-apiserver ··· “Args”: [ ··· “—service-node-port-range=40000-42767”, “—feature-gates=RemoveSelfLink=false”, ··· ],

参考