全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:集群检查项及修复方案

更新时间:Jul 05, 2024

ACK集群支持集群升级检查、集群迁移检查、组件检查和节点池检查。您可以在集群升级、迁移等操作前执行集群检查,确认集群是否符合要求,并获取异常检查项对应的修复方案。

集群检查项

集群升级检查

由于Kubernetes自身的复杂性,以及升级Kubernetess版本时引入的运行时变更、API废弃、特性变更等操作,集群升级存在较高的操作风险。为保障集群平稳升级,ACK引入了集群升级前置检查。集群升级时会首先触发集群升级检查,只有检查通过后才可以进行集群升级。

集群升级检查包含以下三类:

  • 集群资源:检查ACK集群相关的云资源,例如SLB、ECS、VPC等。

  • 集群组件:检查ACK集群配置、组件配置及应用配置,例如组件版本是否满足要求、应用是否使用过期API等。

  • 集群配置:检查ACK集群节点的相关配置。该检查需要在节点上创建Pod用于收集信息。

不同集群类型、Kubernetes版本以及容器运行时对应的集群检查项不同。下表仅供参考,请以控制台实际检查项为准。

类别

检查项

描述

集群资源

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托管,因此需要在迁移前检查组件是否存在异常。

不同集群类型、Kubernetes版本以及容器运行时对应的集群检查项不同。下表仅供参考,请以控制台实际检查项为准。

类别

检查项

描述

集群资源

APIServer 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组件是否存在异常。

组件检查

组件检查适用于组件升级场景。在组件升级前首先会触发组件升级检查,仅当组件升级检查通过后才能进行组件升级。

不同集群类型、Kubernetes版本以及容器运行时对应的集群检查项不同。下表仅供参考,请以控制台实际检查项为准。

类别

检查项

描述

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收集信息。

不同集群类型、Kubernetes版本以及容器运行时对应的集群检查项不同。下表仅供参考,请以控制台实际检查项为准。

类别

检查项

描述

集群资源

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文件是否符合预期。

异常检查项修复方案

异常检查项

修复方案

Aliyun_ARMS_CMonitor_Role权限策略不存在

为集群添加阿里云Prometheus监控授权策略。具体操作,请参见接入Kubernetes监控的手动添加ARMS和链路追踪权限策略内容。

Systemd版本过低

升级Systemd版本

组件版本过低

升级对应组件版本。具体操作,请参见管理组件

yum检查超时

执行以下命令,检查yum是否超时。默认超时时间为10s。

time if type yum&>/dev/null; then yum list yum; fi

API Service不可用

  1. 执行以下命令,查找不可用的API Service。

    kubectl -n kube-system get apiservices |grep -i false
  2. 确认异常API Service的用途。如果无需使用,执行以下命令,删除该API Service。

    重要

    误删除API Service会导致集群异常。如果您不清楚异常API Service用途,请联系技术支持。

    kubectl -n kube-system delete apiservices ${your-abnormal-apiservice-name}

节点存在使用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-apiserverkube-schedulerkube-controller-manager

ack

ACK组件:由ACK提供的组件,废弃API页面不会展示,ACK会引导您在组件管理页面通过升级组件来解决问题

说明
  • 您可以在容器服务管理控制台运维管理 > 组件管理页面升级组件,组件升级完成后的第二天,废弃API将不再展示。

  • 在某些情况下,CoreDNS组件可能会在1.24及以上版本的K8s集群中使用废弃API。如果检查结果中包含coredns,请参考为什么CoreDNS正在使用废弃的API?进行处理。

  • 废弃API仅作为提示信息,不影响您的升级流程。集群升级后,会将已经废弃的API资源替换为新的资源。建议您在集群升级后不要使用废弃的API创建资源,避免造成安全隐患。

metrics-server、nginx-ingress-controller、CoreDNS

opensource

开源组件:ACK会展示开源社区的部分开源组件,您需要自行判断是否升级

说明

废弃API仅作为提示信息,不影响您的升级流程。请您按需对组件进行升级,避免影响部分功能。

rancher、elasticsearch-operator等

unknown

未知来源:以上规则均无法匹配时,ACK会标记为未知来源,您需要自行判断是否升级,自行完成升级。

说明

废弃API仅作为提示信息,不影响您的升级流程。请您按需对组件进行升级,避免影响部分功能。

kubectl、agent、Go-http-client、okhttp

查看废弃API信息的具体方法如下:

  1. 集群升级页面,单击前置检查,然后单击查看详情

  2. 检查报告页面,点击查看详情

  3. 详情页会展示废弃的API、用户代理、类别、废弃的Kubernetes版本、最近一次访问的时间、最近一次访问的来源IP

image

image