在Rancher中修改K8S服務參數的萬金油法則

作者簡介

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

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章