全部產品
Search
文件中心

Container Service for Kubernetes:使用須知及高危風險操作說明

更新時間:Jun 19, 2024

阿里雲Container ServiceKubernetes版(簡稱Container ServiceACK)提供Container Service相關的技術架構以及核心組件的託管服務,對於非託管組件以及運行在ACK叢集中的應用,不當操作可能會導致業務故障。為了更好地預估和避免相關的操作風險,在使用Container ServiceACK前,請認真閱讀本文中的建議與注意事項。

索引

資訊項

相關文檔

使用須知

高危操作

使用須知

資料面組件相關

資料面組件指運行在客戶ECS伺服器上的系統組件,例如CoreDNS、Ingress、kube-proxy、terway、kubelet等。由於資料面組件運行在客戶ECS伺服器上,因此資料面組件啟動並執行穩定性需要阿里雲Container Service與客戶共同維護。

阿里雲Container ServiceACK對資料面組件提供以下支援:

  • 提供組件的參數化設定管理、定期功能最佳化、BugFix、CVE補丁等功能,並給出相應的指導文檔。

  • 提供組件的監控與警示等可觀測能力的建設,部分核心組件會提供組件日誌,並通過SLS透出給客戶。

  • 提供配置最佳實務和建議,Container Service將根據叢集規模大小給出組件配置建議。

  • 提供組件的定期巡檢能力和一定的警示通知能力,檢查項包括但不限定於:組件版本、組件配置、組件負載、組件部署分布拓撲、組件執行個體數等。

您在使用資料面組件時,請遵循以下建議:

  • 使用最新的組件版本。組件經常會發布新版本以修複BUG或提供新特性。您需要在新版本的組件發布後,在保證業務穩定的前提下選擇合適的時機,遵循組件升級指導文檔中的說明進行升級操作。更多資訊,請參見組件概述

  • 請在Container ServiceACK的警示中心中設定連絡人的郵箱地址、手機號碼,並設定相應的警示資訊接收方式,阿里雲將通過這些渠道推送Container Service的警示資訊、產品公告等。更多資訊,請參見Container Service警示管理

  • 在您收到組件穩定性風險報告後,請及時按照相關指引進行處理,消除安全隱患。

  • 當您在使用資料面組件時,請通過Container Service控制台叢集管理頁面營運管理 > 組件管理的方式或者OpenAPI的方式配置組件的自訂參數。通過其他渠道修改組件配置可能會導致組件功能異常。更多資訊,請參見管理組件

  • 請勿直接使用IaaS層產品的OpenAPI來變更組件的運行環境,包括但不限定於使用ECS的OpenAPI更改ECS運行狀態、修改Worker節點的安全性群組配置、更改Worker節點的網路設定以及通過負載平衡的OpenAPI修改SLB配置等,擅自改動IaaS層資源可能會導致資料面組件異常。

  • 部分資料面組件受上遊社區版組件影響,可能存在Bug或漏洞,請注意及時升級組件,以避免開源組件Bug或漏洞導致您的業務受損。

叢集升級相關

請務必通過Container ServiceACK的叢集升級功能更新叢集的K8s版本,自行升級K8s版本可能導致ACK叢集的穩定性和相容性問題。詳細操作,請參見升級叢集和獨立升級叢集控制面和節點池

阿里雲Container ServiceACK對叢集升級提供以下支援:

  • 提供叢集K8s新版本的升級功能。

  • 提供K8s新版本升級的前置檢查功能,確保叢集目前狀態支援升級。

  • 提供K8s新版本的版本說明文檔,包括相較於前版本的變化。

  • 提示升級到K8s新版本時因資源變化可能會發生的風險。

您在使用叢集升級功能時,請遵循以下建議:

  • 在叢集升級前運行前置檢查,並根據前置檢查結果逐一修複叢集升級的阻塞點。

  • 詳細閱讀K8s新版本的版本說明文檔,並根據ACK所提示的升級風險確認叢集和業務的狀態,自行判斷升級風險。詳細資料,請參見【已下線】Kubernetes版本發布概覽

  • 由於叢集升級不提供復原功能,請做好充分的升級計劃和預後備份。

  • 根據Container ServiceACK的版本支援機制,在目前的版本的支援周期內及時升級叢集K8s版本。更多資訊,請參見Kubernetes版本概覽及機制

Kubernetes原生配置相關

  • 請勿擅自修改Kubernetes的關鍵配置,例如以下檔案的路徑、連結和內容:

    • /var/lib/kubelet

    • /var/lib/docker

    • /etc/kubernetes

    • /etc/kubeadm

    • /var/lib/containerd

  • 在YAML模板中請勿使用Kubernetes叢集預留的Annotation,否則會造成資源不可用、申請失敗、異常等問題。以kubernetes.io/k8s.io/開頭的標籤為核心組件預留標籤。違規樣本:pv.kubernetes.io/bind-completed: "yes"。

ACK Serverless叢集相關

