本页面列出了 Cloud Run for Anthos 的已知问题。如需了解已知的安全漏洞,请参阅安全最佳做法。
您还可以在公开问题跟踪器中检查现有问题或添加新问题。
另请参阅问题排查页面,了解问题排查策略以及一些常见错误的解决方案。
由于缺少 MutatingWebhookConfiguration
,服务卡在 RevisionMissing
状态
由于缺少网络钩子配置,创建新服务或新服务修订版本可能会卡在“RevisionMissing”状态。您可以使用以下命令确认此问题
kubectl get mutatingwebhookconfiguration webhook.serving.knative.dev
此命令会返回
kmutatingwebhookconfigurations.admissionregistration.k8s.io "webhook.serving.knative.dev" not found`
临时解决方法
在下一个版本修复这个问题之前,您可以按以下方法解决此问题:
重启网络钩子 pod 以重新创建
MutatingWebhookConfiguration
:kubectl delete pod -n knative-serving -lapp=webhook kubectl get mutatingwebhookconfiguration --watch
重启控制器:
kubectl delete pod -n gke-system -listio=pilot kubectl delete pod -n knative-serving -lapp=controller
为存在
RevisionMissing
问题的每个服务部署新的修订版本:gcloud run services update SERVICE --update-labels client.knative.dev/nonce=""
将 SERVICE 替换为服务名称。
如果您在部署服务的新修订版本时遇到相同的问题,请根据需要重复上述步骤。
区域级集群
如果将区域级集群与 Cloud Run for Anthos 搭配使用,则在集群维护期间无法访问控制层面。
在此期间,Cloud Run for Anthos 可能无法按预期运行。在该集群中部署的服务
- 不在 Cloud Console 中显示或通过 gcloud CLI 显示
- 无法删除或更新
- 不会自动扩缩实例,但现有实例将继续处理新请求
为避免这些问题,您可以使用地区级集群,这种集群可确保高可用性控制平面。
系统不会通过命令行来强制实施默认内存限制
如果您使用命令行来部署服务,则必须添加 --memory
标志来为该服务设置内存限制。不添加 --memory
标志会允许服务占用运行该 pod 的节点上的所有可用内存,从而导致意外的副作用。
通过 Google Cloud Console 进行部署时,除非指定其他值,否则系统会使用默认值 256M
。
为避免为每个服务定义默认限制,您可以选择为在其中部署这些服务的命名空间定义默认内存限制。如需了解详情,请参阅 Kubernetes 文档中的配置默认内存限制。
默认 CPU 限制未启用
使用命令行或 Console 进行部署时,服务可使用的 CPU 量未定义。这允许服务使用其所运行的节点中的所有可用 CPU,因此可能导致意外的副作用。
若要解决此问题,您可以为使用 Cloud Run for Anthos 在其中部署服务的命名空间定义默认 CPU 限制。如需了解详情,请参阅 Kubernetes 文档中的配置默认 CPU 限制。
注意:默认情况下,使用 Cloud Run for Anthos 部署的服务会请求 400m
CPU,用于在集群节点上调度服务实例。
容器中读/写点的内容始终为空
如果您的容器在 /var/log
中创建文件或文件夹,例如 /var/log/nginx
,则在 Cloud Run for Anthos 中运行该容器时,这些文件或文件夹不会显示,因为 /var/log
上装载了空的读/写卷,这会隐藏底层容器的内容。
如果您的服务需要写入 /var/log
的子目录,则该服务必须在运行时确认该文件夹存在,然后才会写入该文件夹。它不会假定容器映像中存在该文件夹。
解决方法
如果您已将集群升级到 GKE 1.17 版并遇到服务部署问题,则必须删除由 DomainMapping 生成的 VirtualService,因为它不再与新控制器兼容。删除 VirtualService 后,控制器会重新创建兼容的 VirtualService 并解决服务部署问题。
运行以下命令来删除您的 VirtualService,其中 VirtualService 的名称与您的 DomainMappings 相同。例如:foo.example.com
运行以下命令以列出您的所有 DomainMappings:
kubectl get domainmapping --all-namespaces
运行以下命令以删除指定的 VirtualService:
kubectl delete vs your-domain-mapping-name -n your-domain-mapping-namespace
部署 Artifact Registry 中的私有容器映像
在部署私有容器映像时,Cloud Run for Anthos 与 Artifact Registry 之间的身份验证失败会导致一个已知的部署问题。为避免部署 Artifact Registry 中的私有映像时出现问题,您可以使用以下方法之一:
创建并使用
imagePullSecret
。通过imagePullSecret
,您可以使用私有容器映像的映像标记。如需了解详情,请参阅从其他容器注册表部署私有容器映像。
已升级到 0.20.0-gke.6
版本的集群上的配置错误
升级到版本 0.20.0-gke.6
的集群可能会收到以下错误之一。
更新该集群的 configmap 时,该集群可能会收到以下错误:
Error from server (InternalError): error when replacing "/tmp/file.yaml":
Internal error occurred: failed calling webhook "config.webhook.istio.networking.internal.knative.dev":
the server rejected our request for an unknown reason
如果 Pod 由于队列代理故障而无法启动,则集群可能会收到以下错误:
Startup probe failed: flag provided but not defined: -probe-timeout
如需解决这些错误,您必须运行以下命令来移除 0.20.0
中不再受支持的 validatingwebhookconfiguration
配置:
kubectl delete validatingwebhookconfiguration config.webhook.istio.networking.internal.knative.dev
移除不受支持的配置后,您可以继续更新集群的 configmap。
升级到 Cloud Run for Anthos 0.23.0-gke.9 后缺少指标
问题:将集群版本升级到 0.23.0-gke.9
后,缺少以下指标:Request count
、Request latencies
、Container instance count
可能的原因:Metric Collector
已停用。
要确定 Metric Collector
是否阻止收集指标,请执行以下操作:
通过运行以下命令,确保您的 Cloud Run for Anthos 的版本为
0.23.0-gke.9
:kubectl get deployment controller -n knative-serving -o jsonpath='{.metadata.labels.serving\.knative\.dev/release}'
通过运行以下命令来检查
Metric Collector
是否已停用:kubectl get cloudrun cloud-run -n cloud-run-system -o jsonpath='{.spec.metricscollector}'
如果结果不是
{enabled: true}
,则说明您的Metric Collector
已停用。如要启用
Metric Collector
,请运行以下命令之一:如果结果为空,请运行以下命令:
kubectl patch cloudrun cloud-run -n cloud-run-system --type='json' -p='[{"op": "test", "path": "/spec", "value": NULL}, {"op": "add", "path": "/spec", "value": {}}]' kubectl patch cloudrun cloud-run -n cloud-run-system --type='json' -p='[{"op": "test", "path": "/spec/metricscollector", "value": NULL}, {"op": "add", "path": "/spec/metricscollector", "value": {}}]' kubectl patch cloudrun cloud-run -n cloud-run-system --type='json' -p='[{"op": "add", "path": "/spec/metricscollector/enabled", "value": true}]'
如果结果为
{enabled: false}
,请运行以下命令:kubectl patch cloudrun cloud-run -n cloud-run-system --type='json' -p='[{"op": "replace", "path": "/spec/metricscollector/enabled", "value": true}]'
通过运行以下命令来验证是否已启用
Metric Collector
:kubectl get cloudrun cloud-run -n cloud-run-system -o jsonpath='{.spec.metricscollector}'