降低小型叢集中的外掛程式資源使用量

本頁說明如何減少叢集外掛程式所消耗的資源。在較小的叢集上使用這些技巧,例如只有三個以下節點的叢集,或是使用資源有限的機器類型的叢集。

總覽

除了工作負載之外,叢集節點會執行數個整合節點和叢集主要執行個體的外掛程式,並且提供其他功能。因此,節點的總資源和工作負載可用的資源會有差距。如需詳情,請造訪叢集架構說明文件。

雖然這些外掛程式的預設設定適合一般叢集,您可以依據特定叢集設定來微調外掛程式的資源使用量。您也可以停用一些自身使用案例不需要的外掛程式。

微調對於運算資源有限的叢集而言特別有用,例如只有單一節點或極少節點的叢集,或者在低成本機器類型上執行的叢集。您可以使用小型叢集來嘗試 GKE 或試驗新功能。使用您的第一個叢集叢集範本所建立的叢集也可進行微調。

設定外掛程式

您可以設定各個外掛程式,以減少對於節點資源的影響。

外掛程式為叢集提供可見度以及除錯能力。例如,若您在執行實際工作負載的叢集上停用監控功能,會更難對問題進行除錯。

Stackdriver Logging

Stackdriver Logging 會自動收集、處理與儲存您的容器和系統記錄。

您可以完全停用 Stackdriver Logging,或者保持啟用 Stackdriver Logging,但藉由微調 Fluentd 外掛程式限制資源使用量。

若要停用 Stackdriver Logging:

gcloud container clusters update [CLUSTER_NAME] --logging-service none

若要啟用 Stackdriver Logging:

gcloud container clusters update [CLUSTER_NAME] --logging-service logging.googleapis.com

在 Stackdriver Logging 的情況下檢視記錄

停用 Stackdriver logging 後,您仍可檢視近期的記錄項目。若要檢視特定 Pod 的記錄:

kubectl logs -f [POD_NAME]

其中 -f 選項會串流記錄。

若要檢視符合某個選取器的所有 Pod 記錄:

kubectl logs -l [SELECTOR]

其中 SELECTOR 是一個部署選取器,例如「app=frontend」。

調整 Fluentd

如果您不想以上述方式停用記錄,則可藉由微調 Fluentd,限制記錄使用的資源。

Fluentd 會從節點收集記錄,並將記錄傳送至 Stackdriver。系統會使用 DaemonSet 將 Fluentd 代理程式部署到您的叢集,讓代理程式的執行個體在叢集上的每個節點執行。Fluentd 資源需求視您的特殊工作負載而定;記錄越多所需的資源越多。

您也可以依照您的特殊需求建立資源調度政策,調整 Fluentd 的資源分配。資源調度政策會定義 Pod 的資源要求與限制。請參考管理容器的運算資源,瞭解 Kubernetes 排程器如何處理資源要求和限制。如要進一步瞭解資源要求和限制如何影響服務的品質 (QoS),請參閱 Kubernetes 中的資源服務品質

請展開下列章節,瞭解如何衡量 Fluentd 資源使用量,以及如何使用這些值寫入自訂資源調度政策的操作說明。

Stackdriver Monitoring

我們建議您使用 Stackdriver Monitoring。然而,您也可以停用監控,以取回一些資源。

如需進一步瞭解 Stackdriver Monitoring,請參閱 GKE 監控總覽

若您搭配 Stackdriver Monitoring 的自訂指標使用水平 pod 自動調度資源附加元件,您必須也停用水平 Pod 自動調度資源,才能完全停用 Stackdriver Monitoring。

若要停用 Stackdriver Monitoring:

gcloud beta container clusters update [CLUSTER_NAME] --monitoring-service none
gcloud container clusters update [CLUSTER_NAME] --update-addons=HorizontalPodAutoscaling=DISABLED
kubectl --namespace=kube-system scale deployment metrics-server-v0.2.1 --replicas=0

若要啟用 Stackdriver Monitoring:

