文档

集群检查项及修复方案

更新时间:

容器服务ACK支持集群升级检查、集群迁移检查、组件检查和节点池检查。本文介绍集群检查项及异常检查项修复方案。

索引

集群检查项

集群升级检查

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

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

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

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

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

不同的类型、版本及运行时的集群检查项有所差别。下表仅供参考,请以实际检查项为准。

类别

检查项

描述

集群资源

APIServer 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组件版本是否符合要求。

Metric 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 Pro托管版。

集群迁移检查包含以下四类:

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

  • 集群组件:检查ACK集群中组件配置,例如是否存在不可用的API Service等。

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

  • 组件使用:迁移ACK专有版后,部分组件会转为ACK托管,因此需要在迁移前检查组件是否存在异常。

不同的类型、版本及运行时的集群迁移检查项有所差别,下表仅供参考,请以实际检查项为准。

类别

检查项

描述

集群资源

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

组件检查

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

不同的类型、版本及运行时的组件检查项有所差别,下表仅供参考,请以实际检查项为准。

类别

检查项

描述

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

不同的类型、版本及运行时的节点池检查项有所差别,下表仅供参考,请以实际检查项为准。

类别

检查项

描述

集群资源

APIServer 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

APIService不可用

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

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

    重要

    误删除APIService会导致集群异常。如果您不清楚异常APIService用途,请提交工单联系我们。

    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会在集群升级时由后台自动升级,检查页面不会展示,不需要您进行升级。

apiserver、scheduler、kube-controller-manager

ack

ACK组件:由ACK提供的组件,需要您自行判断升级时机,ACK会展示并引导您在组件管理页面升级组件。

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

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

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

metrics-server、nginx-ingress-controller、coredns

opensource

开源组件:社区的部分开源组件,ACK会展示清单,但您需要自行判断是否升级,自行完成升级。如果有遗漏,会显示在unknown分类中。

说明

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

rancher、elasticsearch-operator等

unknown

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

说明

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

kubectl、agent、Go-http-client、okhttp

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

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

  2. 检查报告页面,单击集群组件页签,然后单击待处理页签。

  3. 单击已弃用的Kubernetes API后面的按钮。1.jpg

  4. 在弹出框中单击已弃用的Kubernetes API,然后单击下方链接。2.jpg

  5. 已弃用的Kubernetes API页面,可查看具体的废弃API信息。3

  • 本页导读 (1)
文档反馈