问题描述
配置:
- Google Kubernete 引擎 (GKE) 版本 - 1.18.12-gke.1210
- 节点数 - 2
- 节点配置 - 2 核 8 GB 内存机器,30 GB 硬盘
- 启用自动缩放
Eclipse che 高级配置:
server:
CHE_WORKSPACE_POOL_EXACT__SIZE: "60"
CHE_WORKSPACE_STORAGE_PREFERRED__TYPE: ephemeral
allowUserDefinedWorkspaceNamespaces: false
cheDebug: "false"
cheFlavor: che
cheHost: che-eclipse-che.domain.com
cheLogLevel: INFO
cheServerIngress: {}
cheServerRoute: {}
devfileRegistryIngress: {}
devfileRegistryRoute: {}
externalDevfileRegistry: false
externalPluginRegistry: false
gitSelfSignedCert: false
pluginRegistryIngress: {}
pluginRegistryRoute: {}
selfSignedCert: true
tlsSupport: true
useInternalClusterSVCNames: true
workspaceNamespaceDefault: all-che-workspace
storage:
preCreateSubPaths: true
pvcclaimsize: 128Gi
pvcStrategy: common
preferred_type: persistent
错误描述:
同时登录 10 个不同的用户,每次启动每个用户的 10 个工作区。 3 - 5 个用户能够成功启动工作区,对于剩余用户在安装卷中出现超时错误,一些用户继续加载工作区并且日志窗口中没有任何初始化。
错误截图:
无法运行工作区:“发生不可恢复的事件:'FailedMount'、'无法附加或装入卷:未装入的卷=[claim-che-workspace]、未附加的卷=[gitconfigvolume remote-endpoint che-workspace-token] -dmn68 workspacep72ony0ucs0pqa5c-sshprivatekeys che-ca-certs broker-config-volume5iwa24 ssshkeyconfigvolume claim-che-workspace che-jwtproxy-config-volume]: 等待条件超时','workspacep72ony0ucs0pqa4tcs0pqa4dgf4'6"6 >
无法运行工作区:“正在等待工作区‘workspaceo6i4zoqzs1xym88w’的Kubernetes环境‘默认’达到超时”
解决方法
尝试在调试模式下运行 Che Workspace。 见https://www.eclipse.org/che/docs/che-7/end-user-guide/investigating-failures-at-a-workspace-start-using-the-verbose-mode/ 它可能会为您提供有关问题所在的一些信息。
,问题中出现问题的最可能原因(我已设法重现)可能与所使用的存储配置有关。
引用文档:
使用 common
PVC 策略时,用户定义的 PVC 将被忽略,引用这些用户定义的 PVC 的卷将替换为引用公共 PVC 的卷。在此策略中,所有 Che 工作区都使用相同的 PVC。 当用户运行一个工作区时,它一次只绑定到集群中的一个节点。
-- Eclipse.org: Che: Docs: Configuring storage strategies: The common PVC strategy
默认情况下,当您使用 PVC
创建 GKE
时,您实际上是在创建一个 Persistent Disk
,它可以以 RWO
访问模式安装到单个节点。如果 workspace
被调度到 PVC
没有挂载到的节点上,创建过程将失败,您将收到以下消息:
Unable to attach or mount volumes: unmounted volumes=[claim-che-workspace],unattached volumes=[che-ca-certs che-workspace-token-5tb9b broker-config-volumeavmw4x claim-che-workspace workspacebgnsca7mkryv3s3m-sshprivatekeys ssshkeyconfigvolume gitconfigvolume]: timed out waiting for the condition
Failed to run the workspace: "Plugins installation process failed. Error: Unrecoverable event occurred: 'FailedMount','Unable to attach or mount volumes: unmounted volumes=[claim-che-workspace],unattached volumes=[che-ca-certs che-workspace-token-5tb9b broker-config-volumeavmw4x claim-che-workspace workspacebgnsca7mkryv3s3m-sshprivatekeys ssshkeyconfigvolume gitconfigvolume]: timed out waiting for the condition','workspacebgnsca7mkryv3s3m.che-plugin-broker'"
我认为你可以(未测试)避免这个问题:
- 使用
RWX
存储解决方案。 - 更改
unique
的存储配置。 - 使用单个节点。
要更深入地了解该问题,您可以在创建工作区时监控 Pods
的状态。它可以告诉您有关该过程的更多信息:
-
$ kubectl get pods -n kruk-che
:
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kruk-che workspace4pfd7goxamv8vvs4.maven-5d9c59746f-swfdd 5/5 Running 0 29m 10.4.0.58 gke-name-pool-9530 <none> <none>
kruk-che workspacebgnsca7mkryv3s3m.che-plugin-broker 0/1 ContainerCreating 0 105s <none> gke-name-pool-qhns <none> <none>
kruk-che workspacezo0l50kaa2zvm4lv.maven-8644fbf959-45xjd 5/5 Running 0 12m 10.4.0.62 gke-name-pool-9530 <none> <none>
在上面的示例中,您可以看到 Pods
处于 ContainerCreating
状态。您可以检查它们以获取有关其状态的更多信息,例如:
$ kubectl describe pod -n kruk-che workspacebgnsca7mkryv3s3m.che-plugin-broker
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 83s default-scheduler Successfully assigned kruk-che/workspacebgnsca7mkryv3s3m.che-plugin-broker to gke-name-pool-qhns
Warning FailedAttachVolume 83s attachdetach-controller Multi-Attach error for volume "pvc-869bc565-4dd1-4362-8d63-f3b1fde6f246" Volume is already used by pod(s) workspacezo0l50kaa2zvm4lv.maven-8644fbf959-45xjd,workspace4pfd7goxamv8vvs4.maven-5d9c59746f-swfdd
Warning FailedMount 10s kubelet Unable to attach or mount volumes: unmounted volumes=[claim-che-workspace],unattached volumes=[che-ca-certs che-workspace-token-5tb9b broker-config-volumeavmw4x claim-che-workspace workspacebgnsca7mkryv3s3m-sshprivatekeys ssshkeyconfigvolume gitconfigvolume]: timed out waiting for the condition
其他资源: