阿里云容器服務Kubernetes版(簡稱容器服務ACK)提供容器服務相關的技術架構以及核心組件的托管服務,對于非托管組件以及運行在ACK集群中的應用,不當操作可能會導致業務故障。為了更好地預估和避免相關的操作風險,在使用容器服務ACK前,請認真閱讀本文中的建議與注意事項。
索引
信息項 | 相關文檔 |
使用須知
數據面組件相關
數據面組件指運行在客戶ECS服務器上的系統組件,例如CoreDNS、Ingress、kube-proxy、terway、kubelet等。由于數據面組件運行在客戶ECS服務器上,因此數據面組件運行的穩定性需要阿里云容器服務與客戶共同維護。
阿里云容器服務ACK對數據面組件提供以下支持:
提供組件的參數化設置管理、定期功能優化、BugFix、CVE補丁等功能,并給出相應的指導文檔。
提供組件的監控與報警等可觀測能力的建設,部分核心組件會提供組件日志,并通過SLS透出給客戶。
提供配置最佳實踐和建議,容器服務將根據集群規模大小給出組件配置建議。
提供組件的定期巡檢能力和一定的報警通知能力,檢查項包括但不限定于:組件版本、組件配置、組件負載、組件部署分布拓撲、組件實例數等。
您在使用數據面組件時,請遵循以下建議:
使用最新的組件版本。組件經常會發布新版本以修復BUG或提供新特性。您需要在新版本的組件發布后,在保證業務穩定的前提下選擇合適的時機,遵循組件升級指導文檔中的說明進行升級操作。更多信息,請參見組件概述。
請在容器服務ACK的報警中心中設置聯系人的郵箱地址、手機號碼,并設置相應的報警信息接收方式,阿里云將通過這些渠道推送容器服務的報警信息、產品公告等。更多信息,請參見容器服務報警管理和消息接收管理設置。
在您收到組件穩定性風險報告后,請及時按照相關指引進行處理,消除安全隱患。
當您在使用數據面組件時,請通過容器服務控制臺集群管理頁面 的方式或者OpenAPI的方式配置組件的自定義參數。通過其他渠道修改組件配置可能會導致組件功能異常。更多信息,請參見管理組件。
請勿直接使用IaaS層產品的OpenAPI來變更組件的運行環境,包括但不限定于使用ECS的OpenAPI更改ECS運行狀態、修改Worker節點的安全組配置、更改Worker節點的網絡配置以及通過負載均衡的OpenAPI修改SLB配置等,擅自改動IaaS層資源可能會導致數據面組件異常。
部分數據面組件受上游社區版組件影響,可能存在Bug或漏洞,請注意及時升級組件,以避免開源組件Bug或漏洞導致您的業務受損。
集群升級相關
請務必通過容器服務ACK的集群升級功能升級集群的K8s版本,自行升級K8s版本可能導致ACK集群的穩定性和兼容性問題。詳細操作,請參見升級集群和獨立升級集群控制面和節點池。
阿里云容器服務ACK對集群升級提供以下支持:
提供集群K8s新版本的升級功能。
提供K8s新版本升級的前置檢查功能,確保集群當前狀態支持升級。
提供K8s新版本的版本說明文檔,包括相較于前版本的變化。
提示升級到K8s新版本時因資源變化可能會發生的風險。
您在使用集群升級功能時,請遵循以下建議:
在集群升級前運行前置檢查,并根據前置檢查結果逐一修復集群升級的阻塞點。
詳細閱讀K8s新版本的版本說明文檔,并根據ACK所提示的升級風險確認集群和業務的狀態,自行判斷升級風險。詳細信息,請參見Kubernetes版本發布概覽。
由于集群升級不提供回滾功能,請做好充分的升級計劃和預后備份。
根據容器服務ACK的版本支持機制,在當前版本的支持周期內及時升級集群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不提供賠付。
針對阿里云容器服務Kubernetes版服務等級協議下“除外情形”中列舉的情況和原因,ACK Serverless不提供賠付。
注冊集群相關
通過容器服務管理控制臺的注冊集群功能接入外部Kubernetes集群時,請確保外部集群與阿里云之間的網絡穩定性。
容器服務ACK提供外部Kubernetes集群的注冊接入,但無法管控外部集群自身的穩定性以及不當操作。因此當您通過注冊集群配置外部集群節點的Label、Annotation、Tag等信息時,可能導致應用運行異常,請謹慎操作。
應用目錄相關
為了豐富Kubernetes應用,容器服務ACK的應用市場提供了應用目錄,它們是基于開源軟件做了適配和二次開發的應用。ACK無法管控開源軟件本身產生的缺陷,請知曉此風險。更多信息,請參見應用市場。
高危操作
在使用容器服務ACK過程中相關功能模塊存在高危操作,可能會對業務穩定性造成較大影響。在使用前請認真了解以下高危操作及其影響。
集群相關高危操作
分類 | 高危操作 | 影響 | 恢復方案 |
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移除節點。 | 節點池節點數顯示和實際不符。 | 通過容器服務管理控制臺或者節點池相關API移除指定節點(參見移除節點)或者修改節點池點數進行望節點數縮容(參見創建節點池)。 |
直接釋放ECS實例。 | 可能導致節點池詳情頁面顯示異常。開啟期望節點數的節點池為維持期望節點數,將會根據相應節點池配置自動擴容到期望節點數。 | 不可恢復。正確做法是通過容器服務管理控制臺或者節點池相關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,期間日志采集能力全部丟失。 |