Cloud Run for Anthos 的已知问题

本页面列出了 Cloud Run for Anthos 的已知问题。如需了解已知的安全漏洞,请参阅安全最佳做法

您还可以在公开问题跟踪器中检查现有问题或添加新问题。

另请参阅问题排查页面,了解问题排查策略以及一些常见错误的解决方案。

由于缺少 MutatingWebhookConfiguration,服务卡在 RevisionMissing 状态

由于缺少网络钩子配置,创建新服务或新服务修订版本可能会卡在“RevisionMissing”状态。您可以使用以下命令确认此问题

kubectl get mutatingwebhookconfiguration webhook.serving.knative.dev

此命令会返回

kmutatingwebhookconfigurations.admissionregistration.k8s.io "webhook.serving.knative.dev" not found`

临时解决方法

在下一个版本修复这个问题之前,您可以按以下方法解决此问题:

  1. 重启网络钩子 pod 以重新创建 MutatingWebhookConfiguration

    kubectl delete pod -n knative-serving -lapp=webhook
    kubectl get mutatingwebhookconfiguration --watch
  2. 重启控制器:

    kubectl delete pod -n gke-system -listio=pilot
    kubectl delete pod -n knative-serving -lapp=controller
  3. 为存在 RevisionMissing 问题的每个服务部署新的修订版本:

    gcloud run services update SERVICE --update-labels client.knative.dev/nonce=""

    SERVICE 替换为服务名称。

  4. 如果您在部署服务的新修订版本时遇到相同的问题,请根据需要重复上述步骤。

区域级集群

如果将区域级集群与 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

  1. 运行以下命令以列出您的所有 DomainMappings:

    kubectl get domainmapping --all-namespaces
    
  2. 运行以下命令以删除指定的 VirtualService:

    kubectl delete vs your-domain-mapping-name -n your-domain-mapping-namespace
    

部署 Artifact Registry 中的私有容器映像

在部署私有容器映像时,Cloud Run for Anthos 与 Artifact Registry 之间的身份验证失败会导致一个已知的部署问题。为避免部署 Artifact Registry 中的私有映像时出现问题,您可以使用以下方法之一:

已升级到 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 countRequest latenciesContainer instance count

可能的原因:Metric Collector 已停用。

要确定 Metric Collector 是否阻止收集指标,请执行以下操作:

  1. 通过运行以下命令,确保您的 Cloud Run for Anthos 的版本为 0.23.0-gke.9

    kubectl get deployment controller -n knative-serving -o jsonpath='{.metadata.labels.serving\.knative\.dev/release}'
    
  2. 通过运行以下命令来检查 Metric Collector 是否已停用:

    kubectl get cloudrun cloud-run -n cloud-run-system -o jsonpath='{.spec.metricscollector}'
    

    如果结果不是 {enabled: true},则说明您的 Metric Collector 已停用。

  3. 如要启用 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}]'
      
  4. 通过运行以下命令来验证是否已启用 Metric Collector

    kubectl get cloudrun cloud-run -n cloud-run-system -o jsonpath='{.spec.metricscollector}'