ACK集群支持集群升级检查、集群迁移检查、组件检查和节点池检查。您可以在集群升级、迁移等操作前执行集群检查,确认集群是否符合要求,并获取异常检查项对应的修复方案。
集群检查项
集群升级检查
由于Kubernetes的复杂性,集群升级存在较高风险。为保障平稳升级,ACK引入了集群升级前置检查。只有检查通过后才可以进行集群升级。不同集群类型、Kubernetes版本及容器运行时的检查项不同,请以控制台实际检查项为准。
集群升级检查包含以下三类:
- 集群资源:检查ACK集群相关的云资源,例如SLB、ECS、VPC等。 
- 集群组件:检查ACK集群配置、组件配置及应用配置,例如组件版本是否满足要求、应用是否使用废弃API等。 
- 集群配置:检查ACK集群节点的相关配置。该检查需要在节点上创建Pod用于收集信息。 
| 类别 | 检查项 | 描述 | 
| 集群资源 | API Server SLB | SLB实例是否存在。 | 
| SLB实例状态是否正常。 | ||
| SLB监听(端口及协议)配置是否正常。 | ||
| SLB实例后端服务器组配置是否正常。 | ||
| SLB访问控制配置是否正确,若不存在,则直接通过。 | ||
| VPC | VPC实例是否存在。 | |
| VPC实例是否正常。 | ||
| vSwitch | 交换机是否存在。 | |
| 交换机是否正常。 | ||
| 交换机的可用IP数量大于等于2。 | ||
| ECS | ECS实例是否存在。 | |
| ECS实例是否正常。 | ||
| ECS安全组是否正常。 | ||
| ECS服务期是否正常。 | ||
| ECS实例类型是否符合要求。 | ||
| 云助手客户端是否正常。 | ||
| 集群组件 | Kube Proxy Master | 组件是否存在。 | 
| Kube Proxy Worker | 组件是否存在。 | |
| API Service | 是否存在不可用的API Service。 | |
| 集群实例 | 集群Master数量是否为3或5。 | |
| 集群组件 | Terway组件版本是否符合要求。 | |
| CoreDNS组件版本是否符合要求。 | ||
| cloud-controller-manager组件版本是否符合要求。 | ||
| Nginx Ingress Controller组件版本是否符合要求。 | ||
| ACK Virtual Node组件版本是否符合要求。 | ||
| Metrics Server组件版本是否符合要求。 | ||
| 节点 | 节点IP是否存在。 | |
| 节点是否可调度。 | ||
| 节点是否Ready。 | ||
| 节点操作系统是否支持升级。 | ||
| 节点可用Pod数量是否大于2。 | ||
| 废弃API | 集群中是否使用已废弃的API。 | |
| 集群配置 | iptables配置 | iptables配置是否正常。 | 
| 操作系统 | 操作系统是否支持升级。 | |
| yum | yum是否正常。 | |
| 磁盘 | 节点文件系统是否正常。 | |
| 是否有超过5%的节点剩余磁盘空间。 | ||
| Swap | 节点是否开启Swap。 | |
| NTP | 节点NTP是否正常。 | |
| Systemd | 节点Systemd版本是否大于systemd-219-67。 | |
| kubelet | kubelet配置是否符合预期。 | |
| 容器运行时 | Docker运行时或containerd运行时是否正常。 | |
| 内核配置 | 节点内核配置是否正常。 | |
| Manifest配置 | Manifest文件是否符合预期。 | 
集群迁移检查
集群迁移前会触发迁移前置检查,仅当迁移检查通过后才能进行集群迁移。适用于以下场景。
- 从ACK专有集群迁移至ACK托管集群Pro版。 
- 从ACK托管集群基础版迁移至ACK托管集群。 
集群迁移检查包含以下四类:
- 集群资源:检查ACK集群相关的云资源,例如SLB、ECS、VPC等。 
- 集群组件:检查ACK集群中组件配置,例如是否存在不可用的API Service等。 
- 集群配置:检查ACK集群节点的相关配置。该检查需要在节点上创建Pod收集信息。 
- 组件使用:ACK专有集群完成迁移后,部分组件会转为ACK托管,因此需要在迁移前检查组件是否存在异常。 
| 类别 | 检查项 | 描述 | 
| 集群资源 | API Server SLB | SLB实例是否存在。 | 
| SLB实例状态是否正常。 | ||
| SLB监听(端口及协议)配置是否正常。 | ||
| SLB实例后端服务器组配置是否正常。 | ||
| SLB访问控制配置是否正确。若不存在,则直接通过。 | ||
| VPC | VPC实例是否存在。 | |
| VPC实例是否正常。 | ||
| vSwitch | 交换机是否存在。 | |
| 交换机是否正常。 | ||
| 交换机的可用IP数量大于等于2。 | ||
| ECS | ECS实例是否存在。 | |
| ECS实例是否正常。 | ||
| ECS安全组是否正常。 | ||
| 云助手客户端是否正常。 | ||
| 集群组件 | Kube Proxy Master | 组件是否存在。 | 
| Kube Proxy Worker | 组件是否存在。 | |
| API Service | 是否存在不可用的API Service。 | |
| 集群实例 | 集群Master数量是否为3或5。 | |
| 节点 | 节点IP是否存在。 | |
| 节点是否可调度。 | ||
| 节点是否Ready。 | ||
| 节点操作系统是否支持升级。 | ||
| 节点可用Pod数量大于2。 | ||
| 集群配置 | 操作系统 | 操作系统是否支持升级。 | 
| yum | yum是否正常。 | |
| 组件使用 | cloud-controller-manager | cloud-controller-manager组件是否存在异常。 | 
组件检查
组件检查适用于组件升级场景。在组件升级前首先会触发组件升级检查,仅当组件升级检查通过后才能进行组件升级。
| 类别 | 检查项 | 描述 | 
| cloud-controller-manager | Addon_CCM | 升级该组件是否会导致SLB变更。 | 
| Component_Block_Version | 是否可以升级CCM版本。 | |
| csi-plugin | DaemonSet_Annotation | DaemonSet的注解是否符合预期。 | 
| Csi_Driver_Attributes | CSI Driver属性是否符合要求。 | |
| Node_Status_Ready | 集群节点是否Ready。 | |
| csi-provisioner | Stateful_Set_Exist | 是否为StatefulSet。 | 
| Deployment_Annotation | Deployment注解是否符合预期。 | |
| Storage_Class_Attributes | StorageClass属性是否符合要求。 | |
| Csi_Provisioner_Node_Count | Ready节点数量是否大于等于2。 | |
| terway-eniip | Systemd | 节点Systemd版本是否大于systemd-219-67。 | 
| nginx-ingress-controller | Deployment_Healthy | Nginx Ingress Deployment是否健康。 | 
| Deployment_Not_Under_HPA | Deployment是否配置HPA。 | |
| Deployment_Not_Modified | Deployment是否发生过变更。 | |
| Nginx_Ingress_Pod_Error_Log | Nginx是否存在错误日志。 | |
| LoadBalancer_Service_Healthy | Nginx Service是否健康。 | |
| Nginx_Ingress_Configuration | Ingress是否存在不兼容配置。 | |
| aliyun-acr-credential-helper | RamRole_Exist | 该组件是否对AliyunCSManagedAcrRole进行授权。 | 
| ack-cost-exporter | RamRole_Exist | 该组件是否对AliyunCSManagedCostRole进行授权。 | 
节点池检查
节点池检查适用于节点池升级场景。节点池升级时首先会触发节点池检查,仅当节点池检查通过后才能进行节点池升级。
节点池检查包含以下三类:
- 集群资源:检查ACK集群相关的云资源,例如SLB、VPC等。 
- 集群组件:检查ACK集群配置、节点配置及应用配置。 
- 集群配置:检查ACK集群节点的相关配置。该检查需要在节点上创建Pod收集信息。 
| 类别 | 检查项 | 描述 | 
| 集群资源 | API Server SLB | SLB实例是否存在。 | 
| SLB实例状态是否正常。 | ||
| SLB监听(端口及协议)配置是否正常。 | ||
| SLB实例后端服务器组配置是否正常。 | ||
| SLB访问控制配置是否正确,若不存在,则直接通过。 | ||
| VPC | VPC实例是否存在。 | |
| VPC实例是否正常。 | ||
| vSwitch | 交换机是否存在。 | |
| 交换机是否正常。 | ||
| 交换机的可用IP数量大于等于2。 | ||
| 集群组件 | API Service | 是否存在不可用的API Service。 | 
| 集群实例 | 集群Master数量是否为3或5。 | |
| 节点 | 节点是否Ready。 | |
| 节点可用Pod数量是否大于2。 | ||
| HostPath | 节点是否存在使用HostPath的Pod。 | |
| 集群配置 | iptables配置 | iptables配置是否正常。 | 
| 操作系统 | 操作系统是否支持升级。 | |
| yum | yum是否正常。 | |
| 磁盘 | 节点文件系统是否正常。 | |
| 节点剩余磁盘空间 | 是否有超过5%的节点剩余磁盘空间。 | |
| Swap | 节点是否开启Swap。 | |
| NTP | 节点NTP是否正常。 | |
| Systemd | 节点Systemd版本是否大于systemd-219-67。 | |
| kubelet | kubelet配置是否符合预期。 | |
| 容器运行时 | Docker运行时或containerd运行时是否正常。 | |
| 内核配置 | 节点内核配置是否正常。 | |
| Manifest配置 | Manifest文件是否符合预期。 | 
异常检查项修复方案
| 异常检查项 | 修复方案 | 
| Systemd版本过低 | |
| 组件版本过低 | 升级对应组件版本。具体操作,请参见管理组件。 | 
| yum检查超时 | 执行以下命令,检查yum是否超时。默认超时时间为10s。  | 
| API Service不可用 | 
 | 
