本页面可帮助您解决 Google Kubernetes Engine (GKE) 中由并发操作引起的错误。
本页面适用于想要了解部署失败(例如 Cluster is running incompatible operation
错误)原因的应用开发者。还适用于希望在集群或节点池级别诊断和解决这些并发操作错误的平台管理员和运维人员。如需详细了解我们在Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
了解并发操作错误
在 GKE 中,集群操作是指修改集群控制平面或其节点池状态的操作。这些操作由 GKE 管理,您可以出于维护目的发起这些操作,GKE 也可以出于维护目的发起这些操作。常见的集群操作包括:
- 创建或删除集群。
- 升级集群的控制平面版本。
- 创建、更新、删除节点池或调整其大小。
- 修改集群级设置,例如启用或停用功能。
- 由 GKE 启动的自动控制平面修复。
在集群上执行操作时,您可能会看到类似于以下内容的错误消息:
Cluster is running incompatible operation OPERATION_NAME
Cluster is currently being created, deleted, updated or repaired and cannot be updated
Operation OPERATION_NAME is currently ACTIONING cluster CLUSTER_NAME. Please wait and try again once it is done
这些错误可能包含以下值:
OPERATION_NAME
:已在集群上运行的操作的唯一 ID。您可以使用此名称跟踪会阻止新操作启动的现有操作的状态。ACTIONING
:正在对集群执行的操作。例如Creating
或Updating
。CLUSTER_NAME
:操作所针对的集群的名称。
发生这些错误是因为 GKE 限制了为防止发生冲突可同时运行的操作数量。一般来说,GKE 只允许同时运行一个集群级操作或每个节点池一个操作。GKE 还会执行自己的自动操作(例如控制平面升级),这些操作也会计入此限制,可能会暂时阻止您启动新任务。
解决并发操作错误
如果您收到一条错误消息,指出有另一项操作正在进行中,找到该任务并等待其完成:
如果您不知道阻塞操作的名称,请列出集群的所有进行中和等待中的操作:
gcloud container operations list \ --location=LOCATION \ --filter '(targetLink~/clusters/CLUSTER_NAME$ OR targetLink~/clusters/CLUSTER_NAME/) AND status!=DONE' \ --format json
替换以下内容:
LOCATION
:集群的 Compute Engine 区域或可用区(例如us-central1
或us-central1-a
),具体取决于集群是区域级还是可用区级。CLUSTER_NAME
:发生失败操作的集群的名称。输出类似于以下内容:
{ "name": "operation-0978307200000-00112233-4455-6677-8899-aabbccddeeff", "operationType": "UPDATE_CLUSTER", "selfLink": "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/operation-0978307200000-00112233-4455-6677-8899-aabbccddeeff", "startTime": "2001-01-01T00:00:00.000000000Z", "status": "RUNNING", "targetLink": "https://container.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_NAME/nodePools/NODE_POOL_NAME", "zone": "LOCATION" }
在输出中,查看每个操作的
name
字段。此值是阻止新操作启动的操作的名称。下一步中您需要用到该值。如需详细了解输出中的其他字段,请参阅
projects.locations.operations
的 API 文档。
等待操作完成:
gcloud container operations wait OPERATION_NAME \ --location=LOCATION
将
OPERATION_NAME
替换为错误消息或上一步中的阻塞操作的名称。此命令会主动监控操作,并在操作完成后退出。
当阻塞操作的状态为
DONE
时,重试导致错误的操作。
后续步骤
如果您在文档中找不到问题的解决方案,请参阅获取支持以获取进一步的帮助,包括以下主题的建议:
- 请与 Cloud Customer Care 联系,以提交支持请求。
- 通过在 StackOverflow 上提问并使用
google-kubernetes-engine
标记搜索类似问题,从社区获得支持。您还可以加入#kubernetes-engine
Slack 频道,以获得更多社区支持。 - 使用公开问题跟踪器提交 bug 或功能请求。