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

RancherLabs發表於2021-07-27

作者簡介

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

參考

相關文章