| 节点存在使用HostPath的Pod | 在Node替盘升级时,如果Pod使用了HostPath将容器目录挂载在宿主机上,则存在数据丢失的风险。您需要对该Pod的挂载目录进行检查。如果没有影响则可以继续执行升级。检查结果仅作为提示信息。 | 
| 集群中存在废弃API | 判断废弃API的来源,对废弃API采取对应处理措施。具体操作,请参见废弃API说明。 | 
废弃API说明
Kubernetes 1.20及之后版本的集群升级前检查时,支持检查废弃API信息。在检查结果的实例列表中可以看到集群使用的废弃API。
例如从Kubernetes 1.20版本升级至Kubernetes 1.22版本时,系统会扫描过去一天的审计日志,检查1.20版本集群中是否使用了废弃API。
- 如果1.20版本集群中使用了废弃API,检查结果不会阻塞升级流程,仅作为提示信息。 
- 如果集群在1.22版本中继续使用废弃API,可能会有安全隐患,请自行判定对业务的影响。 
废弃API根据请求来源(User Agent)分为以下四类,建议在升级前,通过以下表格中的类别判断废弃API的来源,对废弃API采取对应处理措施。
| 类别 | 处理建议 | 举例 | 
| core | Kubernetes核心组件:ACK会在集群升级时由后台自动升级,检查页面不会展示,不需要您进行升级。 | kube-apiserver、kube-scheduler、kube-controller-manager | 
| ack | ACK组件:由ACK提供的组件,废弃API页面不会展示,ACK会引导您在组件管理页面通过升级组件来解决问题, 说明  
 | metrics-server、nginx-ingress-controller、CoreDNS | 
| opensource | 开源组件:ACK会展示开源社区的部分开源组件,您需要自行判断是否升级。 说明  废弃API仅作为提示信息,不影响您的升级流程。请您按需对组件进行升级,避免影响部分功能。 | rancher、elasticsearch-operator等 | 
| unknown | 未知来源:以上规则均无法匹配时,ACK会标记为未知来源,您需要自行判断是否升级,自行完成升级。 说明  废弃API仅作为提示信息,不影响您的升级流程。请您按需对组件进行升级,避免影响部分功能。 | kubectl、agent、Go-http-client、okhttp | 
查看废弃API信息的具体方法如下:
- 在集群升级页面,单击前置检查,然后单击查看详情。 
- 在检查报告页面,点击查看详情。 
- 详情页会展示废弃的API、用户代理、类别、废弃的Kubernetes版本、最近一次访问的时间、最近一次访问的来源IP。 

