IDC

在Rancher中修改K8S服务参数的万金油法则

作者:admin 2021-07-27 我要评论

作者简介 王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营。拥有7年的云计算领域经验,经历了OpenStack到Kubernetes的技术变革,无论底...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

作者简介

王海龙,Rancher中国社区技术经理,负责Rancher中国技术社区的维护和运营。拥有7年的云计算领域经验,经历了OpenStack到Kubernetes的技术变革,无论底层操作系统Linux,还是虚拟化KVM或是Docker容器技术都有丰富的运维和实践经验。

前言

在这里插入图片描述

最近,总能在社区里收到关于如何修改 kube-api、kubelet 等参数的问题,针对如何在 Rancher 中修改 Kubernetes 服务参数(kube-apiserver、kube-controller-manager、kubelet、kube-scheduler 、kube-proxy、etcd),个别同学可能还不是特别熟悉,所以专门写一篇文章给大家介绍如何在 Rancher 中修改自定义集群的 Kubernetes 各个服务的参数。

如何在 Rancher 中修改 Kubernetes 服务的参数

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,进入到编辑集群页面:
在这里插入图片描述

然后,点击Edit as YAML:在这里插入图片描述

接下来,我们就可以在 rancher_kubernetes_engine_config.services 中修改各个 Kubernetes 服务的配置参数:
在这里插入图片描述

最后,点击Save,保存修改的参数配置。如果配置格式正确,Rancher 会自动更新下游 Kubernetes 集群。

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

所有的 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: {}

YAML 中默认的参数名称是通过-分隔,而 Kubernetes 服务的参数是使用_分隔,例如:
通过 YAML 编辑集群时,默认的参数命名规则:

service-node-port-range: 40000-42767

Kubernetes 服务 api 的参数的命名规则:

service_node_port_range: 30000-32767

可以在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'

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",
            ···
        ],

参考


本文转自网络,版权归原作者所有,原文链接:https://segmentfault.com/a/1190000040407261

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 2020年12月超实用设计干货大合集

    2020年12月超实用设计干货大合集

  • 深入理解JavaScript中的箭头函数

    深入理解JavaScript中的箭头函数

  • Skywalking分布式链路追踪入门

    Skywalking分布式链路追踪入门

  • 连续3年稳居第一,全球1240万用户,Jav

    连续3年稳居第一,全球1240万用户,Jav

腾讯云代理商
海外云服务器