Apigee 및 Apigee Hybrid 문서입니다.
Apigee Edge 문서 보기
증상
Apigee Hybrid UI에서 활성 런타임 포드 없음 경고가 표시되면서 API 프록시 배포가 실패합니다.
오류 메시지
API 프록시 페이지의 ENVIRONMENT: REVISION_NUMBER에서 배포 문제 오류 메시지 옆에 있는 세부정보 대화상자에 활성 런타임 포드 없음 경고가 표시됩니다.
이 문제는 UI의 다른 리소스 페이지에서 다른 오류로 나타날 수 있습니다. 다음은 오류 메시지의 예시입니다.
Hybrid UI 오류 메시지 #1: Datastore 오류
다음과 같이 Hybrid UI의 API 제품 및 앱 페이지에서 Datastore 오류가 발생할 수 있습니다.
Hybrid UI 오류 메시지 #2: 내부 서버 오류
다음과 같이 UI의 개발자 페이지에서 내부 서버 오류가 발생할 수 있습니다.
kubectl 명령어 결과
kubectl get pods
명령어 결과에서 apiege-mart
, apigee-runtime
, apigee-
synchronizer
포드 상태가 CrashLoopBackOff
로 변경될 수 있습니다.
구성요소 로그 오류 메시지
Apigee Hybrid 출시 버전 1.4.0 이상의 apigee-runtime
포드 로그에서 다음과 같은 활성 프로브 실패 오류가 발생합니다.
{"timestamp":"1621575431454","level":"ERROR","thread":"qtp365724939-205","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Error occurred : probe failed Probe cps-datastore- connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}\n\n\tcom.apigee.probe.ProbeAPI.getResponse(ProbeAPI.java:66)\n\tcom.apigee.probe.ProbeAPI.getLiv eStatus(ProbeAPI.java:55)\n\tsun.reflect.GeneratedMethodAccessor52.invoke(Unknown Source)\n\tsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\t ","context":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"} {"timestamp":"1621575431454","level":"ERROR","thread":"qtp365724939-205","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Returning error response : ErrorResponse{errorCode = probe.ProbeRunError, errorMessage = probe failed Probe cps-datastore-connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}}","context":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"}
Apigee Hybrid 출시 버전 1.4.0 이상의 apigee-synchronizer
포드 로그에서 다음과 같은 Cannot build a cluster without contact points
오류가 발생합니다.
{"timestamp":"1621575636434","level":"ERROR","thread":"main","logger":"KERNEL.DEPLOYMENT","message": "ServiceDeployer.deploy() : Got a life cycle exception while starting service [SyncService, Cannot build a cluster without contact points] : {}","context":"apigee-service- logs","exception":"java.lang.IllegalArgumentException: Cannot build a cluster without contact points\n\tat com.datastax.driver.core.Cluster.checkNotEmpty(Cluster.java:134)\n\tat com.datastax.driver.core.Cluster.<init>(Cluster.java:127)\n\tat com.datastax.driver.core.Cluster.buildFrom(Cluster.java:193)\n\tat com.datastax.driver.core.Cluster$Builder.build(Cluster.java:1350)\n\tat io.apigee.persistence.PersistenceContext.newCluster(PersistenceContext.java:214)\n\tat io.apigee.persistence.PersistenceContext.<init>(PersistenceContext.java:48)\n\tat io.apigee.persistence.ApplicationContext.<init>(ApplicationContext.java:19)\n\tat io.apigee.runtimeconfig.service.RuntimeConfigServiceImpl.<init>(RuntimeConfigServiceImpl.java:75) \n\tat io.apigee.runtimeconfig.service.RuntimeConfigServiceFactory.newInstance(RuntimeConfigServiceFactory. java:99)\n\tat io.apigee.common.service.AbstractServiceFactory.initializeService(AbstractServiceFactory.java:301)\n \tat ...","severity":"ERROR","class":"com.apigee.kernel.service.deployment.ServiceDeployer","method":"sta rtService"}
Apigee Hybrid 출시 버전 1.4.0 이상의 apigee-mart
포드 로그에서 다음과 같은 활성 프로브 실패 오류가 발생합니다.
{"timestamp":"1621576757592","level":"ERROR","thread":"qtp991916558-144","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Error occurred : probe failed Probe cps-datastore- connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}\n\n\tcom.apigee.probe.ProbeAPI.getResponse(ProbeAPI.java:66)\n\tcom.apigee.probe.ProbeAPI.getLiv eStatus(ProbeAPI.java:55)\n\tsun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\t","conte xt":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"} {"timestamp":"1621576757593","level":"ERROR","thread":"qtp991916558-144","mdc":{"targetpath":"/v1/pr obes/live"},"logger":"REST","message":"Returning error response : ErrorResponse{errorCode = probe.ProbeRunError, errorMessage = probe failed Probe cps-datastore-connectivity-liveliness-probe failed due to com.apigee.probe.model.ProbeFailedException{ code = cps.common.datastoreConnectionNotHealthy, message = Datastore connection not healthy, associated contexts = []}}","context":"apigee-service- logs","severity":"ERROR","class":"com.apigee.rest.framework.container.ExceptionMapper","method":"toR esponse"}
활성 런타임 포드 없음 오류 정보
Apigee Hybrid 1.4.0 출시 버전에서 Cassandra 포드 상태를 확인하도록 apigee-runtime
및 apigee-mart
포드에 활성 프로브 기능이 추가되었습니다. 모든 Cassandra 포드를 사용할 수 없게 되면 apigee-runtime
및 apigee-mart
포드의 활성 프로브가 실패합니다. 따라서 apigee-runtime
및 apigee-mart
포드가 CrashLoopBackOff
상태가 되어 No active runtime pods
경고가 표시되면서 API 프록시 배포가 실패합니다.
Cassandra 포드를 사용할 수 없으므로 apigee-synchronizer
포드도 CrashLoopBackOff
상태로 전환됩니다.
가능한 원인
이 오류의 가능한 원인은 다음과 같습니다.
원인 | 설명 |
---|---|
Cassandra 포드가 다운됨 | Cassandra 포드가 다운되었습니다. 따라서 apigee-runtime 포드는 Cassandra 데이터베이스와 통신할 수 없습니다. |
포드 하나만으로 구성된 Cassandra 복제본 | Cassandra 포드가 하나만 있으면 단일 장애점이 될 수 있습니다. |
원인: Cassandra 포드가 다운됨
API 프록시 배포 프로세스 중에 apigee-runtime
포드는 Cassandra 데이터베이스에 연결하여 API 프록시에 정의된 키-값 맵(KVM) 및 캐시와 같은 리소스를 가져옵니다. 실행 중인 Cassandra 포드가 없으면 apigee-runtime
포드는 Cassandra 데이터베이스에 연결할 수 없습니다. 이로 인해 API 프록시 배포가 실패합니다.
진단
- Cassandra 포드를 나열합니다.
kubectl -n apigee get pods -l app=apigee-cassandra
샘플 출력 1:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 0/1 Pending 0 9m23s
샘플 출력 2:
NAME READY STATUS RESTARTS AGE apigee-cassandra-0 0/1 CrashLoopBackoff 0 10m
- 각 Cassandra 포드 상태를 확인합니다. 모든 Cassandra 포드 상태는
Running
상태여야 합니다. Cassandra 포드 상태가 서로 다르면 이 문제가 발생할 수 있습니다. 문제를 해결하려면 다음 단계를 수행합니다.
해결 방법
- Cassandra 포드 중 하나라도
Pending
상태이면 Cassandra 포드가 대기 중 상태로 멈춰 있음을 참조하여 문제를 해결합니다. - Cassandra 포드 중 하나라도
CrashLoopBackoff
상태이면 Cassandra 포드가 CrashLoopBackoff 상태로 멈춰 있음을 참조하여 문제를 해결합니다.샘플 결과:
kubectl -n apigee get pods -l app=apigee-runtime NAME READY STATUS RESTARTS AGE apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-2gnch 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-42jdv 1/1 Running 13 45m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-l7wq7 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-q2thb 1/1 Running 8 38m
kubectl -n apigee get pods -l app=apigee-mart NAME READY STATUS RESTARTS AGE apigee-mart-apigee-hybrid-s-2664b3e-143-u0a5c-rtg69 2/2 Running 8 28m
kubectl -n apigee get pods -l app=apigee-synchronizer NAME READY STATUS RESTARTS AGE apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp269nb 2/2 Running 10 29m apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp2w2jp 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpkfkvq 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpxmzhn 2/2 Running 0 4m40s
원인: 포드 하나만으로 구성된 Cassandra 복제본
Cassandra 복제본 수가 1로 구성된 경우 런타임에 Cassandra 포드 하나만 사용할 수 있습니다. 따라서 특정 기간 동안 Cassandra 포드를 사용할 수 없게 되면 apigee-runtime
포드에서 연결 문제가 발생할 수 있습니다.
진단
- Cassandra 스테이트풀(Stateful) 세트를 가져오고 현재 복제본 수를 확인합니다.
kubectl -n apigee get statefulsets -l app=apigee-cassandra
샘플 출력:
NAME READY AGE apigee-cassandra-default 1/1 21m
- 복제본 수가 1로 구성된 경우 다음 단계를 수행하여 더 큰 숫자로 높입니다.
해결 방법
Apigee Hybrid 비프로덕션 배포에서 Cassandra 복제본 수를 1로 설정할 수 있습니다. Cassandra의 고가용성이 비프로덕션 배포에서 중요한 경우 이 문제를 해결하려면 복제본 수를 3으로 높입니다.
이 문제를 해결하려면 다음 단계를 수행합니다.
overrides.yaml
파일을 업데이트하고 Cassandra 복제본 수를 3으로 설정합니다.cassandra: replicaCount: 3
Cassandra 구성 정보는 구성 속성 참조를 확인하세요.
apigeectl
CLI를 사용하여 위 구성을 적용합니다.cd path/to/hybrid-files apigeectl apply -f overrides/overrides.yaml
- Cassandra 스테이트풀(Stateful) 세트를 가져오고 현재 복제본 수를 확인합니다.
kubectl -n get statefulsets -l app=apigee-cassandra
샘플 결과:
NAME READY AGE apigee-cassandra-default 3/3 27m
- Cassandra 포드를 가져오고 현재 인스턴스 수를 확인합니다. 모든 포드가 준비되지 않았으며
Running
상태인 경우 새 Cassandra 포드가 생성되고 활성화될 때까지 기다립니다.kubectl -n get pods -l app=apigee-cassandra
샘플 출력:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 29m apigee-cassandra-default-1 1/1 Running 0 21m apigee-cassandra-default-2 1/1 Running 0 19m
샘플 출력:
kubectl -n apigee get pods -l app=apigee-runtime NAME READY STATUS RESTARTS AGE apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-2gnch 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-42jdv 1/1 Running 13 45m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-l7wq7 1/1 Running 13 43m apigee-runtime-apigee-hybrid-s-test1-8b64f12-143-501i7-q2thb 1/1 Running 8 38m
kubectl -n apigee get pods -l app=apigee-mart NAME READY STATUS RESTARTS AGE apigee-mart-apigee-hybrid-s-2664b3e-143-u0a5c-rtg69 2/2 Running 8 28m
kubectl -n apigee get pods -l app=apigee-synchronizer NAME READY STATUS RESTARTS AGE apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp269nb 2/2 Running 10 29m apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zp2w2jp 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpkfkvq 2/2 Running 0 4m40s apigee-synchronizer-apigee-hybrid-s-test1-8b64f12-143-96zpxmzhn 2/2 Running 0 4m40s
진단 정보 수집 필요
위 안내를 따른 후에도 문제가 지속되면 다음 진단 정보를 수집한 후 Google Cloud Customer Care에 문의하세요.
- Google Cloud 프로젝트 ID
- Apigee Hybrid/Apigee 조직
- Apigee Hybrid:
overrides.yaml
, 민감한 정보 마스킹 - 모든 네임스페이스의 Kubernetes 포드 상태:
kubectl get pods -A > kubectl-pod-status`date +%Y.%m.%d_%H.%M.%S`.txt
- Kubernetes 클러스터 정보 덤프:
# generate kubernetes cluster-info dump kubectl cluster-info dump -A --output-directory=/tmp/kubectl-cluster-info-dump # zip kubernetes cluster-info dump zip -r kubectl-cluster-info-dump`date +%Y.%m.%d_%H.%M.%S`.zip /tmp/kubectl-cluster-info-dump/*