阿里雲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伸縮組的最大或最小執行個體數。 | 可能導致擴縮容異常。 |
|
添加已有節點前不進行資料備份。 | 添加前執行個體上的資料丟失。 | 不可恢複。
|
在節點系統硬碟中儲存重要資料。 | 節點池的自愈操作可能通過重設節點配置的方式修複節點,因此可能導致系統硬碟資料丟失。 | 不可恢複。正確做法是將重要資料存放於額外的資料盤或者雲端硬碟、NAS、OSS。 |
網路與負載平衡相關高危操作
高危操作 | 影響 | 恢複方案 |
修改核心參數 | 網路不通。 | 修改核心參數為 |
修改核心參數:
| 網路不通。 | 修改核心參數為:
|
修改核心參數 | 導致Pod健全狀態檢查異常。 | 修改核心參數為 |
修改核心參數 | 導致NAT異常。 | 修改核心參數 |
修改核心參數 | 導致網路偶發不通。 | 修改核心參數到預設值 |
安裝防火牆軟體,例如Firewalld或者ufw等。 | 導致容器網路不通。 | 卸載防火牆軟體並重啟節點。 |
節點安全性群組配置未放通容器 CIDR的53連接埠UDP。 | 叢集內DNS無法正常工作。 | 按照官網推薦配置放通安全性群組。 |
修改或者刪除ACK添加的SLB的標籤。 | 導致SLB異常。 | 恢複SLB的標籤。 |
通過負載平衡控制台修改ACK管理的SLB的配置,包括SLB、監聽及虛擬伺服器組。 | 導致SLB異常。 | 恢複SLB的配置。 |
移除Service中複用已有SLB的Annotation,即 | 導致SLB異常。 | 在Service中添加複用已有SLB的Annotation。 說明 複用已有SLB的Service無法直接修改為使用自動建立SLB的Service。您需要重新建立Service。 |
通過負載平衡控制台刪除ACK建立的SLB。 | 可能導致叢集網路異常。 | 通過刪除Service的方式刪除SLB。刪除Service請參見刪除Service。 |
在安裝Nginx Ingress Controller組件的情況下手動刪除 kube-system命名空間下的 | Ingress Controller工作不正常,嚴重時產生崩潰。 | 使用以下YAML建立一個同名Service。
|
新增或修改ECS節點上DNS設定檔/etc/resolv.conf中 | 若配置的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,期間日誌採集能力全部丟失。 |