在以下情境中,ACK Serverless叢集不提供賠付:

  • 為簡化叢集營運,ACK Serverless叢集提供部分系統組件託管能力,並在叢集的組件開啟託管後,負責其部署和維護。由於您誤刪託管組件依賴的K8s對象資源等其他情況導致業務受損時,ACK Serverless不提供賠付。

註冊叢集相關

  • 通過Container Service管理主控台的註冊叢集功能接入外部Kubernetes叢集時,請確保外部叢集與阿里雲之間的網路穩定性。

  • Container ServiceACK提供外部Kubernetes叢集的註冊接入,但無法管控外部叢集自身的穩定性以及不當操作。因此當您通過註冊叢集配置外部叢集節點的Label、Annotation、Tag等資訊時,可能導致應用運行異常,請謹慎操作。

應用目錄相關

為了豐富Kubernetes應用,Container ServiceACK的應用市場提供了應用目錄,它們是基於開源軟體做了適配和二次開發的應用。ACK無法管控開源軟體本身產生的缺陷,請知曉此風險。更多資訊,請參見應用市場

高危操作

在使用Container ServiceACK過程中相關功能模組存在高危操作,可能會對業務穩定性造成較大影響。在使用前請認真瞭解以下高危操作及其影響。

叢集相關高危操作

分類

高危操作

影響

恢複方案

API Server

刪除API Server所使用的SLB。

導致叢集不可操作。

不可恢複,請重新建立叢集。重建叢集請參見建立Kubernetes託管版叢集

Worker節點

修改叢集內節點安全性群組。

可能導致節點不可用。

將節點重新添加到叢集自動建立的節點安全性群組中,請參見安全性群組與ECS執行個體關聯的管理

節點到期或被銷毀。

該節點不可用。

不可恢複。

重裝作業系統。

節點上組件被刪除。

節點移出再加入叢集。相關操作請參見移除節點添加已有節點

自行升級節點群組件版本。

可能導致節點無法使用。

回退到原始版本。

更改節點IP。

節點不可用。

改回原IP。

自行修改核心組件(kubelet、docker、containerd 等)參數。

可能導致節點不可用。

按照官網推薦配置參數。

修改作業系統配置。

可能導致節點不可用。

嘗試還原配置項或刪除節點重新購買。

修改節點時間。

可能導致節點上組件工作異常。

還原節點時間。

Master節點(ACK專有版叢集)

修改叢集內節點安全性群組。

可能導致Master節點不可用。

將節點重新添加到叢集自動建立的節點安全性群組中,請參見安全性群組與ECS執行個體關聯的管理

節點到期或被銷毀。

該Master節點不可用。

不可恢複。

重裝作業系統。

Master節點上組件被刪除。

不可恢複。

自行升級Master或者etcd組件版本。

可能導致叢集無法使用。

回退到原始版本。

刪除或格式化節點/etc/kubernetes等核心目錄資料。

該Master節點不可用。

不可恢複。

更改節點IP。

該Master節點不可用。

改回原IP。

自行修改核心組件(etcd、kube-apiserver、docker等)參數。

可能導致Master節點不可用。

按照官網推薦配置參數。

自行更換Master或etcd 認證

可能導致叢集無法使用。

不可恢複。

自行增加或減少Master節點。

可能導致叢集無法使用。

不可恢複。

修改節點時間。

可能導致節點上組件工作異常。

還原節點時間。

其他

通過RAM執行許可權變更或修改操作。

叢集部分資源如負載平衡可能無法建立成功。

恢複原先許可權。

節點池相關高危操作

高危操作

影響

恢複方案

刪除伸縮組。

導致節點池異常。

不可恢複,只能重建節點池。重建節點池請參見操作步驟

通過kubectl移除節點。

節點池節點數顯示和實際不符。

通過Container Service管理主控台或者節點池相關API移除指定節點(參見移除節點)或者修改節點池點數進行望節點數縮容(參見建立節點池)。

直接釋放ECS執行個體。

可能導致節點池詳情頁面顯示異常。開啟期望節點數的節點池為維持期望節點數,將會根據相應節點池配置自動擴容到期望節點數。

不可恢複。正確做法是通過Container Service管理主控台或者節點池相關API修改節點池的期望節點數進行縮容(參見建立節點池)或移除指定節點(參見移除節點)。

對開啟自動調整的節點池進行手動擴容或縮容。

自動調整組件會根據策略自動調整節點數,導致結果與期望不符。

不可恢複。自動調整節點池無需手動幹預。

修改ESS伸縮組的最大或最小執行個體數。

可能導致擴縮容異常。

  • 對於未開啟自動調整組的節點池,ESS伸縮組最大和最小執行個體數改為預設值2000和0。

  • 對於開啟自動調整的節點池,將ESS伸縮組最大和最小執行個體數修改為與節點池最大和最小節點數一致。

添加已有節點前不進行資料備份。

添加前執行個體上的資料丟失。

不可恢複。

  • 手動添加已有節點前必須對要保留的所有資料進行提前備份。

  • 自動添加節點時會執行系統硬碟替換操作,需要您提前備份儲存在系統硬碟中的有用資料。

在節點系統硬碟中儲存重要資料。

