Cloud Run for Anthos의 알려진 문제

이 페이지에는 Cloud Run for Anthos의 알려진 문제가 나와 있습니다. 알려진 보안 취약점은 보안 권장사항을 참조하세요.

공개 Issue Tracker에서도 기존 문제를 확인하거나 새로운 문제를 개설할 수 있습니다.

또한 몇 가지 일반적인 오류의 해결 방법과 문제 해결 전략은 문제 해결 페이지를 참조하세요.

누락된 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의 이름은 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 count, Request latencies, Container 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}'