集群檢查項及修復(fù)方案
ACK集群支持集群升級檢查、集群遷移檢查、組件檢查和節(jié)點(diǎn)池檢查。您可以在集群升級、遷移等操作前執(zhí)行集群檢查,確認(rèn)集群是否符合要求,并獲取異常檢查項對應(yīng)的修復(fù)方案。
集群檢查項
集群升級檢查
由于Kubernetes自身的復(fù)雜性,以及升級Kubernetess版本時引入的運(yùn)行時變更、API廢棄、特性變更等操作,集群升級存在較高的操作風(fēng)險。為保障集群平穩(wěn)升級,ACK引入了集群升級前置檢查。集群升級時會首先觸發(fā)集群升級檢查,只有檢查通過后才可以進(jìn)行集群升級。
集群升級檢查包含以下三類:
集群資源:檢查ACK集群相關(guān)的云資源,例如SLB、ECS、VPC等。
集群組件:檢查ACK集群配置、組件配置及應(yīng)用配置,例如組件版本是否滿足要求、應(yīng)用是否使用過期API等。
集群配置:檢查ACK集群節(jié)點(diǎn)的相關(guān)配置。該檢查需要在節(jié)點(diǎn)上創(chuàng)建Pod用于收集信息。
不同集群類型、Kubernetes版本以及容器運(yùn)行時對應(yīng)的集群檢查項不同。下表僅供參考,請以控制臺實際檢查項為準(zhǔn)。
類別 | 檢查項 | 描述 |
集群資源 | API Server SLB | SLB實例是否存在。 |
SLB實例狀態(tài)是否正常。 | ||
SLB監(jiān)聽(端口及協(xié)議)配置是否正常。 | ||
SLB實例后端服務(wù)器組配置是否正常。 | ||
SLB訪問控制配置是否正確,若不存在,則直接通過。 | ||
VPC | VPC實例是否存在。 | |
VPC實例是否正常。 | ||
vSwitch | 交換機(jī)是否存在。 | |
交換機(jī)是否正常。 | ||
交換機(jī)的可用IP數(shù)量大于等于2。 | ||
ECS | ECS實例是否存在。 | |
ECS實例是否正常。 | ||
ECS安全組是否正常。 | ||
ECS服務(wù)期是否正常。 | ||
ECS實例類型是否符合要求。 | ||
云助手客戶端是否正常。 | ||
集群組件 | Kube Proxy Master | 組件是否存在。 |
Kube Proxy Worker | 組件是否存在。 | |
API Service | 是否存在不可用的API Service。 | |
集群實例 | 集群Master數(shù)量是否為3或5。 | |
集群組件 | Terway組件版本是否符合要求。 | |
CoreDNS組件版本是否符合要求。 | ||
cloud-controller-manager組件版本是否符合要求。 | ||
Nginx Ingress Controller組件版本是否符合要求。 | ||
ACK Virtual Node組件版本是否符合要求。 | ||
Metrics Server組件版本是否符合要求。 | ||
節(jié)點(diǎn) | 節(jié)點(diǎn)IP是否存在。 | |
節(jié)點(diǎn)是否可調(diào)度。 | ||
節(jié)點(diǎn)是否Ready。 | ||
節(jié)點(diǎn)操作系統(tǒng)是否支持升級。 | ||
節(jié)點(diǎn)可用Pod數(shù)量是否大于2。 | ||
廢棄API | 集群中是否使用已廢棄的API。 | |
集群配置 | iptables配置 | iptables配置是否正常。 |
操作系統(tǒng) | 操作系統(tǒng)是否支持升級。 | |
yum | yum是否正常。 | |
磁盤 | 節(jié)點(diǎn)文件系統(tǒng)是否正常。 | |
是否有超過5%的節(jié)點(diǎn)剩余磁盤空間。 | ||
Swap | 節(jié)點(diǎn)是否開啟Swap。 | |
NTP | 節(jié)點(diǎn)NTP是否正常。 | |
Systemd | 節(jié)點(diǎn)Systemd版本是否大于systemd-219-67。 | |
kubelet | kubelet配置是否符合預(yù)期。 | |
容器運(yùn)行時 | Docker運(yùn)行時或containerd運(yùn)行時是否正常。 | |
內(nèi)核配置 | 節(jié)點(diǎn)內(nèi)核配置是否正常。 | |
Manifest配置 | Manifest文件是否符合預(yù)期。 |
集群遷移檢查
集群遷移前會觸發(fā)遷移前置檢查,僅當(dāng)遷移檢查通過后才能進(jìn)行集群遷移。適用于以下場景。
從ACK專有集群遷移至ACK集群Pro版。
從ACK集群基礎(chǔ)版遷移至ACK托管集群。
集群遷移檢查包含以下四類:
集群資源:檢查ACK集群相關(guān)的云資源,例如SLB、ECS、VPC等。
集群組件:檢查ACK集群中組件配置,例如是否存在不可用的API Service等。
集群配置:檢查ACK集群節(jié)點(diǎn)的相關(guān)配置。該檢查需要在節(jié)點(diǎn)上創(chuàng)建Pod收集信息。
組件使用:ACK專有集群完成遷移后,部分組件會轉(zhuǎn)為ACK托管,因此需要在遷移前檢查組件是否存在異常。
不同集群類型、Kubernetes版本以及容器運(yùn)行時對應(yīng)的集群檢查項不同。下表僅供參考,請以控制臺實際檢查項為準(zhǔn)。
類別 | 檢查項 | 描述 |
集群資源 | APIServer SLB | SLB實例是否存在。 |
SLB實例狀態(tài)是否正常。 | ||
SLB監(jiān)聽(端口及協(xié)議)配置是否正常。 | ||
SLB實例后端服務(wù)器組配置是否正常。 | ||
SLB訪問控制配置是否正確。若不存在,則直接通過。 | ||
VPC | VPC實例是否存在。 | |
VPC實例是否正常。 | ||
vSwitch | 交換機(jī)是否存在。 | |
交換機(jī)是否正常。 | ||
交換機(jī)的可用IP數(shù)量大于等于2。 | ||
ECS | ECS實例是否存在。 | |
ECS實例是否正常。 | ||
ECS安全組是否正常。 | ||
云助手客戶端是否正常。 | ||
集群組件 | Kube Proxy Master | 組件是否存在。 |
Kube Proxy Worker | 組件是否存在。 | |
API Service | 是否存在不可用的API Service。 | |
集群實例 | 集群Master數(shù)量是否為3或5。 | |
節(jié)點(diǎn) | 節(jié)點(diǎn)IP是否存在。 | |
節(jié)點(diǎn)是否可調(diào)度。 | ||
節(jié)點(diǎn)是否Ready。 | ||
節(jié)點(diǎn)操作系統(tǒng)是否支持升級。 | ||
節(jié)點(diǎn)可用Pod數(shù)量大于2。 | ||
集群配置 | 操作系統(tǒng) | 操作系統(tǒng)是否支持升級。 |
yum | yum是否正常。 | |
組件使用 | cloud-controller-manager | cloud-controller-manager組件是否存在異常。 |
組件檢查
組件檢查適用于組件升級場景。在組件升級前首先會觸發(fā)組件升級檢查,僅當(dāng)組件升級檢查通過后才能進(jìn)行組件升級。
不同集群類型、Kubernetes版本以及容器運(yùn)行時對應(yīng)的集群檢查項不同。下表僅供參考,請以控制臺實際檢查項為準(zhǔn)。
類別 | 檢查項 | 描述 |
cloud-controller-manager | Addon_CCM | 升級該組件是否會導(dǎo)致SLB變更。 |
Component_Block_Version | 是否可以升級CCM版本。 | |
csi-plugin | DaemonSet_Annotation | DaemonSet的注解是否符合預(yù)期。 |
Csi_Driver_Attributes | CSI Driver屬性是否符合要求。 | |
Node_Status_Ready | 集群節(jié)點(diǎn)是否Ready。 | |
csi-provisioner | Stateful_Set_Exist | 是否為StatefulSet。 |
Deployment_Annotation | Deployment注解是否符合預(yù)期。 | |
Storage_Class_Attributes | StorageClass屬性是否符合要求。 | |
Csi_Provisioner_Node_Count | Ready節(jié)點(diǎn)數(shù)量需要是否大于等于2。 | |
terway-eniip | Systemd | 節(jié)點(diǎn)Systemd版本是否大于systemd-219-67。 |
nginx-ingress-controller | Deployment_Healthy | Nginx Ingress Deployment是否健康。 |
Deployment_Not_Under_HPA | Deployment是否配置HPA。 | |
Deployment_Not_Modified | Deployment是否發(fā)生過變更。 | |
Nginx_Ingress_Pod_Error_Log | Nginx是否存在錯誤日志。 | |
LoadBalancer_Service_Healthy | Nginx Service是否健康。 | |
Nginx_Ingress_Configuration | Ingress是否存在不兼容配置。 | |
aliyun-acr-credential-helper | RamRole_Exist | 該組件是否對AliyunCSManagedAcrRole進(jìn)行授權(quán)。 |
ack-cost-exporter | RamRole_Exist | 該組件是否對AliyunCSManagedCostRole進(jìn)行授權(quán)。 |
節(jié)點(diǎn)池檢查
節(jié)點(diǎn)池檢查適用于節(jié)點(diǎn)池升級場景。節(jié)點(diǎn)池升級時首先會觸發(fā)節(jié)點(diǎn)池檢查,僅當(dāng)節(jié)點(diǎn)池檢查通過后才能進(jìn)行節(jié)點(diǎn)池升級。
節(jié)點(diǎn)池檢查包含以下三類:
集群資源:檢查ACK集群相關(guān)的云資源,例如SLB、VPC等。
集群組件:檢查ACK集群配置、節(jié)點(diǎn)配置及應(yīng)用配置。
集群配置:檢查ACK集群節(jié)點(diǎn)的相關(guān)配置。該檢查需要在節(jié)點(diǎn)上創(chuàng)建Pod收集信息。
不同集群類型、Kubernetes版本以及容器運(yùn)行時對應(yīng)的集群檢查項不同。下表僅供參考,請以控制臺實際檢查項為準(zhǔn)。
類別 | 檢查項 | 描述 |
集群資源 | API Server SLB | SLB實例是否存在。 |
SLB實例狀態(tài)是否正常。 | ||
SLB監(jiān)聽(端口及協(xié)議)配置是否正常。 | ||
SLB實例后端服務(wù)器組配置是否正常。 | ||
SLB訪問控制配置是否正確,若不存在,則直接通過。 | ||
VPC | VPC實例是否存在。 | |
VPC實例是否正常。 | ||
vSwitch | 交換機(jī)是否存在。 | |
交換機(jī)是否正常。 | ||
交換機(jī)的可用IP數(shù)量大于等于2。 | ||
集群組件 | API Service | 是否存在不可用的API Service。 |
集群實例 | 集群Master數(shù)量是否為3或5。 | |
節(jié)點(diǎn) | 節(jié)點(diǎn)是否Ready。 | |
節(jié)點(diǎn)可用Pod數(shù)量是否大于2。 | ||
HostPath | 節(jié)點(diǎn)是否存在使用HostPath的Pod。 | |
集群配置 | iptables配置 | iptables配置是否正常。 |
操作系統(tǒng) | 操作系統(tǒng)是否支持升級。 | |
yum | yum是否正常。 | |
磁盤 | 節(jié)點(diǎn)文件系統(tǒng)是否正常。 | |
節(jié)點(diǎn)剩余磁盤空間 | 是否有超過5%的節(jié)點(diǎn)剩余磁盤空間。 | |
Swap | 節(jié)點(diǎn)是否開啟Swap。 | |
NTP | 節(jié)點(diǎn)NTP是否正常。 | |
Systemd | 節(jié)點(diǎn)Systemd版本是否大于systemd-219-67。 | |
kubelet | kubelet配置是否符合預(yù)期。 | |
容器運(yùn)行時 | Docker運(yùn)行時或containerd運(yùn)行時是否正常。 | |
內(nèi)核配置 | 節(jié)點(diǎn)內(nèi)核配置是否正常。 | |
Manifest配置 | Manifest文件是否符合預(yù)期。 |
異常檢查項修復(fù)方案
異常檢查項 | 修復(fù)方案 |
Aliyun_ARMS_CMonitor_Role權(quán)限策略不存在 | 為集群添加阿里云Prometheus監(jiān)控授權(quán)策略。具體操作,請參見接入Kubernetes監(jiān)控的手動添加ARMS和鏈路追蹤權(quán)限策略內(nèi)容。 |
Systemd版本過低 | |
組件版本過低 | 升級對應(yīng)組件版本。具體操作,請參見管理組件。 |
yum檢查超時 | 執(zhí)行以下命令,檢查yum是否超時。默認(rèn)超時時間為10s。
|
API Service不可用 |
|
節(jié)點(diǎn)存在使用HostPath的Pod | 在Node替盤升級時,如果Pod使用了HostPath將容器目錄掛載在宿主機(jī)上,則存在數(shù)據(jù)丟失的風(fēng)險。您需要對該P(yáng)od的掛載目錄進(jìn)行檢查。如果沒有影響則可以繼續(xù)執(zhí)行升級。檢查結(jié)果僅作為提示信息。 |
集群中存在廢棄API | 判斷廢棄API的來源,對廢棄API采取對應(yīng)處理措施。具體操作,請參見廢棄API說明。 |
廢棄API說明
Kubernetes 1.20及之后版本的集群升級前檢查時,支持檢查廢棄API信息。在檢查結(jié)果的實例列表中可以看到集群使用的廢棄API。
例如從Kubernetes 1.20版本升級至Kubernetes 1.22版本時,系統(tǒng)會掃描過去一天的審計日志,檢查1.20版本集群中是否使用了廢棄API。
如果1.20版本集群中使用了廢棄API,檢查結(jié)果不會阻塞升級流程,僅作為提示信息
如果集群在1.22版本中繼續(xù)使用廢棄API,可能會有安全隱患,請自行判定對業(yè)務(wù)的影響。
廢棄API根據(jù)請求來源(User Agent)分為以下四類,建議在升級前,通過以下表格中的類別判斷廢棄API的來源,對廢棄API采取對應(yīng)處理措施。
類別 | 處理建議 | 舉例 |
core | Kubernetes核心組件:ACK會在集群升級時由后臺自動升級,檢查頁面不會展示,不需要您進(jìn)行升級。 | kube-apiserver、kube-scheduler、kube-controller-manager |
ack | ACK組件:由ACK提供的組件,廢棄API頁面不會展示,ACK會引導(dǎo)您在組件管理頁面通過升級組件來解決問題 說明
| metrics-server、nginx-ingress-controller、CoreDNS |
opensource | 開源組件:ACK會展示開源社區(qū)的部分開源組件,您需要自行判斷是否升級 說明 廢棄API僅作為提示信息,不影響您的升級流程。請您按需對組件進(jìn)行升級,避免影響部分功能。 | rancher、elasticsearch-operator等 |
unknown | 未知來源:以上規(guī)則均無法匹配時,ACK會標(biāo)記為未知來源,您需要自行判斷是否升級,自行完成升級。 說明 廢棄API僅作為提示信息,不影響您的升級流程。請您按需對組件進(jìn)行升級,避免影響部分功能。 | kubectl、agent、Go-http-client、okhttp |
查看廢棄API信息的具體方法如下:
在集群升級頁面,單擊前置檢查,然后單擊查看詳情。
在檢查報告頁面,點(diǎn)擊查看詳情
詳情頁會展示廢棄的API、用戶代理、類別、廢棄的Kubernetes版本、最近一次訪問的時間、最近一次訪問的來源IP