我有一个使用 GKE 在 Google Cloud 上运行的基础设施。今天,prometheus pod 被驱逐,并且无法恢复。描述 pod 后,我发现了这个错误。
Warning FailedMount 2m17s (x42 over 95m) kubelet, gke-production-default-pool-44cd6cd6-h9rw Unable to mount volumes for pod "prometheus-6d7c45fc6-5zd5d_kube-system(86c0258f-81ed-11e9-93ac-42010af00102)": timeout expired waiting for volumes to attach or mount for pod "kube-system"/"prometheus-6d7c45fc6-5zd5d". list of unmounted volumes=[storage]. list of unattached volumes=[config storage prometheus-token-875gs]
Warning FailedAttachVolume 69s (x47 over 96m) attachdetach-controller AttachVolume.Attach failed for volume "pvc-ff226d8b-3814-11e8-a63c-42010af001b0" : googleapi: Error 400: EXTERNAL_RESOURCE_NOT_FOUND - The resource '[email protected]' of type 'serviceAccount' was not found.
进一步调查证明,该服务账户在IAM服务中不存在。
根据谷歌文档据称,通过禁用并重新启用 api 服务可以解决问题。
问题是,这个操作很可能会删除 kubernetes 集群资源,这是我不希望发生的。
因此问题是:
- 还有其他方法可以解决这个问题吗? 如果有,怎么做?
- 这个操作真的会删除所有资源吗?
感谢大家花时间检查这个问题。
答案1
显然我可以通过以下方式解决自己的问题取消删除服务帐号。gcloud cli 不支持此操作,但 api 支持。发出的请求是curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" "https://iam.googleapis.com/v1/projects/-/serviceAccounts/114592978558849211522:undelete"
答案2
我可以使用此 gcloud 命令恢复我的服务帐户。
gcloud beta iam service-accounts undelete account-id
例如
gcloud beta iam service-accounts undelete 118324309064251493510
要获取 accountid,请参阅本文。