Esta é a documentação da Apigee e da Apigee híbrida.
Não há documentação equivalente do
Apigee Edge para esse tópico.
Neste documento, descrevemos como redefinir os componentes da Apigee híbrida quando eles estão presos no estado creating ou releasing.
Execute o seguinte comando para listar os principais componentes de instalação da Apigee híbrida:
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 comando a seguir para exibir o estado atual:
kubectl get apigeedatastore -n NAMESPACE
Quando totalmente funcional, cada um desses componentes estará no estado running.
Exemplo:
NAME STATE AGE default running 5d6h
Se a instalação não for bem-sucedida, os componentes poderão estar travados no estado creating (ou releasing). Exemplo:
NAME STATE AGE default creating 5d6h
Identificar o problema
Para identificar a causa do problema, comece descrevendo cada componente. Os componentes são estruturados da seguinte maneira:
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 raiz. 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 houver eventos registrados nesse nível, repita o processo com apigeedeployments seguido por ReplicaSet. Exemplo:
kubectl get apigeedeployment -n NAMESPACE AD_NAME>
Se apigeedeployments e ReplicaSet não mostrarem 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 registros do pod para determinar erros:
kubectl logs -n NAMESPACE POD_NAME
Como excluir componentes
Se você tiver cometido um erro com qualquer um desses componentes, exclua o componente e recrie o ambiente usando o Helm:
kubectl delete -n apigee apigeeenv HASHED_ENV_NAME
Faça o seguinte para criar 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
Inclua todas as configurações mostradas, 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
Inspecionar o controlador
Se não houver mensagens de erro óbvias no pod, mas o componente não tiver feito a transição para o estado running, inspecione o apigee-controller em busca de mensagens de erro.
kubectl logs -n NAMESPACE $(k get pods -n NAMESPACE | sed -n '2p' | awk '{print $1}') | grep -i error
Isso permite que o usuário veja por que o controlador não conseguiu processar a solicitação (de create/delete/update etc.).
Armazenamento de dados da 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 pod; No entanto, as instalações de produção típicas contêm três ou mais pods.
Se o estado do Cassandra for creating ou releasing, o estado PRECISA ser redefinido. Alguns problemas, como alterações de senha do Cassandra, e problemas não relacionados à rede podem exigir a exclusão de componentes. Nesses casos, é bem possível que não seja possível excluir
a instância (ou seja, kubectl delete apigeedatastore -n NAMESPACE default. Usar --force ou --grace-period=0 também não ajuda.
O objetivo de reset é mudar o estado do componente
(apigeedatastore) de creating ou releasing de volta para
running. Alterar o estado dessa maneira normalmente não resolverá o problema subjacente. Na maioria dos casos, o componente deve ser excluído após uma redefinição.
Tentar uma exclusão (isso não será bem-sucedido):
kubectl delete -n NAMESPACE apigeedatastore default
É comum que esse comando não seja concluído. Use Ctrl+C e encerre a chamada.
Redefina o estado:
Na janela 1:
kubectl proxy
Na janela 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 e exclua as duas linhas a seguir:
finalizers: - apigeedatastore.apigee.cloud.google.com
Cenários comuns de erro
Configuração de proxy não disponível com o ambiente de execução
Esse erro pode se manifestar de duas maneiras:
- O
runtimenão está no estadoready. - O
runtimenão recebeu a versão mais recente da API.
Comece com os pods
synchronizer.Inspecione os registros do
synchronizer. Os erros comuns são os seguintes:- Falta de conectividade de rede (para
*.googleapi.com) - Acesso incorreto do IAM (conta de serviço não disponível ou não fornecida pela permissão do Gerenciador de sincronização)
- A API setSyncAuthorization não foi invocada
- Falta de conectividade de rede (para
Inspecione os pods
runtime.Inspecionar os registros dos pods
runtimemostrará por que oruntimenão carregou a configuração. O plano de controle tenta impedir que a maioria dos erros de configuração vá até o plano de dados. Nos casos em que uma validação é impossível ou não é implementada corretamente, aruntimenão a carrega.
"Nenhum pod de ambiente de execução" no plano de controle
Comece com os pods
synchronizer.Inspecione os registros do
synchronizer. Os erros comuns são os seguintes:- Falta de conectividade de rede (para
*.googleapi.com) - Acesso incorreto do IAM (conta de serviço não disponível ou não fornecida pela permissão do Gerenciador de sincronização)
- A API setSyncAuthorization não foi invocada. Talvez a configuração nunca tenha passado pelo plano de dados.
- Falta de conectividade de rede (para
Inspecione os pods
runtime.Inspecionar os registros dos pods
runtimemostrará por que oruntimenão carregou a configuração.Inspecione os pods
watcher.É o componente
watcherque configura a entrada (roteamento) e informa o status da implantação do proxy e da entrada para o plano de controle. Inspecione esses registros para descobrir por que owatchernão está informando o status. Os motivos mais comuns incluem uma incompatibilidade entre os nomes no arquivooverrides.yamle no plano de controle para o nome do ambiente e/ou do nome do grupo de ambientes.
A sessão de depuração não está aparecendo no plano de controle
Comece com os pods
synchronizer.Inspecione os registros do
synchronizer. Os erros comuns são os seguintes:- Falta de conectividade de rede (para
*.googleapi.com) - Acesso incorreto do IAM (conta de serviço não disponível ou não fornecida pela permissão do Gerenciador de sincronização)
- A API setSyncAuthorization não foi invocada.
- Falta de conectividade de rede (para
- Inspecione os pods
runtime.
Inspecionar os registros dos podsruntimemostrará por que oruntimenão está enviando registros de depuração para UDCA. - Inspecione os pods do UDCA.
A inspeção dos registros da UDCA mostrará por que a UDCA não está enviando informações de sessão de depuração para o plano de controle.
Cassandra retornando respostas em cache grandes
A mensagem de aviso a seguir indica que o Cassandra está recebendo solicitações de leitura ou gravação com um payload maior e pode ser ignorado com segurança, já que esse limite de aviso é definido como um valor mais baixo para indicar os tamanhos do payload da 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