gcloud beta container clusters update [CLUSTER_NAME] --monitoring-service monitoring.googleapis.com
gcloud container clusters update [CLUSTER_NAME] --update-addons=HorizontalPodAutoscaling=ENABLED

水平 Pod 自動調度資源

水平 Pod 自動調度資源 (HPA) 會依據 CPU 使用量或記憶體等指標,調度部署的備用資源。若您不需要 HPA 且已停用 Stackdriver Monitoring,您也可以停用 HPA。

若要停用 HPA:

gcloud container clusters update [CLUSTER_NAME] --update-addons=HorizontalPodAutoscaling=DISABLED

若要啟用 HPA:

gcloud container clusters update [CLUSTER_NAME] --update-addons=HorizontalPodAutoscaling=ENABLED

Kubernetes 資訊主頁

您可以停用 Kubernetes 資訊主頁外掛程式,以保留叢集資源。停用資訊主頁幾乎沒有缺點,因為它的功能與 Google Cloud Platform 主控台提供的 GKE 資訊主頁完全相同。

如要停用資訊主頁:

gcloud container clusters update [CLUSTER_NAME] 
--update-addons=KubernetesDashboard=DISABLED

如要啟用資訊主頁:

gcloud container clusters update [CLUSTER_NAME] 
--update-addons=KubernetesDashboard=ENABLED

Kube DNS

Kube DNS 會在叢集中排程 DNS 部署和服務,而叢集中的 Pod 會使用 Kube DNS 服務,將 DNS 名稱解析至服務、Pod、節點和公開 IP 位址的 IP 位址。Kube DNS 會解析公開的網域名稱 (例如 example.com),也會解析服務名稱 (例如 servicename.namespace.svc.cluster.local)。如需進一步瞭解以 DNS 為基礎的服務探索,請參閱服務和 Pod 的 DNS

根據預設會執行數個 Kube DNS 備用資源以維持高可用性。若您不需要高可用性的 DNS 解析,可以將 Kube DNS 備用資源的數量減為 1,以保留叢集資源。若您完全不需要 DNS 名稱解析,可完全停用 Kube DNS。

減少 Kube DNS 複製

若您的叢集不需要高可用性的 DNS 解析,可以關閉 Kube DNS 水平自動調度資源和將備用資源數量減為 1 的方式,以保留叢集資源。

若要關閉 kube-dns 自動配置器並減少 kube-dns 到單一備用資源:

kubectl scale --replicas=0 deployment/kube-dns-autoscaler --namespace=kube-system
kubectl scale --replicas=1 deployment/kube-dns --namespace=kube-system

若要啟用自動調度資源:

kubectl scale --replicas=1 deployment/kube-dns-autoscaler --namespace=kube-system

如要更精確地控制自動調度資源,您可以調整自動調度資源參數

停用 Kube DNS

您可以完全停用 Kube DNS。Kube DNS 是工作負載在解析任何相依服務的 DNS 名稱時所需的資源。相依服務的 DNS 名稱包含公開網域名稱和叢集服務的名稱。

停用 Kube DNS:

kubectl scale --replicas=0 deployment/kube-dns-autoscaler --namespace=kube-system
kubectl scale --replicas=0 deployment/kube-dns --namespace=kube-system

啟用 Kube DNS:

kubectl scale --replicas=1 deployment/kube-dns --namespace=kube-system

其中 --replicas=1 是您想要的備用資源數量。

啟用 Kube DNS 自動調度資源:

kubectl scale --replicas=1 deployment/kube-dns-autoscaler --namespace=kube-system
無 Kube DNS 的外部 DNS 查詢

您可以使用自行選擇的 DNS 服務,設定 Pod 使用外部網域名稱解析。以下範例顯示使用 Google Public DNS 進行外部名稱查詢的 Pod:

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 8.8.8.8
      - 8.8.4.4
無 Kube DNS 的服務探索

您可以使用服務環境變數做為以 DNS 為基礎的服務探索的另一個選擇。建立 Pod 時,系統會為 Pod 命名空間中的每個服務自動建立服務環境變數。這比 Kube DNS 的限制還多,因為系統只會為在 Pod 建立之前所建立的服務建立環境變數。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件