節點池的自愈操作可能通過重設節點配置的方式修複節點,因此可能導致系統硬碟資料丟失。

不可恢複。正確做法是將重要資料存放於額外的資料盤或者雲端硬碟、NAS、OSS。

網路與負載平衡相關高危操作

高危操作

影響

恢複方案

修改核心參數net.ipv4.ip_forward=0

網路不通。

修改核心參數為net.ipv4.ip_forward=1

修改核心參數:

  • net.ipv4.conf.all.rp_filter = 1|2

  • net.ipv4.conf.[ethX].rp_filter = 1|2

    說明

    ethX代表所有以eth開頭的網卡。

網路不通。

修改核心參數為:

  • net.ipv4.conf.all.rp_filter = 0

  • net.ipv4.conf.[ethX].rp_filter = 0

修改核心參數net.ipv4.tcp_tw_reuse = 1

導致Pod健全狀態檢查異常。

修改核心參數為net.ipv4.tcp_tw_reuse = 0

修改核心參數net.ipv4.tcp_tw_recycle = 1

導致NAT異常。

修改核心參數net.ipv4.tcp_tw_recycle = 0

修改核心參數net.ipv4.ip_local_port_range

導致網路偶發不通。

修改核心參數到預設值net.ipv4.ip_local_port_range="32768 60999"

安裝防火牆軟體,例如Firewalld或者ufw等。

導致容器網路不通。

卸載防火牆軟體並重啟節點。

節點安全性群組配置未放通容器 CIDR的53連接埠UDP。

叢集內DNS無法正常工作。

按照官網推薦配置放通安全性群組。

修改或者刪除ACK添加的SLB的標籤。

導致SLB異常。

恢複SLB的標籤。

通過負載平衡控制台修改ACK管理的SLB的配置,包括SLB、監聽及虛擬伺服器組。

導致SLB異常。

恢複SLB的配置。

移除Service中複用已有SLB的Annotation,即service.beta.kubernetes.io/alibaba-cloud-loadbalancer-id: ${YOUR_LB_ID}

導致SLB異常。

在Service中添加複用已有SLB的Annotation。

說明

複用已有SLB的Service無法直接修改為使用自動建立SLB的Service。您需要重新建立Service。

通過負載平衡控制台刪除ACK建立的SLB。

可能導致叢集網路異常。

通過刪除Service的方式刪除SLB。刪除Service請參見刪除Service

在安裝Nginx Ingress Controller組件的情況下手動刪除 kube-system命名空間下的nginx-ingress-lb Service。

Ingress Controller工作不正常,嚴重時產生崩潰。

使用以下YAML建立一個同名Service。

apiVersion: v1
kind: Service
metadata:
  annotations:
  labels:
    app: nginx-ingress-lb
  name: nginx-ingress-lb
  namespace: kube-system
spec:
  externalTrafficPolicy: Local
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: ingress-nginx
  type: LoadBalancer

新增或修改ECS節點上DNS設定檔/etc/resolv.confnameserver選項。

若配置的DNS伺服器配置不合理,可能導致DNS無法解析,影響叢集正常運行。

您如果想要使用自建DNS伺服器作為上遊伺服器,建議在CoreDNS側進行配置。具體操作,請參見CoreDNS配置說明

儲存相關高危操作

高危操作

影響

恢複方案

控制台手動解掛雲端硬碟。

Pod寫入報IO Error。

重啟Pod,手動清理節點掛載殘留。

節點上umount磁碟掛載路徑

Pod寫入本地磁碟。

重啟Pod。

節點上直接操作雲端硬碟。

Pod寫入本地磁碟。

不可恢複。

多個Pod掛載相同雲端硬碟。

Pod寫入本地磁碟或者報錯IO Error。

確保一個雲端硬碟給一個Pod使用。

重要

雲端硬碟為阿里雲儲存團隊提供的非共用儲存,只能同時被一個Pod掛載。

手動刪除NAS掛載目錄。

Pod寫入報IO Error。

重啟Pod。

刪除正在使用的NAS盤或掛載點。

Pod出現IO Hang。

重啟ECS節點。重啟具體操作,請參見重啟ECS執行個體

日誌相關高危操作

高危操作

影響

恢複方案

刪除宿主機/tmp/ccs-log-collector/pos目錄。

日誌重複採集。

不可恢複。該目錄下的檔案記錄了日誌的採集位置。

刪除宿主機/tmp/ccs-log-collector/buffer目錄。

日誌丟失。

不可恢複。該目錄是待消費的日誌快取檔案。

刪除aliyunlogconfig CRD資源。

日誌採集失效。

重新建立刪除的CRD以及對應的資源,但失效期間日誌無法恢複。

刪除CRD會關聯刪除對應所有的執行個體,即使恢複CRD後還需要手動建立被刪除的執行個體。

刪除日誌組件。

日誌採集失效。

重新安裝日誌組件並手動恢複aliyunlogconfig CRD執行個體,刪除期間日誌無法恢複。

刪除日誌組件相當於刪除aliyunlogconfig CRD以及日誌採集器Logtail,期間日誌採集能力全部丟失。