RKE 集群配置

默认情况下的 RKE 集群参数配置都是默认生成的,用户只需填写 IP 端口 节点类型。但在一些高级场景中,用户需要自定义集群参数,比如修改 网络插件 Kubelet参数 等等,自定义RKE 集群参数配置将对您有用。

RKE 集群配置 - 图1tip

为了以最佳实践的参数自动化配置,减小用户门槛。在您未完全掌握 RKE 配置参数配置之前,请谨慎配置。

RKE 集群配置参数说明

进入企业视图 集群 -> 添加集群/集群配置 -> 自定义配置 进行 RKE Kubernetes 集群参数配置。更多请参阅 RKE 官方文档

RKE 集群配置参数示例

  1. nodes:
  2. - address: 192.168.3.169
  3. port: "22"
  4. internal_address: 192.168.3.169
  5. role:
  6. - etcd
  7. - controlplane
  8. - worker
  9. hostname_override: ""
  10. user: docker
  11. docker_socket: ""
  12. ssh_key: ""
  13. ssh_key_path: ~/.ssh/id_rsa
  14. ssh_cert: ""
  15. ssh_cert_path: ""
  16. labels: {}
  17. # app: ingress
  18. taints: []
  19. # - key: test-key
  20. # value: test-value
  21. # effect: NoSchedule
  22. # 检测docker版本,为false时如果docker版本RKE不支持则安装失败
  23. ignore_docker_version: false
  24. # 集群级密钥证书路径
  25. ssh_key_path: ""
  26. ssh_cert_path: ""
  27. # Enable use of SSH agent to use SSH private keys with passphrase
  28. # This requires the environment `SSH_AUTH_SOCK` configured pointing
  29. # to your SSH agent which has the private key added
  30. ssh_agent_auth: false
  31. # 私有镜像仓库
  32. private_registries:
  33. - url: registry.com
  34. user: Username
  35. password: password
  36. is_default: true
  37. # 堡垒机/跳板机 配置
  38. bastion_host:
  39. address: x.x.x.x
  40. user: docker
  41. port: 22
  42. ssh_key_path: /home/user/.ssh/bastion_rsa
  43. # or
  44. # ssh_key: |-
  45. # -----BEGIN RSA PRIVATE KEY-----
  46. #
  47. # -----END RSA PRIVATE KEY-----
  48. # 设置 Kubernetes 集群名称
  49. cluster_name: mycluster
  50. # Kubernetes 版本
  51. kubernetes_version: ""
  52. # 系统镜像
  53. system_images:
  54. etcd: ""
  55. alpine: ""
  56. nginx_proxy: ""
  57. cert_downloader: ""
  58. kubernetes_services_sidecar: ""
  59. kubedns: ""
  60. dnsmasq: ""
  61. kubedns_sidecar: ""
  62. kubedns_autoscaler: ""
  63. coredns: ""
  64. coredns_autoscaler: ""
  65. nodelocal: ""
  66. kubernetes: ""
  67. flannel: ""
  68. flannel_cni: ""
  69. calico_node: ""
  70. calico_cni: ""
  71. calico_controllers: ""
  72. calico_ctl: ""
  73. calico_flexvol: ""
  74. canal_node: ""
  75. canal_cni: ""
  76. canal_controllers: ""
  77. canal_flannel: ""
  78. canal_flexvol: ""
  79. weave_node: ""
  80. weave_cni: ""
  81. pod_infra_container: ""
  82. ingress: ""
  83. ingress_backend: ""
  84. metrics_server: ""
  85. windows_pod_infra_container: ""
  86. aci_cni_deploy_container: ""
  87. aci_host_container: ""
  88. aci_opflex_container: ""
  89. aci_mcast_container: ""
  90. aci_ovs_container: ""
  91. aci_controller_container: ""
  92. aci_gbp_server_container: ""
  93. aci_opflex_server_container: ""
  94. services:
  95. etcd:
  96. # etcd目录和文件 自定义uid/gid
  97. uid: 52034
  98. gid: 52034
  99. # 如果使用外部etcd则填写以下内容
  100. # path: /etcdcluster
  101. # external_urls:
  102. # - https://etcd-example.com:2379
  103. # ca_cert: |-
  104. # -----BEGIN CERTIFICATE-----
  105. # xxxxxxxxxx
  106. # -----END CERTIFICATE-----
  107. # cert: |-
  108. # -----BEGIN CERTIFICATE-----
  109. # xxxxxxxxxx
  110. # -----END CERTIFICATE-----
  111. # key: |-
  112. # -----BEGIN PRIVATE KEY-----
  113. # xxxxxxxxxx
  114. # -----END PRIVATE KEY-----
  115. kube-api:
  116. # 在Kubernetes上创建的IP范围必须与 kube-controller 中的 service_cluster_ip_range 匹配
  117. service_cluster_ip_range: 10.43.0.0/16
  118. # 为NodePort服务公开不同的端口范围
  119. service_node_port_range: 30000-32767
  120. pod_security_policy: false
  121. image: ""
  122. extra_args: {}
  123. extra_binds: []
  124. extra_env: []
  125. win_extra_args: {}
  126. win_extra_binds: []
  127. win_extra_env: []
  128. pod_security_policy: false
  129. always_pull_images: false
  130. secrets_encryption_config: null
  131. audit_log: null
  132. admission_configuration: null
  133. event_rate_limit: null
  134. kube-controller:
  135. # CIDR池用于为集群中的pod分配IP地址
  136. cluster_cidr: 10.42.0.0/16
  137. # 在Kubernetes上创建的服务的IP范围必须与kube-api中的service_cluster_ip_range匹配
  138. service_cluster_ip_range: 10.43.0.0/16
  139. # 添加一些额外的参数
  140. extra_args:
  141. # 例如:设置日志输出的级别为调试级别
  142. v: 4
  143. kubelet:
  144. # 集群域
  145. cluster_domain: cluster.local
  146. # DNS服务IP地址
  147. cluster_dns_server: 10.43.0.10
  148. # 如果交换处于开启状态,则失败
  149. fail_swap_on: false
  150. # 配置 pod-infra-container-image
  151. pod-infra-container-image: "k8s.gcr.io/pause:3.2"
  152. # 生成kubelet服务证书
  153. generate_serving_certificate: true
  154. # 添加一些额外的参数
  155. extra_args:
  156. # 设置pod最大250,而不是默认的110
  157. max-pods: 250
  158. # POD驱逐,这个参数只支持内存和磁盘。
  159. ## 硬驱逐阈值
  160. ### 当节点上的可用资源降至保留值以下时,就会触发强制驱逐。强制驱逐会强制kill掉POD,不会等POD自动退出。
  161. eviction-hard: "memory.available<300Mi,nodefs.available<10%,imagefs.available<15%,nodefs.inodesFree<5%"
  162. ## 软驱逐阈值
  163. ### 以下四个参数配套使用,当节点上的可用资源少于这个值时但大于硬驱逐阈值时候,会等待eviction-soft-grace-period设置的时长;
  164. ### 等待中每10s检查一次,当最后一次检查还触发了软驱逐阈值就会开始驱逐,驱逐不会直接Kill POD,先发送停止信号给POD,然后等待eviction-max-pod-grace-period设置的时长;
  165. ### 在eviction-max-pod-grace-period时长之后,如果POD还未退出则发送强制kill POD"
  166. eviction-soft: "memory.available<500Mi,nodefs.available<80%,imagefs.available<80%,nodefs.inodesFree<10%"
  167. eviction-soft-grace-period: "memory.available=1m30s,nodefs.available=1m30s,imagefs.available=1m30s,nodefs.inodesFree=1m30s"
  168. eviction-max-pod-grace-period: "30"
  169. eviction-pressure-transition-period: "30s"
  170. # 存储卷绑定
  171. extra_binds:
  172. - /grlocaldata:/grlocaldata:rw,z
  173. scheduler:
  174. image: ""
  175. extra_args: {}
  176. extra_binds: []
  177. extra_env: []
  178. win_extra_args: {}
  179. win_extra_binds: []
  180. win_extra_env: []
  181. kubeproxy:
  182. image: ""
  183. extra_args: {}
  184. extra_binds: []
  185. extra_env: []
  186. win_extra_args: {}
  187. win_extra_binds: []
  188. win_extra_env: []
  189. # x509认证策略
  190. authentication:
  191. strategy: x509
  192. sans: []
  193. webhook: null
  194. # Kubernetes 授权模式
  195. # 使用 `mode: rbac` 开启 RBAC
  196. # 使用 `mode: none` 关闭 授权
  197. authorization:
  198. mode: rbac
  199. # job 超时时间 30s
  200. addon_job_timeout: 30
  201. # 可选网络插件 (canal, calico, flannel, weave, or none)
  202. network:
  203. plugin: flannel
  204. options: {}
  205. mtu: 0
  206. node_selector: {}
  207. update_strategy: null
  208. tolerations: []
  209. # 可选DNS (coredns or kube-dns or null)
  210. dns: null
  211. # 指定监控供应商 (metrics-server)
  212. monitoring:
  213. provider: none

以上配置基本上无需修改,大部分用户通过可视化配置即可满足需求。

如需修改,按照所需修改配置文件,例如:

1.修改网络插件为 calico,修改 network.plugincalico

默认会从dockerhub拉取 calico镜像,如需自定义镜像地址请在 system_images 指定镜像地址

  1. network:
  2. plugin: calico

2.设置节点 pod 最大为 250,而不是默认的110。

  1. extra_args:
  2. max-pods: 250

3.启动 apiserver 的 RemoveSelfLink 特性。

  1. services:
  2. kube-api:
  3. extra_args:
  4. feature-gates: 'RemoveSelfLink=false'

4.设置 KubePorxy 使用 ipvs 模式。

  1. services:
  2. kubeproxy:
  3. extra_args:
  4. proxy-mode: ipvs

5.修改配置后,点击更新集群,等待集群更新完成即可。