Está a ver a documentação do Apigee e do Apigee Hybrid.
Não existe nenhum equivalente
Documentação do Apigee Edge para este tópico.
Este documento descreve como repor os componentes híbridos do Apigee quando estão bloqueados num estado creating
ou releasing
.
Execute o seguinte comando para listar os principais componentes da instalação do Apigee Hybrid:
kubectl get crd | grep apigee
apigeeorganization (apigeeorganizations.apigee.cloud.google.com) apigeeenvironment (apigeeenvironments.apigee.cloud.google.com) apigeedatastore (apigeedatastores.apigee.cloud.google.com) apigeetelemetries (apigeetelemetries.apigee.cloud.google.com) apigeeredis (apigeeredis.apigee.cloud.google.com)
Execute o seguinte comando para apresentar o estado atual:
kubectl get apigeedatastore -n NAMESPACE
Quando estiverem totalmente funcionais, cada um destes componentes vai estar num estado running
.
Por exemplo:
NAME STATE AGE default running 5d6h
Se a instalação não for bem-sucedida, os componentes podem ficar bloqueados num estado creating
(ou
releasing
). Por exemplo:
NAME STATE AGE default creating 5d6h
Identifique o problema
Para identificar a causa do problema, comece por descrever cada componente. Os componentes são estruturados da seguinte forma:
Cada recurso personalizado ApigeeOrganization
é representado pela seguinte hierarquia:
ApigeeOrganization/HASHED_VALUE ├─ApigeeDeployment/apigee-connect-agent-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-connect-agent-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-connect-agent-HASHED_VALUE│ ├─ReplicaSet/apigee-connect-agent-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-connect-agent-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-mart-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-mart-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-mart-HASHED_VALUE│ ├─ReplicaSet/apigee-mart-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-mart-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-watcher-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-watcher-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-watcher-HASHED_VALUE│ ├─ReplicaSet/apigee-watcher-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-watcher-HASHED_VALUE-VER-xxxx
Cada recurso personalizado ApigeeEnvironment
é representado pela seguinte hierarquia:
ApigeeEnvironment/HASHED_VALUE ├─ApigeeDeployment/apigee-runtime-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-runtime-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-runtime-HASHED_VALUE│ ├─ReplicaSet/apigee-runtime-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-runtime-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-synchronizer-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-synchronizer-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-synchronizer-HASHED_VALUE│ ├─ReplicaSet/apigee-synchronizer-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-synchronizer-HASHED_VALUE-VER-xxxx ├─ApigeeDeployment/apigee-udca-HASHED_VALUE
│ ├─HorizontalPodAutoscaler/apigee-udca-HASHED_VALUE-VER-xxxx │ ├─PodDisruptionBudget/apigee-udca-HASHED_VALUE│ ├─ReplicaSet/apigee-udca-HASHED_VALUE-VER-xxxx │ │ └─Pod/apigee-udca-HASHED_VALUE-VER-xxxx
Comece a identificação do problema descrevendo o componente principal. Por exemplo:
kubectl describe apigeeorganization -n NAMESPACE COMPONENT_NAME
Verifique se o State
do componente é running
:
Replicas:
Available: 1
Ready: 1
Total: 1
Updated: 1
State: running
State: running
Events: <none>
Se não existirem eventos registados a este nível, repita o processo com
apigeedeployments
seguido de ReplicaSet
. Por exemplo:
kubectl get apigeedeployment -n NAMESPACE AD_NAME>
Se apigeedeployments
e ReplicaSet
não apresentarem erros, concentre-se nos pods que não estão prontos:
kubectl get pods -n NAMESPACE
NAME READY STATUS apigee-cassandra-default-0 1/1 Running apigee-connect-agent-apigee-b56a362-150rc2-42gax-dbrrn 1/1 Running apigee-logger-apigee-telemetry-s48kb 1/1 Running apigee-mart-apigee-b56a362-150rc2-bcizm-7jv6w0
/2 Running apigee-runtime-apigee-test-0d59273-150rc2-a5mov-dfb290
/1 Running
Neste exemplo, mart
e runtime
não estão prontos. Inspecione os registos do pod
para determinar os erros:
kubectl logs -n NAMESPACE POD_NAME
Eliminar componentes
Se cometeu um erro com algum destes componentes, elimine o componente e recrie o ambiente com o Helm:
kubectl delete -n apigee apigeeenv HASHED_ENV_NAME
Em seguida, crie o ambiente (depois de fazer as correções necessárias):
helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f OVERRIDES_FILE \ --dry-run=server
Certifique-se de que inclui todas as definições apresentadas, incluindo --atomic
para que a ação seja revertida em caso de falha.
Instale o gráfico:
helm upgrade ENV_NAME apigee-env/ \ --install \ --namespace APIGEE_NAMESPACE \ --set env=ENV_NAME \ --atomic \ -f OVERRIDES_FILE
Inspecione o comando
Se não existirem mensagens de erro óbvias no grupo, mas o componente não tiver transitado para o estado running
, inspecione o apigee-controller
para ver se existem mensagens de erro.
kubectl logs -n NAMESPACE $(k get pods -n NAMESPACE | sed -n '2p' | awk '{print $1}') | grep -i error
Isto permite que o utilizador veja o motivo pelo qual o controlador não conseguiu processar o pedido
(de create
/delete
/update
, etc.).
Armazenamento de dados do Apigee
O Apache Cassandra é implementado como um StatefulSet
. Cada instância do Cassandra contém:
ApigeeDatastore/default
├─Certificate/apigee-cassandra-default │ └─CertificateRequest/apigee-cassandra-default-wnd7s ├─Secret/config-cassandra-default ├─Service/apigee-cassandra-default │ ├─EndpointSlice/apigee-cassandra-default-7m9kx │ └─EndpointSlice/apigee-cassandra-default-gzqpr└─StatefulSet/apigee-cassandra-default
├─ControllerRevision/apigee-cassandra-default-6976b77bd ├─ControllerRevision/apigee-cassandra-default-7fc76588cb└─Pod/apigee-cassandra-default-0
Este exemplo mostra um agrupamento. No entanto, as instalações de produção típicas contêm três ou mais agrupamentos.
Se o estado do Cassandra for creating
ou releasing
, o estado TEM de ser reposto. Determinados problemas (como alterações à palavra-passe do Cassandra) e problemas não relacionados com redes
podem exigir que elimine componentes. É bastante possível que, nesses casos, não consiga eliminar a instância (ou seja, kubectl delete apigeedatastore -n NAMESPACE default
). A utilização de --force
ou --grace-period=0
também não ajuda.
O objetivo de reset
é alterar o estado do componente
(apigeedatastore
) de creating
ou releasing
para
running
. A alteração do estado desta forma não resolve normalmente o problema subjacente. Na maioria dos casos, o componente deve ser eliminado após uma reposição.
Tentar eliminar (esta ação não vai ter êxito):
kubectl delete -n NAMESPACE apigeedatastore default
É comum este comando não ser concluído. Use Ctrl+C e termine a chamada.
Reponha o estado:
Na janela 1:
kubectl proxy
No período 2:
curl -X PATCH -H "Accept: application/json" -H "Content-Type: application/json-patch+json" --data '[{"op": "replace", "path": "/status/nestedState", "value": ""},{"op": "replace", "path": "/status/state", "value": "running"}]' 'http://127.0.0.1:8001/apis/apigee.cloud.google.com/v1alpha1/namespaces/apigee/apigeedatastores/default/status'
Remova o finalizador (janela 2):
kubectl edit -n NAMESPACE apigeedatastore default
Procure as duas linhas seguintes e elimine-as:
finalizers: - apigeedatastore.apigee.cloud.google.com
Cenários de erro comuns
A configuração do proxy não está disponível com o tempo de execução
Este erro pode manifestar-se de duas formas:
- O
runtime
não está no estadoready
. - O
runtime
não recebeu a versão mais recente da API.
Comece com os
synchronizer
pods.Inspeccione os registos do
synchronizer
. Os erros comuns são os seguintes:- Falta de conetividade de rede (para
*.googleapi.com
) - Acesso IAM incorreto (conta de serviço não disponível ou não fornecida pela autorização do gestor do sincronizador)
- A API setSyncAuthorization não foi invocada
- Falta de conetividade de rede (para
Inspecione os
runtime
pods.A inspeção dos registos dos pods
runtime
mostra o motivo pelo qual oruntime
não carregou a configuração. O plano de controlo tenta impedir que a maioria dos erros de configuração chegue ao plano de dados. Nos casos em que uma validação é impossível ou não é implementada corretamente, oruntime
não a carrega.
"No runtime pods" no plano de controlo
Comece com os
synchronizer
pods.Inspeccione os registos para o
synchronizer
. Os erros comuns são os seguintes:- Falta de conetividade de rede (para
*.googleapi.com
) - Acesso IAM incorreto (conta de serviço não disponível ou não fornecida pela autorização do gestor do sincronizador)
- A API setSyncAuthorization não foi invocada. Talvez a configuração nunca tenha chegado ao plano de dados.
- Falta de conetividade de rede (para
Inspecione os
runtime
pods.A inspeção dos registos dos pods
runtime
mostra o motivo pelo qual oruntime
não carregou a configuração.Inspecione os
watcher
pods.É o componente
watcher
que configura a entrada (encaminhamento) e comunica o estado de implementação do proxy e da entrada ao plano de controlo. Inspecione estes registos para saber por que motivo owatcher
não está a comunicar o estado. Os motivos comuns incluem uma incompatibilidade entre os nomes no ficheirooverrides.yaml
e o plano de controlo para o nome do ambiente e/ou o nome do grupo de ambientes.
A sessão de depuração não aparece no plano de controlo
Comece com os
synchronizer
pods.Inspeccione os registos do
synchronizer
. Os erros comuns são os seguintes:- Falta de conetividade de rede (para
*.googleapi.com
) - Acesso IAM incorreto (conta de serviço não disponível ou não fornecida pela autorização do gestor do sincronizador)
- A API setSyncAuthorization não foi invocada.
- Falta de conetividade de rede (para
- Inspecione os
runtime
pods.
A inspeção dos registos dos podsruntime
mostra o motivo pelo qual oruntime
não está a enviar registos de depuração para o UDCA. - Inspecione os pods UDCA.
A inspeção dos registos do UDCA mostra o motivo pelo qual o UDCA não está a enviar informações da sessão de depuração para o plano de controlo.
O Cassandra devolve respostas de cache grandes
A seguinte mensagem de aviso indica que o Cassandra está a receber pedidos de leitura ou escrita com uma carga útil maior e pode ser ignorada com segurança, uma vez que este limite de aviso está definido para um valor inferior para indicar os tamanhos da carga útil de resposta.
Batch for [cache_ahg_gap_prod_hybrid.cache_map_keys_descriptor, cache_ahg_gap_prod_hybrid.cache_map_entry] is of size 79.465KiB, exceeding specified threshold of 50.000KiB by 29.465KiB