Artifact Registry
Erro de conciliação do subcomponente sar-failoverregistry
Versões: 1.13.1, 1.13.3 e 1.13.4
Sintomas: quando cria o cluster de administrador raiz com o comando gdcloud system admin-cluster install, a operação pode falhar se houver uma longa lista de servidores durante o arranque. A mensagem de saída de erro é a seguinte:
Secret "sar-failoveregistry-backend-parameter" is invalid: data: Too long: must have at most 1048576 bytes
Solução alternativa: para mitigar este problema, siga estes passos:
No mesmo cluster do Kubernetes que o subcomponente, liste os servidores e confirme que cada recurso personalizado do servidor tem uma etiqueta com a chave
cluster.private.gdc.goog/inventory-machine:kubectl get servers -n gpc-systemEncontre o recurso personalizado do componente semelhante ao seguinte:
apiVersion: lcm.private.gdc.goog/v1 kind: Component metadata: creationTimestamp: "2025-01-06T12:00:41Z" generation: 1 name: sar-v1.14.2-sar-acbf97caf6 resourceVersion: "3199" uid: 681ec5cb-9eb3-423b-ac1d-f6aa27abfd75 spec: name: sarNo recurso personalizado do componente System Artifact Registry (SAR), adicione o seletor de etiquetas nos
runtimeParameterSourcesservidores parasar-failover-registry:Veja o recurso
serverexistente:servers: targetCluster: Local object: apiVersion: system.private.gdc.goog/v1alpha1 kind: ServerList namespace: gpc-systemAtualize o campo de servidores no recurso personalizado do componente:
servers: targetCluster: Local object: apiVersion: system.private.gdc.goog/v1alpha1 kind: ServerList namespace: gpc-system labelSelector: - key: cluster.private.gdc.goog/inventory-machine operator: "in" strValues: - "bm-1" - "bm-2" - "bm-3"
Verifique se as alterações no componente SAR no passo anterior são propagadas para o subcomponente
sar-failverregistry:Obtenha os detalhes do componente SAR:
kubectl get component | grep sarObtenha os detalhes do componente
sar-failoverregistry:kubectl get subcomponent sar-failoverregistry -n rootUse a flag
-npara especificar o espaço de nomes.
Cópia de segurança e restauro
As capturas instantâneas falham devido à falta de espaço no volume
Versões: todas as versões de 1.13.x
Sintomas: existe um problema intermitente com a cópia de segurança do volume persistente que pode afetar os fluxos de trabalho das tarefas de cópia de segurança periódicas. Para alguns volumes com uma taxa de alteração elevada, as capturas instantâneas de volume tiradas para cópias de segurança em curso podem fazer com que o volume fique sem espaço, o que, por sua vez, coloca o volume no modo só de leitura.
Solução alternativa: para evitar um potencial impacto nas cargas de trabalho de produção, siga os passos no manual de procedimentos BACK-R0104. Em alternativa, também pode remover as capturas de ecrã acumuladas seguindo o manual de procedimentos BACK-R0106.
Os pods do agente e do plano de controlo são reiniciados devido à falta de memória
Versões: todas as versões de 1.13.x
Sintomas: os pods do agente e do plano de controlo podem ser reiniciados se ficarem sem memória.
Solução alternativa: aumente a memória para os pods do painel de controlo e do agente seguindo as instruções no manual de procedimentos BACK-R0005. Aumente a memória dos pods para 2 GiB.
A cópia de segurança falha para o instantâneo de PVC
Versões: todas as versões de 1.13.x
Sintomas: ocorreram falhas de cópia de segurança devido à ultrapassagem do limite de instantâneos do ONTAP de 1023 por recurso de PersistentVolumeClaim (PVC).
Solução alternativa: para mitigar este problema, siga estes passos:
Atualize o plano de cópia de segurança para que os limites nunca sejam atingidos. Configure um plano de cópia de segurança para fazer uma cópia de segurança a cada hora ou reduza o valor de
deleteLockDayspara três, de modo que o número de resumos não aumente para além de 1023:apiVersion: backup.gdc.goog/v1 kind: BackupPlan metadata: name: test-backup-plan spec: clusterName: system-cluster backupSchedule: cronSchedule: "*/10 * * * *" paused: false backupConfig: backupScope: selectedApplications: namespacedNames: - name: test-protected-application namespace: release-namespace backupRepository: gdchservices-backup-repository includeVolumeData: true volumeStrategy: LocalSnapshotOnly retentionPolicy: backupDeleteLockDays: LOCK_DAYS backupRetainDays: RETENTION_DAYSSubstitua o seguinte:
LOCK_DAYS: bloqueia a eliminação da cópia de segurança durante o número de dias especificado após a criação da cópia de segurança. Use os seguintes valores:- Se o campo
volumeStrategyestiver definido com um valor deLocalSnapshotOnly, use um valor de2. - Se o campo
volumeStrategyestiver definido com um valor deProvisionerSpecific, use um valor de7.
- Se o campo
RETENTION_DAYS: elimina as cópias de segurança após o número de dias especificado após a criação da cópia de segurança. Se o campovolumeStrategyestiver definido com um valor deLocalSnapshotOnly, use um valor inferior a3.
Para eliminar manualmente instantâneos excessivos do seu ambiente através de comandos de eliminação de instantâneos de volumes, siga estes passos:
Inicialize as variáveis:
export RKCNF=/root/release/root-admin/root-admin-kubeconfig export KCNF=/root/release/org-admin/gdchservices-admin-kubeconfig export ORG_NAME=ORG_NAME export PVC=PVC_NAMESubstitua o seguinte:
ORG_NAME: o nome da sua organização.PVC_NAME: o nome do recursoPVCrelacionado com o plano de cópia de segurança.
O NetApp ONTAP é um sistema operativo usado para administrar o armazenamento do GDC. Obtenha acesso ao ONTAP:
export USERNAME="$(kubectl --kubeconfig ${RKCNF?} -n gpc-system get secret storage-root-level1 -o jsonpath='{.data.username}' | base64 -d)" export MGMT_IP="$(kubectl --kubeconfig ${RKCNF?} get storagecluster -A -o jsonpath='{.items[0].spec.network.clusterManagement.ip}')" export PASSWORD="$(kubectl --kubeconfig ${RKCNF?} -n gpc-system get secret storage-root-level1 -o jsonpath='{.data.password}' | base64 -d)" echo $PASSWORDApresente todas as imagens instantâneas do recurso
PVCselecionado:ssh ${USERNAME?}@${MGMT_IP?} "volume snapshot show -vserver ${ORG_NAME?} -fields volume,snapshot,size,create-time" | grep "snapshot-" > /tmp/snapshot_unsort.listUse a palavra-passe do passo anterior para iniciar sessão na máquina no endereço IP definido pela variável
MGMT_IP.Encontre o PVC com o número mais elevado de capturas instantâneas:
grep ${ORG_NAME?} /tmp/snapshot_unsort.list | grep snapshot | awk '{print $2}' | sort | uniq -cDefina o nome do recurso
PVCpara o que tem uma contagem elevada de resumos:export PV_NAME=Elimine o instantâneo do recurso
PVCque contém uma quantidade elevada de instantâneos. O limite para o número de instantâneos de um recursoPVCé de 1023:for snap_name in `grep ${ORG_NAME?} /tmp/snapshot_unsort.list | grep snapshot | grep ${PV_NAME?} | awk '{print $3}'` do echo "volume snapshot delete -vserver ${ORG_NAME} -volume ${PV_NAME} -snapshot $snap_name" echo "Y" doneInicie sessão no ONTAP e execute estes comandos para eliminar a captura instantânea:
echo $PASSWORD #Use this password to login to ontap ssh ${username?}@${mgmt_ip?}Execute os comandos indicados no passo anterior para eliminar o instantâneo. Quando terminar, saia da sessão de SSH
Repita os passos de eliminação até que todas as capturas de ecrã
PVCofensivas sejam limpas.
Restaurar a partir de uma cópia de segurança incompatível com a quota de SVM
Versões: 1.13.1
Sintomas: o problema é uma incompatibilidade entre as funcionalidades do NetApp. Esta incompatibilidade impede a entrega da quota do inquilino e a implementação bem-sucedida das restaurations. O problema só ocorre quando restaura uma cópia de segurança para um cluster de utilizadores com restrições de quota.
Solução alternativa: se este problema ocorrer, a restauração falha com a mensagem de erro DP volumes are not supported on storage-limit enabled Vserver e o operador de infraestrutura (IO) tem de desativar a quota para esse cluster de utilizadores e reiniciar o processo de restauração. Assim que o restauro estiver concluído, o IO tem de reativar as quotas de inquilinos e o sistema deve continuar a funcionar conforme previsto. Consulte o runbook FILE A0030 para mais detalhes.
Faturação
As métricas de faturação não são apresentadas corretamente no painel de controlo de faturação
Versões: 1.13.1
Sintomas: as métricas de faturação não são emitidas corretamente para o Cortex devido à falta de MetricsProxySidecar.
Solução alternativa: crie um recurso billing-monetizer MetricsProxySidecar. Em seguida, execute um script para atualizar o metricExpression.
Exporte a seguinte variável kubeconfig:
export KUBECONFIG=KUBECONFIG_PATHSubstitua a variável
KUBECONFIG_PATHpelo caminho para o ficheiro kubeconfig do cluster de administrador da organização. Siga os passos no manual de serviço IAM-R0101 para gerar o ficheirokubeconfignecessário para esta solução alternativa.Crie um recurso
billing-monetizerMetricsProxySidecarpara os espaços de nomesbilling-systemepartner-billing-system:Para
billing-system:cat <<EOF | kubectl --kubeconfig=$KUBECONFIG apply -n billing-system -f - apiVersion: monitoring.private.gdc.goog/v1alpha1 kind: MetricsProxySidecar metadata: name: billing-monetizer namespace: billing-system annotations: lcm.private.gdc.goog/claim-by-force: "true" helm.sh/resource-policy: keep spec: restartUninjectedPods: true restartUnsyncedPods: false sources: - port: 8080 scrapeInterval: 60s destinations: - certificate: secretName: billing-monetizer-monitoring-target-infra-obs-cert port: 9090 - certificate: secretName: billing-monetizer-monitoring-target-platform-obs-cert port: 9091 --- apiVersion: monitoring.private.gdc.goog/v1alpha1 kind: MetricsProxySidecar metadata: name: usagemetering namespace: billing-system annotations: lcm.private.gdc.goog/claim-by-force: "true" helm.sh/resource-policy: keep spec: restartUninjectedPods: true restartUnsyncedPods: false sources: - port: 8099 scrapeInterval: 60s destinations: - port: 9090 certificate: secretName: bil-usagemetering-monitoring-target-cert EOFPara
partner-billing-system:cat <<EOF | kubectl --kubeconfig=$KUBECONFIG apply -n partner-billing-system -f - apiVersion: monitoring.private.gdc.goog/v1alpha1 kind: MetricsProxySidecar metadata: name: billing-monetizer namespace: partner-billing-system annotations: lcm.private.gdc.goog/claim-by-force: "true" helm.sh/resource-policy: keep spec: restartUninjectedPods: true restartUnsyncedPods: false sources: - port: 8080 scrapeInterval: 60s destinations: - certificate: secretName: billing-monetizer-monitoring-target-infra-obs-cert port: 9090 EOFExecute o seguinte script para atualizar o
metricExpression. Esta ação remove ocontainer_name="monetizer"doskuconfig, que incluibilling_total_cost{container_name="monetizer":cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig bc73-b150-e0ea --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"BC4D-B784-EA3C|BC73-B150-E0EA|BD0C-C8CF-658B|BD1A-9464-9DF9|BD5A-044C-4860|BDB4-6C62-00BE|BDB4-BBA6-3EEE|3034-EE51-7404|3160-1596-5D9B|54AD-8EBC-8BB1\"}\n [{{.Range}}:1m] ) ) * max(metering_premium_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig bd1a-9464-9df9 --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"BC4D-B784-EA3C|BC73-B150-E0EA|BD0C-C8CF-658B|BD1A-9464-9DF9|BD5A-044C-4860|BDB4-6C62-00BE|BDB4-BBA6-3EEE|3034-EE51-7404|3160-1596-5D9B|54AD-8EBC-8BB1\"}\n [{{.Range}}:1m] ) ) * max(metering_enhanced_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig b93c-effb-6d6b --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"B853-4EA7-4587|B871-C5E5-BAC1|B874-4D01-5058|B8D9-1200-1016|B93C-EFFB-6D6B|B995-6E8E-BF8D|B9B4-1B11-A9F1|B9B5-DFDA-8526|BA38-E4BE-BA5D|BB08-6B46-E1B3|BB51-EA7D-1728|BBE8-7B7A-03DE|BBF1-CE8E-CD24|BC4C-AC45-6448|34A1-F9B1-DC13|53F3-F2F8-54A9|3674-F9D1-120A|5463-A50F-B07D\"}\n [{{.Range}}:1m] ) ) * max(metering_premium_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig b871-c5e5-bac1 --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"B853-4EA7-4587|B871-C5E5-BAC1|B874-4D01-5058|B8D9-1200-1016|B93C-EFFB-6D6B|B995-6E8E-BF8D|B9B4-1B11-A9F1|B9B5-DFDA-8526|BA38-E4BE-BA5D|BB08-6B46-E1B3|BB51-EA7D-1728|BBE8-7B7A-03DE|BBF1-CE8E-CD24|BC4C-AC45-6448|34A1-F9B1-DC13|53F3-F2F8-54A9|3674-F9D1-120A|5463-A50F-B07D\"}\n [{{.Range}}:1m] ) ) * max(metering_enhanced_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig ba38-e4be-ba5d --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"B853-4EA7-4587|B871-C5E5-BAC1|B874-4D01-5058|B8D9-1200-1016|B93C-EFFB-6D6B|B995-6E8E-BF8D|B9B4-1B11-A9F1|B9B5-DFDA-8526|BA38-E4BE-BA5D|BB08-6B46-E1B3|BB51-EA7D-1728|BBE8-7B7A-03DE|BBF1-CE8E-CD24|BC4C-AC45-6448|34A1-F9B1-DC13|53F3-F2F8-54A9|3674-F9D1-120A|5463-A50F-B07D\"}\n [{{.Range}}:1m] ) ) * max(metering_enhanced_support_base_fee)" } } ] }' EOF cat <<EOF | kubectl --kubeconfig=$KUBECONFIG -n billing-system patch skuconfig bbe8-7b7a-03de --type=merge -p ' { "metricMappingTimeline": [ { "billingModel": "Generic", "usageAggregationLevel": "Organization", "revision": 1, "generic": { "metricExpression": "sum( increase( billing_total_cost{sku !~ \"B853-4EA7-4587|B871-C5E5-BAC1|B874-4D01-5058|B8D9-1200-1016|B93C-EFFB-6D6B|B995-6E8E-BF8D|B9B4-1B11-A9F1|B9B5-DFDA-8526|BA38-E4BE-BA5D|BB08-6B46-E1B3|BB51-EA7D-1728|BBE8-7B7A-03DE|BBF1-CE8E-CD24|BC4C-AC45-6448|34A1-F9B1-DC13|53F3-F2F8-54A9|3674-F9D1-120A|5463-A50F-B07D\"}\n [{{.Range}}:1m] ) ) * max(metering_premium_support_base_fee)" } } ] }' EOF
O utilizador não consegue criar BillingAccountBinding devido a erros no webhook de validação
Versões: 1.13.0, 1.13.1, 1.13.3
Sintomas: o erro está na lógica do webhook de validação BillingAccountBinding. Se um utilizador tentar criar um recurso BillingAccountBinding, o webhook devolve o erro permission denied.
Solução alternativa: para criar recursos BillingAccountBinding, notifique o operador da infraestrutura e crie os recursos correspondentes através da IAC.
Armazenamento em bloco
Pods do Grafana bloqueados no estado Init devido a erros de montagem de volume.
Versões: 1.13.3
Sintomas:
Os pods do Grafana nos espaços de nomes anthos-identity-service-obs-system e platform-obs-obs-system estão bloqueados no estado Init devido a erros de montagem de volume. A mensagem de erro nos registos do kubelet indica um problema de multi-attach. O problema tem origem num erro no Trident, em que não identifica nem valida corretamente o dispositivo subjacente para mapeamentos LUKS, o que leva a um erro de ligação múltipla.
Solução alternativa:
Verifique se o PVC tem um deletionTimestamp. Se não existir deletionTimestamp (migração de pods), siga estes passos:
- Verifique o
VolumeAttachmentdoPVCpara identificar onde o volume está atualmente associado. - Isolar o
Nodesno cluster que não corresponda a este valor. - Elimine o
Podcom falhas. Isto deve fazer com que seja migrado novamente para oNodeoriginal.
Após a verificação, se existir um deletionTimestamp (eliminação de volume), siga estes passos:
- Verifique o
VolumeAttachmentdoPVCpara identificar onde o volume está atualmente associado. No
Node, apresente o conteúdo do respetivo ficheiro de acompanhamento:cat /var/lib/trident/tracking/PVC_NAME.jsonValide se o dispositivo LUKS encontrado no campo
devicePathdo resultado do ficheiro de acompanhamento está efetivamente fechado. Este caminho não deve existir neste ponto:stat DEVICE_PATHValide se o número de série está atualmente mapeado para algum dispositivo de vários caminhos.
Copie o valor no campo
iscsiLunSerialdo ficheiro de acompanhamento.Converta este valor no valor hexadecimal esperado:
echo 'iISCSILUNSERIAL' | xxd -l 12 -psCom este novo valor, verifique se a entrada de vários caminhos ainda existe:
multipath -ll | grep SERIAL_HEXSe não existir, elimine o ficheiro de acompanhamento.
Se existir, é apresentado um valor hexadecimal ligeiramente mais longo do que o pesquisado, denominado
multipathSerial. Execute o seguinte e encontre os dispositivos de bloqueio:multipath -ll MULTIPATH_SERIALEm seguida, execute os seguintes comandos, sendo que o último é executado exclusivamente para cada dispositivo de blocos:
systemctl restart iscsid systemctl restart multipathd multipath -f MULTIPATH_SERIAL echo 1 > /sys/block/BLOCK_DEVICE_NAME/device/delete
Os pods do iniciador de máquinas virtuais não conseguem mapear volumes
Versões: 1.13.1
Sintomas:
Pode ver um aviso com o seguinte aspeto:
Warning FailedMapVolume 2m50s (x206 over 13h) kubelet MapVolume.SetUpDevice failed for volume "pvc-2a68356a-47da-422b-8781-15e3a6fe7ec9" : rpc error: code = DeadlineExceeded desc = context deadline exceeded
Para diagnosticar o problema, siga estes passos:
- Certifique-se de que os volumes e os pods estão no mesmo nó.
- Encontre o nó em que os pods estão e verifique o respetivo estado.
- Verifique a conetividade do nó.
- Verifique o IPSEC.
- Verifique o multipath para ver se existe um zombie.
Verifique os registos do trident para saber que passo no fluxo de CSI pode ter introduzido este zombie:
kubectl --kubeconfig /root/release/system/org-1-system-cluster logs -n netapp-trident -c trident-main
Solução alternativa: para contornar este problema, siga os passos nos seguintes runbooks:
- Para problemas relacionados com nós, consulte o manual de procedimentos FILE-R0010.
- Para problemas com o IPSEC, consulte o manual de instruções FILE-R0007.
- Para problemas com LUNs inativos, consulte o manual de procedimentos FILE-R0020.
- Para problemas com LUNs de zombies super, consulte o manual de procedimentos FILE-R0021.
Falhas relacionadas com o armazenamento
Versões: 1.13.1
Sintomas: as falhas relacionadas com o armazenamento podem ser identificadas através do acionamento do alerta file_block_zombie_luns_present ou da falha na apresentação do pod devido a um problema na chamada MountVolume que persiste durante mais de um ciclo de conciliação. O tempo limite pode ser de cerca de dois minutos.
A repetição da mesma falha indica que algo falhou no caminho NodeStage ou NodePublish CSI e requer uma solução alternativa. A única exceção é a indicação de uma falha de limite de tempo. Pode ver algumas falhas
como esta:
NMountVolume.SetUp failed for volume "pvc-a63313b2-3e30-4c92-b074-f9fffe0500a4" : rpc error: code = Internal desc = unable to mount device; exit status 32
MapVolume.SetUpDevice failed for volume "pvc-f594b0c7-a5b5-4a5b-8a53-bf13e95c4bb0" : rpc error: code = Internal desc = rpc error: code = Internal desc = failed to stage volume: multipath device not found when it is expected
MapVolume.SetUpDevice failed for volume "pvc-f594b0c7-a5b5-4a5b-8a53-bf13e95c4bb0" : rpc error: code = Internal desc = rpc error: code = Internal desc = failed to stage volume: failure when reconfiguring multipath
Solução alternativa:
Para ver se o
Nodeque tem oPodpode ser corrigido para oPVCcom falhas, isole o nó atual onde o pod está agendado e elimine oPod:KUBECONFIG=CLUSTER_KUBECONFIG kubectl cordon node TARGET_NODEO
Poddeve ser agendado para umNodecompletamente diferente, o que faz com que o Trident seja forçado a executar completamente o NodeStage, o NodePublish, o NodeUnpublish e o NodeUnstage. Isto pode não corrigir o volume imediatamente, porque podem existir sessões ainda abertas para este volume noNodeoriginal.Depois de concluir o passo anterior, remova a restrição do nó em questão:
KUBECONFIG=CLUSTER_KUBECONFIG kubectl uncordon node TARGET_NODESe continuarem a existir falhas, isole todos os outros
Nodes, exceto aquele em que oPodfoi originalmente agendado, e elimine oPod. Isto deve fazer com que oPodseja iniciado noNodeoriginal, onde os dispositivos existentes podem permanecer.Depois de concluir o passo anterior, remova a restrição dos nós em questão.
Como último recurso para guardar o
PVe os respetivos dados, oNodepode ser reiniciado para limpar as falhas de vários caminhos, udev e devmapper noNode. Embora este passo seja bastante difícil, é o que tem maior probabilidade de sucesso.Se as mitigações anteriores não resolverem o problema com o volume, isto indica que os dados foram danificados e são efetivamente inutilizáveis. A única opção restante para continuar com o comportamento pretendido do contentor é eliminar os
PV,PVCePodcom falhas, seguido de um reinício do nó onde o PV estava alojado. Esta ação resulta na perda total de dados do que já foi escrito no volume.
Volumes persistentes criados com tamanho incorreto
Versões: 1.13.1
Sintomas: as cargas de trabalho com um volume persistente são criadas com cerca de 16 MiB a menos. Se as cargas de trabalho dependerem exatamente do tamanho anunciado por um volume persistente, a pequena discrepância faz com que a carga de trabalho falhe ao expandir ou aprovisionar. Este problema é mais provável para volumes persistentes aprovisionados com uma classe de armazenamento standard-block, em oposição aos aprovisionados com uma classe de armazenamento standard-rwo. Este problema pode ocorrer em volumes persistentes com uma classe de armazenamento standard-rwo que usa o modo volumemode:block.
Solução alternativa: atribua um volume persistente que seja, pelo menos, 16 MiB maior do que o que é realmente necessário.
Não é possível eliminar a máquina virtual de armazenamento
Versões: 1.13.1
Sintomas: o StorageVirtualMachine pode apresentar um erro como este:
Warning SVMDeletion 27m (x32 over 4h9m) StorageVirtualMachine Reconcile error for svm deletion: failed to delete svm: failed to delete svm volumes: failed to call VolumeCollectionGet: error message: "SVM \"org-2-user\" does not exist. "; error target: "svm.name"
Solução alternativa: elimine o finalizador de StorageVirtualMachines no espaço de nomes da organização.
A desativação da organização não limpa os recursos
Versões: 1.13.1
Sintomas: quando desativa uma organização, ficam alguns StorageVirtualMachines
recursos, por exemplo:
- gpc-system secret/org-2-admin-backup-agent-cert-secret
- gpc-system secret/org-2-admin-client-cert-secret
- gpc-system secret/org-2-admin-server-cert-secret
- gpc-system secret/org-2-admin-svm-credential
- gpc-system secret/org-2-admin-backup-agent-cert-secret
- gpc-system secret/org-2-admin-client-cert-secret
- gpc-system secret/org-2-admin-server-cert-secret
- gpc-system secret/org-2-admin-svm-credential
Solução alternativa: elimine estes recursos.
Falha na conciliação da eliminação
Versões: 1.13.1
Sintomas: quando um StorageVirtualMachine é eliminado antes da limpeza dos clusters que dependem desse StorageVirtualMachine, existe a possibilidade de ocorrer um problema na limpeza dos volumes persistentes (PV) de alguns clusters. Especificamente, quando os PVs encriptados com LUKS não são limpos, o respetivo segredo impede a eliminação do espaço de nomes em que se encontram. Pode ver um aviso nos registos semelhante ao seguinte:
Warning ReconcileBackoff 5m35s (x6 over 88m) ClusterLifecycleReconciler cluster namespace deletion is not completed: deletion is still ongoing for namespace: /g-org-2-shared-service-cluster
Solução alternativa: elimine o finalizador dos segredos g-luks-gdc-vm-disk-* no espaço de nomes do cluster de serviço.
Atualização do Bare Metal bloqueada
Versões: 1.13.1, 1.13.5, 1.13.6
Sintomas: as tarefas do Ansible ficam bloqueadas na recolha de factos quando existem LUNS inativos. A execução do comando multipath -ll pode apresentar o seguinte problema:
3600a098038314955593f574669785635 dm-11 NETAPP,LUN C-Mode
size=1.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| |- 5:0:0:10 sdaf 65:240 failed faulty running
| `- 6:0:0:10 sdau 66:224 failed faulty running
`-+- policy='service-time 0' prio=0 status=enabled
|- 7:0:0:10 sdad 65:208 failed faulty running
`- 8:0:0:10 sdar 66:176 failed faulty running
Também pode ver a seguinte mensagem de erro:
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv PLAY [Check inventory] *********************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv TASK [set_fact] ****************************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv Wednesday 03 July 2024 01:39:04 +0000 (0:00:00.018) 0:00:00.018 ********
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv ok: [10.252.151.3]
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv PLAY [Verify inventory]********************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv TASK [assert]******************************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv Wednesday 03 July 2024 01:39:04 +0000 (0:00:00.031) 0:00:00.050 ********
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv ok: [localhost]
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv PLAY [all] *********************************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv TASK [Gathering Facts] *********************************************************
bm-system-upgrade-node-10.252.151.3-8cee3ed5ff67fdeb1716d964ztv Wednesday 03 July 2024 01:39:04 +0000 (0:00:00.064) 0:00:00.114 ********
Solução alternativa: verifique a conetividade SSH com o nó de destino e, em seguida, use o seguinte runbook: FILE-R0020.
Erro de anexos múltiplos do Trident
Versões: 1.13.3
Sintomas: os pods e os PVCs podem ficar presos em nós diferentes com o pod preso na inicialização à espera do PVC.
Solução alternativa:
Verifique se o PVC tem um
deletionTimestamp:kubectl --kubeconfig KUBECONFIGget pvc -n <namespace> | grep deletionTimestampSe não existir
deletionTimestamp(migração de pods):- Verifique o VolumeAttachment do PVC para identificar onde o volume está anexado.
- Isolar os nós no cluster que não correspondem a este valor.
- Elimine o pod com falhas. Esta ação migra o POD de volta para o nó original.
Se houver um
deletionTimestamp(Volume deletion):- Verifique o VolumeAttachment do PVC para identificar onde o volume está anexado.
- No nó, produza o conteúdo do respetivo ficheiro de acompanhamento,
/var/lib/trident/tracking/PVC_NAME.json. - Valide se o dispositivo LUKS encontrado no campo devicePath do resultado do ficheiro de acompanhamento está efetivamente fechado. Este caminho não deve existir neste ponto:
stat DEVICE_PATH. Se o caminho ainda existir, está a ocorrer um problema diferente. - Valide se o número de série está mapeado para algum dispositivo de vários caminhos.
- Copie o valor no campo iscsiLunSerial do ficheiro de acompanhamento.
- Converta este valor no valor hexadecimal esperado:
echo ISCSI_LUN_SERIAL | xxd -l 12 -ps - Com este novo valor, verifique se a entrada de vários caminhos ainda existe:
multipath -ll | grep SERIAL_HEX. - Se não existir, elimine o ficheiro de acompanhamento.
Se existir, é apresentado um valor hexadecimal serial ligeiramente mais longo do que o que pesquisou. Registe este valor como MULTIPATH_SERIAL. Execute
multipath -ll MULTIPATH_SERIALe veja uma mensagem como esta:3600a09803831486f2d24575445314678 dm-32 NETAPP,LUN C-Mode size=8.0G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 alua' wp=rw |-+- policy='service-time 0' prio=50 status=active | |- 1:0:0:12 sde 8:64 active ready running | `- 2:0:0:12 sdt 65:48 active ready running `-+- policy='service-time 0' prio=10 status=enabled |- 3:0:0:12 sdbc 67:96 active ready running `- 4:0:0:12 sdbe 67:128 active ready runningExecute os seguintes comandos:
systemctl restart iscsidsystemctl restart multipathdmultipath -f MULTIPATH_SERIALecho 1 > /sys/block/BLOCK_DEVICE_NAME/device/delete
Execute o último comando de forma exclusiva para cada dispositivo de bloco.
Erro na configuração do IPsec
Versões: 1.13.4
Sintomas: a configuração IPsec do ONTAP encontra um erro devido a uma chave pré-partilhada (PSK) inválida que contém 0X, que é interpretada como uma string hexadecimal.
Pode ver um aviso como este:
Warning ONTAPIPSecConfiguration 3m47s (x22 over 75m) StorageEncryptionConnection Reconcile error on ONTAP IPSec configuration: failed to call IpsecPolicyCreateDefault: error message: "The specified pre-shared key \"0XxBDkG8iHoAlOc
nCUfHl0AKYzClgGCH\" is not valid because it is not a valid hexadecimal string."; error target: ""
Solução alternativa:
Obtenha as associações de encriptação de armazenamento:
kubectl get Storageencryptionconnections --kubeconfig ROOT_ADMIN_KUBECONFIGProcure a entrada com
Ready=Falsee anote o nome doPRESHAREKEY. O resultado pode ter o seguinte aspeto:NAME INVENTORYMACHINE STORAGEVIRTUALMACHINE STORAGECIDR PRESHAREDKEY READY AGE vm-5a77b2a2 vm-5a77b2a2 gpu-org-user 192.0.2.0/27 vm-5a77b2a2-pre-shared-key False 26hEsta máquina está a executar uma organização de GPU, por isso, elimine-a
secrets gpc-system/vm-5a77b2a2-pre-shared-keyemgpu-org-admin.Aguarde que o sistema recrie
secret/vm-5a77b2a2-pre-shared-key.Procure um trabalho com um padrão como
gpc-system/os-policy-config-host-ipsec-vm-5a77b2a2. Tenha em atenção que os últimos 8 carateres são gerados aleatoriamente. Depois de a chave estar novamente disponível, elimine a tarefa, comojobs gpc-system/os-policy-config-host-ipsec-vm-5a77b2a2m8xdlemgpu-org-admin.
A máquina virtual de armazenamento não foi criada
Versões: 1.13.5
Sintomas: o serviço Harbor em gpu-org não é iniciado devido a um problema com o aprovisionamento de volumes. Este problema é causado pelo file-storage-backend-controllerpod que faz referência a uma máquina de inventário inexistente.
Pode ver um erro do controlador de armazenamento como este, que indica que o
InventoryMachine não foi encontrado:
{"ts":1730135301218.1772,"caller":"controller/controller.go:329","msg":"Reconciler error","controller":"StorageEncryptionConnectionGenerator","controllerGroup":"baremetal.cluster.gke.io","controllerKind":"InventoryMachine","InventoryMachine":{"n
ame":"vm-26c89d33","namespace":"@org-1/org-1-admin"},"namespace":"@org-1/org-1-admin","name":"vm-26c89d33","reconcileID":"48ab38a8-385d-4fdb-bd7e-1212f287379c","err":"InventoryMachine.baremetal.cluster.gke.io \"vm-26c89d33\" not found"}
Solução alternativa:
- Elimine o pod
file-storage-backend-controller. - Permitir que o controlador de armazenamento obtenha novamente as máquinas de inventário presentes.
As redes intercluster de armazenamento não são reconciliadas
Versões: 1.13.5, 1.13.6
Sintomas: após uma atualização, o recurso personalizado StorageCluster no cluster de administrador raiz não fica pronto devido a uma configuração incorreta nas sub-redes entre clusters na especificação. O cluster de armazenamento comunica Not Ready e inclui um evento com este erro:
Reconciler error: failed to configure additional networks: failed to configure intercluster LIF: the \"\" Kind is not currently supported
Se este erro ocorrer, a reivindicação de sub-rede entre clusters usada pelo cluster de armazenamento não inclui o campo kind na referência. Ao inspecionar o recurso personalizado StorageCluster, encontra uma referência de reivindicação de sub-rede entre clusters com apenas um nome e um espaço de nomes, como este:
spec:
additionalNetworks:
- destinationSubnets:
- 10.252.112.0/20
name: backup-agent-storage-network
port: a0a
subnetConfig:
subnetClaimRef:
name: file-block-storage-intercluster-lif-subnet
namespace: root
types:
- BackupAgent
Solução alternativa: atualize a especificação StorageCluster para incluir o campo kind: SubnetClaim na referência da reivindicação de sub-rede:
spec:
additionalNetworks:
- destinationSubnets:
- 10.252.112.0/20
name: backup-agent-storage-network
port: a0a
subnetConfig:
subnetClaimRef:
kind: SubnetClaim
name: file-block-storage-intercluster-lif-subnet
namespace: root
types:
- BackupAgent
Depois de atualizar a especificação StorageCluster, reinicie a implementação file-storage-backend-controller e verifique se o cluster de armazenamento está pronto.
Gestão de clusters
A tarefa machine-init falha durante o aprovisionamento do cluster
Versões: 1.13.1
Sintomas:
Durante o aprovisionamento do cluster, a tarefa
machine-initdo segundo nó do plano de controlo falha com a seguinte mensagem:FAILED! => {"changed": true, "cmd": "/usr/bin/kubeadm join phase control-plane-prepare certs --config /dev/stdin --v 5".Ver os registos:
kubectl --kubeconfig=ADMIN_KUBECONFIG logs -p kube-apiserver-{first_node_name} -n kube-system | grep "etcdmain: open /etc/kubernetes/pki/etcd/ca.crt: permission denied"A saída mostra um resultado não vazio.
Solução alternativa:
Ative ou desative a autorização de
/etc/kubernetes/pki/etcd/ca.crt. Esta é uma operação muito sensível ao tempo. A mudança de autorização tem de ocorrer após a execução anterior da tarefamachine-init, mas antes da execução seguinte da tarefamachine-init, uma vez quemachine-initsubstitui a autorização de volta para a raiz.Reinicie o
etcdno segundo nó para recuperar oetcdno primeiro nó de um ciclo de falhas.
Depois de concluir estes dois passos, o kube-apiserver no primeiro nó começa a ser executado e a tarefa machine-init seguinte é bem-sucedida.
Sem conetividade do cluster de serviços ao contentor de armazenamento de objetos
Versões: 1.13.1
Sintomas: a ligação de um pod de base de dados em execução no cluster de serviço a um contentor de armazenamento de objetos no cluster de administração da organização falha.
Solução alternativa: siga as instruções no manual de procedimentos KUB-R0305.
A verificação prévia falha
Versões: 1.13.1
Sintomas: pode ver a seguinte mensagem no estado do objeto de cluster:
conditions:
message: Preflight check <cluster> failed
reason: PreflightCheckFailed
status: "False"
type: PreflightCheckSuccessful
Também deve ver um objeto PreflightCheck correspondente com o mesmo nome e espaço de nomes que o objeto de cluster que está presente há várias horas, enquanto o erro ou a falha indicados no objeto PreflightCheck já não são um problema conhecido.
Solução alternativa: elimine o objeto PreflightCheck.
A criação do node pool de worker do cluster de utilizadores falha
Versões: 1.13.5
Sintomas: a criação do node pool do worker do cluster de utilizadores pode deixar de responder para um destes tipos de máquinas:
- n2-standard-16-gdc
- n2-standard-32-gdc
- n2-highmem-16-gdc
- n2-highmem-32-gdc
Solução alternativa: elimine esse conjunto de nós e volte a criá-lo selecionando outros tipos de máquinas disponíveis na lista pendente da IU de criação do cluster de utilizadores.
Os clusters de utilizadores, quando recriados, podem ficar presos na reconciliação devido a uma limpeza inadequada
Versões: 1.13.x
Sintomas: quando são criados grupos de utilizadores com o mesmo nome de um grupo que foi eliminado anteriormente, podem ficar presos em Reconciling indefinidamente com o estado a mencionar a fase de instalação do suplemento ONE.
Solução alternativa: desinstale o suplemento helm CLUSTER_NAME-abm-overrides e reinicie a implementação managed-adm-controller. Siga os passos detalhados em
MKS-R0004.
Serviço de base de dados
Esta secção contém problemas conhecidos do serviço de base de dados.
Clonagem da base de dados do AlloyDB Omni bloqueada
Versões: todas as versões de 1.13.x
Sintomas: quando um utilizador clona um cluster do AlloyDB Omni a partir de um determinado momento, o cluster da base de dados clonado fica bloqueado com o erro DBSE0005 e não fica pronto. O recurso restore.alloydb correspondente está bloqueado na fase "ProvisionInProgress".
Solução alternativa: para contornar este problema, escolha cuidadosamente o momento a partir do COMPLETETIME das cópias de segurança bem-sucedidas.
Liste as cópias de segurança do AlloyDB Omni disponíveis para clonagem no servidor da API de gestão.
kubectl get backups.alloydb -n source-dbcluster-namespace
Exemplos de resultados:
NAMESPACE NAME PHASE COMPLETETIME
db1 backupplan1-20240908215001 Succeeded 2024-09-08T21:37:38Z
db1 backupplan1-20240909215001 Succeeded 2024-09-09T21:16:18Z
db1 backupplan1-20240910215001 Succeeded 2024-09-10T21:09:38Z
db1 backupplan1-20240911215001 Succeeded 2024-09-11T21:50:47Z
Escolha um valor COMPLETETIME como o momento específico para o clone. Tenha em atenção que a hora está no formato UTC.
A aplicação de IOPS afeta o desempenho do armazenamento
Versões: 1.13.1
Solução alternativa: para contornar este problema, siga uma destas opções:
- Aumente o tamanho do armazenamento.
- Substitua a quota de IOPS.
Erro de conciliação ao atualizar o subcomponente dbs-fleet
Versões: 1.13.3
Sintomas: quando atualiza a organização raiz de 1.13.1 para 1.13.3, pode ver um erro de conciliação. Verifique se existem erros de conciliação:
kubectl get subcomponent -n ${CLUSTER} -o json | jq -r '.items[] | select(.status.conditions[]?.reason == "ReconciliationError") | "Sub-Component: \(.metadata.name) - \(.status.conditions[]?.message)"'
O erro pode ter o seguinte aspeto:
Sub-Component: dbs-fleet - Reconciliation error: E0121 - rollback chart: no ControlPlaneAgentsVersion with the name "alloydbomni-v0.12.46" found
Solução alternativa: siga os passos no manual de procedimentos OCLCM-R0122.
A criação do DBCluster falha
Versões: 1.13.3
Sintomas: após a atualização para o 1.13.3, os novos DBclusters não são reconciliados, com o seguinte erro no estado:
status:
criticalIncidents:
- code: DBSE0001
createTime: ""
message: Internal. General Controller Error.
resource:
component: controller-default
location: {}
stackTrace:
- component: controller-default
message: 'DBSE0001: Internal. General Controller Error. Failed to reconcile
Postgres DBCluster [<name>] DBSE0001: Internal.
General Controller Error. target release is empty in ModuleInstance <name>'
Solução alternativa
Verifique se existem localrollout CRs que terminam em cpa-v0.12.46 e cpa-v0.12.51
no cluster de administração da organização. Por exemplo:
kubectl get localrollouts -A
dbs-fleet-system dp-alloydbomni-15-5.2--cpa-v0.12.46 true
dbs-fleet-system dp-oracle-19-10.0.0.0--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-13-8-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-14-5-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-15-2-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-alloydbomni-15-5.2--cpa-v0.12.51 true
dbs-fleet-system dp-oracle-19-10.0.0.0--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-13-8-v0.12.51--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-14-5-v0.12.51--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-15-2-v0.12.51--cpa-v0.12.51 true
Encontre e elimine localrollout CRs que terminem em cpa-v0.12.46, garantindo que outras localrollout CRs permanecem inalteradas.
kubectl get localrollouts -A | grep cpa-v0.12.46
Deve ser devolvida uma lista semelhante à seguinte:
dbs-fleet-system dp-alloydbomni-15-5.2--cpa-v0.12.46 true
dbs-fleet-system dp-oracle-19-10.0.0.0--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-13-8-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-14-5-v0.12.46--cpa-v0.12.46 true
dbs-fleet-system dp-postgresql-15-2-v0.12.46--cpa-v0.12.46 true
Elimine cada um deles:
kubectl delete -n dbs-fleet-system localrollout/dp-alloydbomni-15-5.2--cpa-v0.12.46
...
...
Verifique se os localrollout CRs que terminam em cpa-v0.12.51 ainda estão presentes:
NAMESPACE NAME PAUSED IN PROGRESS FINISHED
dbs-fleet-system dp-alloydbomni-15-5.2--cpa-v0.12.51 true
dbs-fleet-system dp-oracle-19-10.0.0.0--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-13-8-v0.12.51--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-14-5-v0.12.51--cpa-v0.12.51 true
dbs-fleet-system dp-postgresql-15-2-v0.12.51--cpa-v0.12.51 true
DNS
As DNSSEC têm de ser explicitamente desativadas em resolved.conf
Versões: 1.13.1, 1.13.3 e 1.13.4
Sintomas: a resolução de DNS falha em nós bare metal ou de VM. Para confirmar que a resolução de DNS está a falhar, estabeleça uma ligação SSH ao nó afetado e execute systemctl status systemd-resolved. O resultado contém linhas como
DNSSEC validation failed for question . IN SOA: no-signature.
Solução alternativa:
Adicione a seguinte linha a
/etc/systemd/resolved.confno nó afetado.DNSSEC=falseReinicie o serviço
systemd-resolved:systemctl restart systemd-resolved.service
Serviço portuário
Falha na criação do serviço Harbor
Versões: 1.13.6
Sintomas: a criação de uma instância do Harbor falha devido a uma incompatibilidade do espaço de nomes causada
por uma limitação de comprimento no nome do ServiceIsolationEnvironment. Pode ver uma mensagem como esta:
Failed to reconcile ODSDatabase: failed to create or update ODS ProjectNetworkPolicy: namespaces "g-dbs-PROJECT_NAME-HARBOR_INSTANCE_NAME" not found
Solução alternativa: encurte o nome da instância do Harbor para resolver o problema atual. Certifique-se de que o comprimento combinado de PROJECT_NAME e HARBOR_INSTANCE_NAME é inferior a 27 carateres.
A eliminação de instâncias do Harbor não elimina os espelhos do registo associados
Versões: 1.13.1, 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7, 1.13.8
Sintomas: a eliminação de instâncias do Harbor não elimina os espelhos do registo associados. O conjunto de nós pode estar bloqueado num estado de Provisioning. Isto deve-se ao facto de os espelhos do registo criados pelo controlador do MHS não serem eliminados quando as instâncias do Harbor são eliminadas.
Solução alternativa: tem de remover manualmente os espelhos do registo. Para mitigar este problema, siga estes passos:
- Estabeleça ligação ao cluster de administração da organização. Para mais informações, consulte a arquitetura de cluster do GDC.
Execute este script para remover todos os espelhos de registo que correspondam ao valor da variável de ambiente
HARBOR_INSTANCE_URLde todos os clusters do Kubernetes que tenham a etiquetalcm.private.gdc.goog/cluster-type=user:LABEL="lcm.private.gdc.goog/cluster-type=user" ENDPOINT=HARBOR_INSTANCE_URL while read -r out; do info=${out% *} ns_name=${info%:*} name=${ns_name##*/} ns=${ns_name%%/*} INDEX=$(kubectl get cluster user-vm-1 -n user-vm-1-cluster -ojson | jq '.spec.nodeConfig.registryMirrors | map(.endpoint=='\"$ENDPOINT\"') | index(true)') kubectl patch clusters "${name}" -n "${ns}" --type=json -p="[{'op': 'remove', 'path': '/spec/nodeConfig/registryMirrors/$INDEX'}]" done <<< $(kubectl get clusters -l "$LABEL" -o jsonpath="$JSONPATH" -A)Substitua
HARBOR_INSTANCE_URLpelo URL da sua instância do Harbor.
Módulo de segurança de hardware
As licenças de avaliação desativadas do HSM ainda são detetáveis
Versões: 1.13.1, 1.13.3-1.13.11
Sintomas: devido a um problema conhecido existente no CipherTrust Manager, as licenças de avaliação desativadas continuam detetáveis e podem acionar avisos de expiração falsos.
Solução alternativa: consulte o artigo HSM-R0003 para validar as licenças normais ativas e eliminar as licenças de avaliação desativadas.
Fuga de descritores de ficheiros do anfitrião do HSM
Versões: 1.13.x
Sintomas: se os HSMs forem executados durante mais de 30 dias, uma fuga de descritores de ficheiros pode fazer com que o serviço host-daemon deixe de responder, o que resulta num erro ServicesNotStarted.
Solução alternativa: reinicie o serviço host-daemon. Para o fazer, peça ao seu operador de infraestrutura (IO) para estabelecer ligação ao HSM através do SSH como utilizador ksadmin e executar o seguinte comando:
sudo systemctl restart host-daemon
Se isso não funcionar, a sua IO pode reiniciar o HSM não saudável.
Os certificados de HSM expiraram
Versões: 1.13.11
Sintomas: quando atualiza uma organização, pode ver um aviso como este:
Warning Unsuccessful 50m OrganizationUpgrade 1 error occurred:
* UPG1300: ABM upgrade expected to finish within 2h0m0s but hasn't after 13h45m23.442682119s, last message was: Cluster upgrade for system cluster: in-progress
O org-1-system-cluster está bloqueado numa atualização da versão do ABM devido a certificados HSM (módulo de segurança de hardware) expirados.
Também pode ver um erro como o deste exemplo no servidor iLO, StorageGRID ou ONTAP do HPE:
Not able to connect SSL to Key Manager server at IP_ADDRESS
Solução alternativa:
Alterne manualmente o certificado da CA de raiz e da interface Web com ksctl:
- Pausar todas as CRs
HSM,HSMClustereHSMTenant. Crie uma nova AC raiz com atributos copiados da antiga. Encontre o ID de CA antigo com o
ksctl ca locals list. Um exemplo pode ter o seguinte aspeto:ksctl ca locals create --cn example.com --copy-from-ca 6d7f7fa7-df81-44b7-b181-0d3e6f525d46 { "id": "b0516120-6b4c-40ed-93f4-35e9fdc690e7", "uri": "kylo:kylo:naboo:localca:b0516120-6b4c-40ed-93f4-35e9fdc690e7", "account": "kylo:kylo:admin:accounts:kylo", "createdAt": "2025-06-04T18:46:25.728332Z", "updatedAt": "2025-06-04T18:46:25.728332Z", "state": "pending", "csr": "-----BEGIN CERTIFICATE REQUEST-----\nMIHQMHgCAQAwFjEUMBIGA1UEAxMLZXhhbXBsZS5jb20wWTATBgcqhkjOPQIBBggq\nhkjOPQMBBwNCAAR5pwW1UC1JNg79gkjK2rvnmgaZpGNwb4VxYN3dQCieHtHlYJUu\nQWk56RB9oPw4SKkf/Y1ZwEI4m2mx3d9XFHU7oAAwCgYIKoZIzj0EAwIDSAAwRQIh\nANWTPjkJNcY56lSARN714EBa1gLuvxJlMENVHKEbanooAiA1BQ3sz7mxykL/1t7v\nqRlIpxKGrhw56XC67vz4NvZ4Kg==\n-----END CERTIFICATE REQUEST-----\n", "subject": "/CN=example.com", "notBefore": "0001-01-01T00:00:00Z", "notAfter": "0001-01-01T00:00:00Z", "sha1Fingerprint": "21F033940A65657CC6C2C1EA0BB775F14FD5D193", "sha256Fingerprint": "31EF6E1316DF039F77DDDB051890CDEBBF67BBE8A14AEE04E01716D30DC90937", "sha512Fingerprint": "F200817829A23F30239C33DC2CED8C889954A252EBA2CC12A3977FD5F91239ED7A2A4CCF0EA3D90D50CEF7A779E5C487798AAC75617DB2F29AF7F4794AD66F17", "purpose": {} }Assine automaticamente a nova AC com uma duração de um ano. Um exemplo pode ter o seguinte aspeto:
ksctl ca locals self-sign --id b0516120-6b4c-40ed-93f4-35e9fdc690e7 -x 365 { "id": "b0516120-6b4c-40ed-93f4-35e9fdc690e7", "uri": "kylo:kylo:naboo:localca:b0516120-6b4c-40ed-93f4-35e9fdc690e7", "account": "kylo:kylo:admin:accounts:kylo", "createdAt": "2025-06-04T18:46:25.728332Z", "updatedAt": "2025-06-04T18:52:51.976847092Z", "state": "active", "csr": "", "cert": "-----BEGIN CERTIFICATE-----\nMIIBbTCCAROgAwIBAgIRAMyQJHhs4i2uwj4ghilVFJQwCgYIKoZIzj0EAwIwFjEU\nMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMjUwNjAzMTg1MjUxWhcNMjYwNjA0MTg1\nMjUxWjAWMRQwEgYDVQQDEwtleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49\nAwEHA0IABHmnBbVQLUk2Dv2CSMrau+eaBpmkY3BvhXFg3d1AKJ4e0eVglS5BaTnp\nEH2g/DhIqR/9jVnAQjibabHd31cUdTujQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\nHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQ9uCnTZ+lHhiLx3f1xEn0+JC5J+TAKBggq\nhkjOPQQDAgNIADBFAiBsSiB5BRBJ8TZQ6O5TzMBgDoWzTZVMVXNLdZUiqHtcDwIh\nAOnqKNq5ytWLvMsBQKhulGgqqw1dccpkJJz01n3Smzyp\n-----END CERTIFICATE-----\n", "serialNumber": "271910941595574900448900837122680099988", "subject": "/CN=example.com", "issuer": "/CN=example.com", "notBefore": "2025-06-03T18:52:51Z", "notAfter": "2026-06-04T18:52:51Z", "sha1Fingerprint": "1114AF5ED6DF7D4A9F83A0F8DF5DFEF041A81622", "sha256Fingerprint": "93BAD9D44B320EFB446F65FE2A4F3A341147D15AF5315C000ADF644A3C1347A7", "sha512Fingerprint": "07386D7461B4013304CF0E0830517EA433E09EAB146A9F106F1B0DED4BBEC78BB4C89EAFAEC37178FE98AC4ACA234B98290D240607D5EA896F03DABF3DB56D5C", "purpose": { "client_authentication": "Enabled", "user_authentication": "Enabled" } }Atualize a interface Web para usar esta nova CA para a geração automática de certificados. Um exemplo pode ter o seguinte aspeto:
ksctl interfaces modify --name web --auto-gen-ca-id kylo:kylo:naboo:localca:b0516120-6b4c-40ed-93f4-35e9fdc690e7 { "id": "61aab814-2821-43ac-b652-41784b7b06bf", "name": "web", "mode": "tls-cert-opt-pw-opt", "cert_user_field": "CN", "auto_gen_ca_id": "kylo:kylo:naboo:localca:b0516120-6b4c-40ed-93f4-35e9fdc690e7", "trusted_cas": { "local": [ "kylo:kylo:naboo:localca:6d7f7fa7-df81-44b7-b181-0d3e6f525d46" ] }, "createdAt": "2023-11-13T22:46:56.251881Z", "updatedAt": "2025-06-04T19:02:12.710563Z", "port": 443, "network_interface": "all", "interface_type": "web", "minimum_tls_version": "tls_1_2", "maximum_tls_version": "tls_1_3", "local_auto_gen_attributes": { "cn": "web.ciphertrustmanager.local", "dns_names": [ "web.ciphertrustmanager.local" ], ...Gere um novo certificado de interface Web, assinado pela nova AC. A flag
--urlé o IP de gestão do HSM (dekubectl get hsm -n gpc-system). Um exemplo pode ter o seguinte aspeto:ksctl interfaces auto-gen-server-cert --name "web" --url=https://10.128.52.18 { "certificates": "-----BEGIN CERTIFICATE-----\nMIICljCCAjygAwIBAgIRANPuw/42oHZAb9nzAYnrf9MwCgYIKoZIzj0EAwIwFjEU\nMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMjUwNjAzMTkwOTU5WhcNMjYwNjA0MTg1\nMjUxWjBjMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVFgxDzANBgNVBAcTBkF1c3Rp\nbjEPMA0GA1UEChMGVGhhbGVzMSUwIwYDVQQDExx3ZWIuY2lwaGVydHJ1c3RtYW5h\nZ2VyLmxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEy9T8uGa/N9ruRJMy\nxy4an+G/OyZjB/8nth1BPxpw5orljbTuOh9toS9c9FiOuMQQ13mGJSImadLP33PR\ngdXcHaOCARwwggEYMA4GA1UdDwEB/wQEAwIDiDATBgNVHSUEDDAKBggrBgEFBQcD\nATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFD24KdNn6UeGIvHd/XESfT4kLkn5\nMGIGA1UdEQRbMFmCHHdlYi5jaXBoZXJ0cnVzdG1hbmFnZXIubG9jYWyBIXRlY2hu\naWNhbC5zdXBwb3J0QHRoYWxlc2dyb3VwLmNvbYcECoA0EocECgADAocErBMjAocE\nrBMLAjBeBgNVHR8EVzBVMFOgUaBPhk1odHRwOi8vY2lwaGVydHJ1c3RtYW5hZ2Vy\nLmxvY2FsL2NybHMvYjA1MTYxMjAtNmI0Yy00MGVkLTkzZjQtMzVlOWZkYzY5MGU3\nLmNybDAKBggqhkjOPQQDAgNIADBFAiEAusSKWMoFeTsK+OrbURch7XtMR31XD45E\n+w+wjf2VAk4CIAsHytphizTFQks4qqOMaHm6Ap58uU0HMNGSm0WW6mQY\n-----END CERTIFICATE-----\n-----BEGIN CERTIFICATE-----\nMIIBbTCCAROgAwIBAgIRAMyQJHhs4i2uwj4ghilVFJQwCgYIKoZIzj0EAwIwFjEU\nMBIGA1UEAxMLZXhhbXBsZS5jb20wHhcNMjUwNjAzMTg1MjUxWhcNMjYwNjA0MTg1\nMjUxWjAWMRQwEgYDVQQDEwtleGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49\nAwEHA0IABHmnBbVQLUk2Dv2CSMrau+eaBpmkY3BvhXFg3d1AKJ4e0eVglS5BaTnp\nEH2g/DhIqR/9jVnAQjibabHd31cUdTujQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\nHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQ9uCnTZ+lHhiLx3f1xEn0+JC5J+TAKBggq\nhkjOPQQDAgNIADBFAiBsSiB5BRBJ8TZQ6O5TzMBgDoWzTZVMVXNLdZUiqHtcDwIh\nAOnqKNq5ytWLvMsBQKhulGgqqw1dccpkJJz01n3Smzyp\n-----END CERTIFICATE-----\n" }Neste momento, o
openssl s_client -showcerts -connect 10.128.52.18:443 2>/dev/null | openssl x509 -textcontinua a apresentar o certificado antigo. Tem de reiniciar o HSM para obter o novo certificado.ssh -i ~/.ksctl/ssh-privatekey ksadmin@10.128.52.18 sudo rebootAgora,
openssl s_client -showcerts -connect 10.128.52.18:443 2>/dev/null | openssl x509 -textmostra o novo certificado.Elimine a CA antiga do CR do HSM:
kubectl edit hsm zv-aa-hsm01 -n gpc-system and delete hsm.Spec.RootCACertificatesRetome o HSM:
kubectl annotate hsm zv-aa-hsm01 -n gpc-system hsm.security.private.gdc.goog/paused-Certifique-se de que o HSM fica em bom estado.
Repita estes passos para os outros dois HSMs. Já têm a nova AC raiz autocertificada porque a AC é partilhada entre HSMs num cluster. Ignore os passos 2 e 3, mas repita os passos 4 a 8.
Siga a tarefa de esforço HSM T0008 de rotação de CA para automatizar a rotação de todos os certificados, mas ignore o passo Finalize a rotação adicionando uma nova anotação de rotação a
hsmcluster, onde oca-rotation-finalizing annotationé adicionado.
Carregue o novo nome da AC para o iLO:
- Na interface iLO, abra a página Administration - Key Manager e clique no separador Key Manager.
- Mude o nome do certificado.
- Faça um reinício a frio.
- Verifique se a negociação de SSL volta a funcionar.
Gestão de identidade e de acesso
Os pods gatekeeper-audit no espaço de nomes opa-system são reiniciados com frequência
Versões: 1.13.3
Sintomas: verifique o estado dos pods gatekeeper-audit-*** no espaço de nomes opa-system:
kubectl get pods/gatekeeper-audit-POD_ID -n opa-system-NAMESPACE_ID -n opa-system
O resultado pode ter o seguinte aspeto:
NAME READY STATUS RESTARTS AGE
gatekeeper-audit-58d8c4c777-7hzvm 2/2 Running 987 (12h ago) 12d
Este problema é causado por limites de recursos baixos.
Infraestrutura como código (IAC)
A criação excessiva de tokens do Gitlab corre o risco de preencher as bases de dados do Gitlab
Versões: 1.13.1
Sintomas: o subcomponente iac-manager cria repetidamente um novo token para o utilizador configsync-ro, mesmo quando não é necessário. Isto pode levar ao preenchimento da base de dados do Gitlab e tornar o IAC inacessível. O pod pg-gitlab-database-0 no espaço de nomes gitlab-system
pode não conseguir iniciar e apresentar eventos como:
Warning Unhealthy 84s (x18 over 4m14s) kubelet Startup probe failed: /bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)
psql: error: connection to server at "localhost" (127.0.0.1), port 5432 failed: FATAL: could not write init file
Solução alternativa:
Trabalhe em articulação com o seu contacto da Google para obter hotfix_3 para a versão 1.13.1 e aplique-a.
Sistema de gestão de chaves (KMS)
A alteração do tipo de chave principal torna todas as chaves existentes inválidas
Versões: 1.13.x
Sintomas: assim que uma organização é criada, o KMS é aprovisionado automaticamente com uma chave raiz de software. Para migrar de uma chave de raiz de software para uma chave VMT, os utilizadores substituem um subcomponente. Isto altera o tipo de chave raiz, o que torna todas as chaves de software existentes no KMS inválidas.
Solução alternativa: se possível, evite atualizar o tipo de chave raiz. Se atualizar o tipo de chave principal, todas as chaves existentes são invalidadas.
kms-rootkey-controller CrashLoopBackOff devido a OOMKILL
Versões: 1.13.1
Sintomas: quando a utilização de memória kms-rootkey-controller excede o limite de 600Mi, o controlador entra num estado CrashLoopBackOff devido a um estado OOMKilled.
Solução alternativa: crie um SubcomponentOverride para atualizar o limite de memória para 1500Mi. Para ver instruções, consulte o KMS Runbook 0007. Depois de concluir os passos de pré-requisito do manual de procedimentos, execute os seguintes comandos:
Crie um recurso personalizado
SubcomponentOverride:cat << EOF > ~/kms-rootkey-subcomponentoverride.yamlNo exemplo seguinte, vê um
SubcomponentOverriderecurso personalizado completo:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: kms-rootkey-subcomponentoverride namespace: root spec: subComponentRef: kms-rootkey-cm backend: operableParameters: resourcesLimit: memory: 1500Mi EOFAplique o recurso
SubcomponentOverride:kubectl --kubeconfig ${KUBECONFIG:?} apply -f ~/kms-rootkey-subcomponentoverride.yaml kubectl --kubeconfig ${KUBECONFIG:?} describe subcomponentoverride kms-rootkey-subcomponentoverride -n root
Registo
O registador de auditoria do armazenamento de objetos não consegue resolver o anfitrião de DNS
Versões: 1.13.x
Sintomas:
No cluster de administrador raiz, a implementação obs-system/log-remote-logger contém vários erros, como os seguintes:
E1220 17:00:25.247258 1 manager.go:183] Failed to fetch obj audit logs for gce-gpcstgesite01: failed to get authorization token for Grid Management API: Post "https://objectstorage-grid-mgmt.gpc-system.svc.cluster.local/api/v3/authorize": dial tcp: lookup objectstorage-grid-mgmt.gpc-system.svc.cluster.local: no such host
Solução alternativa: corrija a implementação do obs-system/log-remote-logger com o seguinte comando:
kubectl --kubeconfig ${KUBECONFIG:?} patch deployment log-remote-logger -n obs-system -p '{"spec":{"template":{"spec":{"dnsPolicy":"ClusterFirstWithHostNet"}}}}'
O HaaS Logger mostra erros no cluster de administrador raiz
Versões: 1.13.x
Sintomas:
No cluster de administrador raiz, a implementação obs-system/log-remote-logger contém vários erros, como os seguintes:
E0109 17:33:08.917876 1 manager.go:156] Failed to run logger haas: Failed to get log targets: failed to list harborinstances in the cluster: failed to get API group resources: unable to retrieve the complete list of server APIs: artifactregistry.gdc.goog/v1: the server could not find the requested resource
Solução alternativa: atualize para a versão 1.13.8 para corrigir o erro. Em alternativa, modifique a implementação do obs-system/log-remote-logger da seguinte forma:
Nos argumentos do contentor remote-logger, atualize a flag --disabled-loggers para incluir a santricity e o HaaS:
YAML
args:
- --disabled-loggers=santricity,haas
Falha no registador Santricity
Versões: 1.13.x
Sintomas:
No cluster de administrador raiz, a implementação obs-system/log-remote-logger contém vários erros, como os seguintes:
E0109 17:33:10.931737 1 manager.go:183] Failed to fetch santricity audit logs for lb-aa-objs01: failed to get CA cert: failed to get ClusterIssuer internal-root-ca-issuer: no kind is registered for the type v1.ClusterIssuer in scheme "pkg/logging/manager.go:32"
Solução alternativa: atualize para a versão 1.13.8 para corrigir o erro.
Os registos do destino de registo estão a ser enviados para o projeto incorreto
Versões: 1.13.x
Sintomas: os registos do obs-system/oplogs-forwarder DaemonSet mostram avisos semelhantes aos seguintes:
oplogs-forwarder-2xrfw [2025/01/16 21:02:09] [ warn] [output:loki:log_output_loki_dbs_fleet_system_dbs_fleet] Tenant ID is overwritten platform-obs -> infra-obs
oplogs-forwarder-kxf8p [2025/01/16 21:05:23] [ warn] [output:loki:log_output_loki_workbench_system_nws_lt] Tenant ID is overwritten infra-obs -> platform-obs
Estes avisos fazem com que os registos sejam encaminhados para o projeto errado (ID do inquilino). Este problema tem origem num erro conhecido no Fluent Bit. Para mais informações, consulte o problema do Fluent Bit no GitHub.
Solução alternativa: atualize para a versão 1.13.8 para corrigir o erro.
Os registos de auditoria do espaço de nomes da plataforma não são visíveis para o PA
Versões: 1.13.x
Sintomas: os registos de auditoria do espaço de nomes da plataforma são visíveis para o operador de infraestrutura (IO) em vez do administrador da plataforma (PA).
Solução alternativa: adicione manualmente a etiqueta observability.gdc.goog/auditlog-destination=pa ao espaço de nomes platform em todos os clusters da organização. Siga estes passos para implementar esta solução alternativa manual:
Defina
KUBECONFIGpara o cluster de destino.Adicione a etiqueta necessária ao espaço de nomes:
KUBECONFIG=${KUBECONFIG:?} kubectl label namespace platform observability.gdc.goog/auditlog-destination=pa --overwriteConfirme que a etiqueta foi adicionada com êxito:
KUBECONFIG=${KUBECONFIG:?} kubectl label namespace platform --list
Os pods não conseguem inicializar os contentores
Versões: 1.13.x
Sintomas: não é possível criar os pods, e é apresentado um erro semelhante ao seguinte:
Events:
│ Type Reason Age From Message │
│ ---- ------ ---- ---- ------- │
│ Warning FailedCreatePodSandBox 10m (x2080 over 7h40m) kubelet Failed to create pod sandbox: mkdir /var/log/pods/org-1_managed-asm-local-readiness-xq75d_9a3275d7-5f16-4d67-8f4a-38fe0993be4a: no space left on device │
Estes erros impedem que os pods sejam iniciados num nó específico. O comportamento observado surge de um caso limite conhecido em que o ficheiro de estado logrotate-daemon fica bloqueado, o que impede que o daemon execute a rotação de ficheiros esperada. Para confirmar este erro, siga estes passos:
Defina
KUBECONFIGpara o cluster de destino.Identifique a instância
anthos-audit-logs-forwarder-xxxxagendada no nó.KUBECONFIG=${KUBECONFIG:?} kubectl get po -n obs-system -o wide | grep anthos-audit-logs-forwarderObtenha registos da instância
anthos-audit-logs-forwarder-xxxxagendada no nó para validação.KUBECONFIG=${KUBECONFIG:?} kubectl logs -n obs-system anthos-audit-logs-forwarder-xxxx -c logrotate-daemon | grep "state file /var/lib/logrotate/status is already locked"
Solução alternativa:
Siga estes passos para resolver este problema:
Faça a recuperação manual do espaço em disco no diretório
/var/logdo nó.Defina
KUBECONFIGpara o cluster de destino.Identifique o nó de destino no cluster.
KUBECONFIG=${KUBECONFIG:?} kubectl get no -o wideLigue-se ao nó através de SSH e liberte manualmente espaço no diretório
/var/logno nó. Ologrotatefaz a gestão dos ficheiros nestes diretórios./var/log/audit/*/*/*/audit.log /var/log/audit*/*/*.log /var/log/auditproxy-*/*.log /var/log/global-api-*/audit.log /var/log/ceph/ceph.audit.log /var/log/fanout/audit/*.log /var/log/fanout/audit/*/*.log /var/log/netflow/*.log /var/log/fanout/operational/*.log /var/log/fanout/operational/*/*.logVerifique se existem ficheiros de registo invulgarmente grandes (com mais de 100 MB) ou ficheiros com mais de alguns dias. Quando tiver o ficheiro de destino, pode truncar os registos da seguinte forma:
truncate -s 1G <target_file>Identifique a instância
anthos-audit-logs-forwarder-xxxxagendada no nó.KUBECONFIG=${KUBECONFIG:?} kubectl get po -n obs-system -o wide | grep anthos-audit-logs-forwarderReinicie a instância
anthos-audit-logs-forwarder-xxxxagendada no nó.KUBECONFIG=${KUBECONFIG:?} kubectl delete po -n obs-system anthos-audit-logs-forwarder-xxxx
Marketplace
A obtenção de imagens do Prisma Cloud falha
Versões: 1.13.7
Sintomas: a criação de uma instância do serviço Prisma Cloud a partir do Marketplace falha. O problema é causado por uma etiqueta de imagem incorreta.
Solução alternativa:
Edite a implementação
twistlock-consolepara modificar a etiqueta de imagem:KUBECONFIG=${KUBECONFIG:?} kubectl edit deployment twistlock-console -n ${PROJECT:?}Encontre a seguinte linha:
image: HARBOR_IP/library/twistlock/console:console_33_01_137Substituir
console_33_01_137porconsole_33.01.137:image: HARBOR_IP/library/twistlock/console:console_33.01.137Verifique se o pod é executado corretamente:
KUBECONFIG=${KUBECONFIG:?} kubectl get pods -n ${PROJECT:?}O resultado pode ter o seguinte aspeto:
NAME READY STATUS RESTARTS AGE twistlock-console-58b578cbf4-5nvbk 1/1 Running 0 2m45s
Monitorização
Número elevado de alertas criados no ServiceNow
Versões: 1.13.x
Sintomas:
Depois de configurar a monitorização para enviar alertas para o ServiceNow através das tarefas de esforço MON-T0016 e MON-T1016, é criado automaticamente um número elevado de incidentes no ServiceNow.
O problema tem as seguintes características:
- Todos os incidentes estão vazios.
- Apenas o cluster de administrador raiz e a organização
gdchservicespodem enviar alertas para o ServiceNow.
Solução alternativa: siga a tarefa de esforço MON-T0018 imediatamente após executar as tarefas de esforço MON-T0016 e MON-T1016.
Vários alertas duplicados criados no ServiceNow
Versões: 1.13.x
Sintomas:
Depois de configurar a monitorização para enviar alertas para o ServiceNow através das tarefas de esforço MON-T0016, MON-T1016 e MON-T0018, são criados vários alertas duplicados no ServiceNow.
O problema tem as seguintes características:
- Estão a ser criados vários incidentes duplicados para alguns alertas, mesmo após a aplicação da tarefa de esforço MON-T0018.
Solução alternativa: siga a tarefa de esforço MON-T0019 imediatamente após executar as tarefas de esforço MON-T0016, MON-T1016 e MON-T0018.
Não é possível ver as métricas da Vertex AI
Versões: 1.13.1
Sintomas: as métricas não são emitidas pelo pod dvs-frontend-server.
Solução alternativa: a versão 1.13.1 não suporta métricas encriptadas para os serviços da Vertex AI. Se o serviço Vertex AI não for ativado durante mais de uma hora, reinicie o pod do controlador mon-admin.
Erro de conciliação em mon-cortex
Versões: 1.13.1, 1.13.9
Sintomas: o pod mon-cortex tem um erro de conciliação. Obtenha o estado do agrupamento mon-cortex:
kubectl get subcomponent mon-cortex -n gpu-org-1-system-cluster
O resultado pode ter o seguinte aspeto:
NAME AGE STATUS
mon-cortex 15h ReconciliationError
Pode ser registada uma mensagem como esta:
message: 'E0100 - deploy: failed to install chart: release mon-cortex-backend
failed, and has been uninstalled due to atomic being set: context deadline
exceeded'
Solução alternativa:
Verifique que cápsula do Cortex está a apresentar uma mensagem como esta:
Warning FailedMount 11s kubelet MountVolume.MountDevice failed for volume "pvc-0ad24fdc-52ec-4080-8ac0-5784989d1da3" : rpc error: code = Internal desc = rpc error: code = Internal desc = failed to stage volume: could not open LUKS device; could not open LUKS device; could not open LUKS device; exit status 1Elimine o PVC associado a esse pod e reinicie-o.
O agrupamento metrics-server-exporter no cluster do sistema está em ciclo de falhas de sistema
Versões: 1.13.1
Sintomas: o pod metrics-server-exporter no cluster do sistema está em ciclo
infinito com OOMKilled, mas não parece estar a atingir o respetivo limite. Diagnosticar
o erro:
kubectl --kubeconfig $KUBECONFIG describe pod -n mon-system metrics-server-exporter-<id>
O resultado pode ter o seguinte aspeto:
[...]
Containers:
[...]
otel-collector:
Container ID: containerd://3a1373de4880cde9e09aa9cacc109a8059ec29d9355aef1f03735fdcdcd45596
Image: gcr.io/private-cloud-staging/opentelemetry-collector:v0.93.0-gke.2
Image ID: gcr.io/private-cloud-staging/opentelemetry-collector@sha256:2b14f8fe936e725efca24dace1abcc26449d996b1480eab1b25d469a16aac221
Port: 3113/TCP
Host Port: 0/TCP
Command:
/otelcol
--config=/conf/otel-collector-config.yaml
--feature-gates=pkg.translator.prometheus.PermissiveLabelSanitization
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Started: Thu, 20 Jun 2024 15:55:35 +0000
Finished: Thu, 20 Jun 2024 15:56:57 +0000
Ready: False
Restart Count: 570
Limits:
cpu: 200m
memory: 200Mi
Requests:
cpu: 100m
memory: 100Mi
Environment: <none>
Solução alternativa: reduza a quantidade de dados publicados no ponto final de métricas eliminando o pod e permitindo que seja reiniciado. A time-series antiga mantida na memória
é limpa quando o faz, o que reduz a memória necessária.
Ignore as mensagens de erro de conciliação ObservabilityPipeline
Versões: 1.13
Sintomas:
O objeto ObservabilityPipeline mostra registos Reconciler error semelhantes aos seguintes no pod root-admin-controller:
{"msg":"Reconciler error","controller":"observabilitypipeline","ObservabilityPipeline":{"name":"default","namespace":"infra-obs"},"namespace":"infra-obs","name":"default","err":"unable to reconcile project level ObservabilityPipeline: 1 error occurred:\n\t* failed to get system cluster client to install per project overrides: root admin cluster has no system cluster\n\n"}
Solução alternativa:
Ignore os registos que satisfazem todas as seguintes condições:
"controller":"observabilitypipeline""namespace":"infra-obs""name":"default""err"contémfailed to get system cluster client to install per project overrides: root admin cluster has no system cluster
Se estiver a depurar um alerta devido a erros de conciliação elevados, ignore estes registos, uma vez que são falsos negativos.
O mon-prober-backend-prometheus-config ConfigMap é reposto
Versões: 1.13.0 e 1.13.1
Sintomas:
- O alerta
MON-A0001é acionado. O ConfigMap
mon-prober-backend-prometheus-configé reposto para não incluir tarefas de sondagem, por exemplo:apiVersion: v1 data: prometheus.yaml: | remote_write: - url: http://cortex-tenant.mon-system.svc:9009/push name: cortex-tenant kind: ConfigMap metadata: creationTimestamp: "2024-06-26T14:55:07Z" name: mon-prober-backend-prometheus-config namespace: mon-system resourceVersion: "6606787" uid: 1a495af0-1fdc-40b8-845b-4976e3b0f899
Solução alternativa:
Siga estes passos para resolver o problema:
Defina as seguintes variáveis de ambiente:
KUBECONFIG: o caminho para o ficheiro kubeconfig no cluster.TARGET_CLUSTER: o nome do cluster onde está a resolver o problema.
Pause o subcomponente
mon-proberem todos os clusters:kubectl --kubeconfig $KUBECONFIG annotate subcomponent mon-prober -n $TARGET_CLUSTER lcm.private.gdc.goog/paused=truePor exemplo:
kubectl --kubeconfig ~/root-admin-kubeconfig annotate subcomponent mon-prober -n my-org lcm.private.gdc.goog/paused=trueReinicie o controlador do administrador do MON em cada cluster de administrador:
kubectl --kubeconfig $KUBECONFIG rollout restart deploy -n obs-system mon-admin-backend-controllerO Prober ConfigMap é preenchido à medida que cada teste é registado.
Siga o manual de procedimentos MON-R2009 para silenciar o alerta
MON-A0001,Blackbox monitoring metrics pipeline down, porque este alerta vai continuar a ser acionado.
Cortex store gateway component OOMKilled crashloop
Versões: 1.13.3
Sintomas: se vir erros no Grafana ao carregar métricas ou se as métricas não forem carregadas, o pod cortex-store-gateway pode estar em ciclo de falhas.
Para diagnosticar o pod cortex-store-gateway e verificar se está em ciclo de falhas,
reveja o respetivo estado:
kubectl --kubeconfig SYSTEM_CLUSTER_KUBECONFIG describe pod \
-l app=cortex-store-gateway -n mon-system
Substitua SYSTEM_CLUSTER_KUBECONFIG pelo caminho para o ficheiro kubeconfig do cluster do sistema.
Se o pod estiver num ciclo de falhas, o resultado tem o seguinte aspeto:
State: Waiting
Reason: CrashLoopBackOff
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
Solução alternativa: aumente temporariamente o limite de memória de cortex-store-gateway usando um SubcomponentOverride. Para obter detalhes sobre a implementação de um
SubComponentOverride, consulte o manual de procedimentos MON-R2008.
Segue-se um exemplo de um SubcomponentOverride com um limite de memória especificado:
apiVersion: lcm.private.gdc.goog/v1
kind: SubcomponentOverride
metadata:
name: mon-cortex-memory-bump
namespace: org-1-system-cluster
spec:
subComponentRef: 'mon-cortex'
backend:
operableParameters:
storeGateway:
resourcesLimit:
memory: 16Gi
Deixe a substituição no lugar até que todos oscortex-store-gateway pods tenham um Ready
estado e certifique-se de que o subcomponente mon-cortex não está pausado:
Verifique se os auriculares
cortex-store-gatewaytêm o estadoReady:kubectl --kubeconfig SYSTEM_CLUSTER_KUBECONFIG get statefulset \ -n mon-system cortex-store-gatewayO resultado tem o seguinte aspeto se todos os agrupamentos tiverem o estado
Ready:NAME READY AGE cortex-store-gateway 3/3 70dA coluna
READYtem de apresentar um valorN/Npara que todos os pods estejam prontos. Caso contrário, mostra valores como1/3ou2/3.Certifique-se de que o subcomponente
mon-cortexnão está pausado numa determinada organização:kubectl --kubeconfig ORG_ADMIN_KUBECONFIG describe subcomponent \ -n SYSTEM_CLUSTER mon-cortex | grep pausedSubstitua o seguinte:
ORG_ADMIN_KUBECONFIG: o caminho para o ficheiro kubeconfig do cluster de administrador da organização.SYSTEM_CLUSTER: o nome do cluster do sistema.
Se o subcomponente estiver pausado, o resultado mostra a seguinte linha:
lcm.private.gdc.goog/paused: trueCaso contrário, a saída está vazia.
Kube control-plane metrics proxy image pull backoff in user cluster
Versões: 1.13.3
Sintomas: quando as métricas relacionadas com o kube-scheduler ou o kube-controller-manager (por exemplo, as métricas scheduler_pending_pods e workqueue_depth) não estão visíveis no Grafana, pode haver um problema de recuo de obtenção de imagens com o pod kube-control-plane-metrics-proxy.
Para diagnosticar o pod kube-control-plane-metrics-proxy e verificar se tem um problema de recuo de obtenção de imagens, reveja o respetivo estado:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG describe pod \
-l k8s-app=kube-control-plane-metrics-proxy -n obs-system
Substitua USER_CLUSTER_KUBECONFIG pelo caminho para o ficheiro kubeconfig do cluster de utilizador.
Se o pod tiver um problema de recuo de obtenção de imagens, o resultado é semelhante ao seguinte exemplo:
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
Solução alternativa: siga estes passos para resolver o problema:
Extrair a imagem
gcr.io/gke-release/asm/proxyv2:1.20.4-asm.0do projetogpc-system-container-imagesHarbor. Para ver instruções e as autorizações necessárias para extrair uma imagem, consulte o artigo Extraia uma imagem com o Docker.Envie a imagem
gcr.io/gke-release/asm/proxyv2:1.20.4-asm.0para o projetolibraryHarbor. Para ver instruções e autorizações necessárias para enviar uma imagem, consulte o artigo Envie uma imagem.O projeto
libraryé usado para artefactos a implementar no cluster de utilizadores.
Um aumento no WAL faz com que o Prometheus use muita memória
Versões: 1.13.3
Sintomas: o nó da VM do plano de controlo do sistema comunica eventos NodeHasInsufficientMemory e EvictionThresholdMet:
kubectl describe node NODE_NAME | grep Events -A100
O resultado pode ter o seguinte aspeto:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal NodeNotReady 12m (x8 over 10d) node-controller Node vm-e792c63a status is now: NodeNotReady
Normal NodeHasNoDiskPressure 12m (x9 over 24d) kubelet Node vm-e792c63a status is now: NodeHasNoDiskPressure
Normal NodeHasSufficientPID 12m (x9 over 24d) kubelet Node vm-e792c63a status is now: NodeHasSufficientPID
Normal NodeReady 12m (x9 over 24d) kubelet Node vm-e792c63a status is now: NodeReady
Normal NodeHasInsufficientMemory 12m (x34 over 13h) kubelet Node vm-e792c63a status is now: NodeHasInsufficientMemory
Warning EvictionThresholdMet 12m (x64 over 13h) kubelet Attempting to reclaim memory
Normal TridentServiceDiscovery 11m (x21 over 13h) csi.trident.netapp.io [iSCSI] detected on host.
Normal NodeHasSufficientMemory 6m52s (x31 over 24d) kubelet Node vm-e792c63a status is now: NodeHasSufficientMemory
O Prometheus usa muita memória devido ao crescimento do WAL (write-ahead log), o que afeta a memória do nó. O crescimento do WAL pode ocorrer porque o Cortex não foi implementado, pelo que este problema pode ser uma consequência da indisponibilidade do Cortex. A instância do Prometheus perde a conetividade com o Cortex durante um período prolongado, durante o qual armazena dados em buffer na memória e no volume persistente (PV). Quando o Prometheus é terminado, carrega todos os dados no respetivo WAL para a memória no arranque.
Outra causa principal podem ser problemas de conetividade de rede (malha de serviços, redes físicas e superiores).
Solução alternativa: para recuperar deste estado, a ação recomendada é resolver a causa principal e fazer com que o Cortex fique em bom estado ou resolver os problemas de conetividade de rede. Em seguida, aguarde que o WAL do Prometheus seja esvaziado. Não perde dados, mas, se o Cortex estiver em baixo, o nó não está disponível durante o período de tempo necessário para o Cortex recuperar.
Em alternativa, pode reduzir o Prometheus STS para zero e eliminar o PV. Esta ação reduz o tempo total em que o nó está indisponível, mas resulta na perda de dados. Além disso, enquanto o Cortex estiver indisponível ou tiver problemas de conetividade de rede, tem de repetir esta ação periodicamente. Enquanto existir um problema de ligação entre o Prometheus e o Cortex, o PV volta a encher-se.
Siga estes passos para reduzir o Prometheus STS para zero e eliminar o PV:
Reduza a escala do componente logmon-operator:
kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG scale deployment -n obs-system logmon-operator --replicas 0Substitua
ORG_SYSTEM_KUBECONFIGpelo caminho para o ficheiro kubeconfig no cluster do sistema da organização.Reduza a escala do componente
anthos-prometheus-k8s:kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG scale statefulset -n obs-system anthos-prometheus-k8s --replicas 0Elimine a reivindicação de volume persistente:
kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG delete pvc -n obs-system anthos-prometheus-k8s-data-anthos-prometheus-k8s-0Aumente a escala da
logmon-operator:kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG scale deployment -n obs-system logmon-operator --replicas 1Aguarde até que o
anthos-prometheus-k8sesteja pronto.
Arranque multizona
Funções de cluster em falta
Versões: 1.13.1
Sintomas: não existem funções específicas para a inicialização da multizona a usar em Adicionar funções necessárias.
Solução alternativa: use a função de cluster cluster-admin, conforme especificado nas instruções associadas. Isto dá ao utilizador mais do que o acesso mínimo necessário para realizar as tarefas posteriores.
Recurso Bootstrap incompatível
Versões: 1.13.1
Sintomas: o recurso Bootstrap criado no passo 3 de Crie o ficheiro de arranque é incompatível com a lógica que o processa.
Solução alternativa: edite o ficheiro YAML gerado conforme especificado no passo 4.
O recurso GlobalAPIZone não é criado na API global
Versões: 1.13.1
Sintomas: o plano de controlo não cria um recurso GlobalAPIZone para a zona na API global, o que faz com que os componentes que dependem deste recurso não funcionem corretamente.
Solução alternativa: crie o recurso conforme indicado em Criar recurso GlobalAPIZone.
Redes
A rede da grelha de nós de armazenamento de objetos não está operacional
Versões: 1.13.1, 1.13.3 e 1.13.4
Sintomas:
- Durante a fase de arranque do armazenamento de objetos, a rede de grelha é apresentada como inativa na IU do instalador do nó de administração de objetos.
- cables.csv e Cell CR mostram que o valor MPN em cables.csv é
QSFP-100G-CU2.5Mpara ligações entre nós objsadmin de armazenamento de objetos e o comutador TOR.
Explicação
Na versão 1.13, o campo MPN em cables.csv é usado para determinar a velocidade definida no comutador Tor.
Se a velocidade não estiver definida nestas portas, a mudança do Tor para a conetividade do nó objsadmin falha. A lista usada para mapear o NSF à velocidade não teve em conta um valor fornecido pelo integrador de sistemas, o que fez com que o arranque do armazenamento de objetos falhasse.
Na maioria das configurações 1.13, o fornecedor usado foi: QSFP-100G-CU2.5M.
Solução alternativa:
- Use
kubectl get -A cell -oyamlno cluster de administrador principal para encontrar a ligação relacionada com o dispositivo de armazenamento de objetos e o comutador TOR. - Altere todas as ocorrências de mpn para "QSFP-100G-CU3M" para objsadm -> torsw connect.
Segue-se um exemplo:
- endA: "ap-aa-torsw01:Eth1/10"
endB: "ap-aa-objsadm01:e3a"
cableType: "DAC"
mpn: "QSFP-100G-CU3M"
length: "2m"
color: "Black"
Não é possível alcançar o nó
Versões: 1.13.1, 1.13.3 e 1.13.4
Sintomas:
- Durante a fase de arranque da rede, alguns comutadores não estão acessíveis.
- Durante a fase de instalação do DHCP, alguns servidores não estão acessíveis através do respetivo endereço IP do iLO.
Solução alternativa:
- Atualize os comutadores de gestão afetados. Consulte o manual de procedimentos PNET-R0018 para ver detalhes.
PodCIDR não atribuído a nós, apesar de ClusterCIDRConfig ter sido criado
Versões: 1.13.1
Sintomas: um ClusterCIDRConfig é um objeto obrigatório para atribuir PodCIDRs.
Apesar de o ClusterCIDRConfig ter sido criado, o PodCIDRs não foi atribuído. Este problema ocorre se for criado um ClusterCIDRConfig ao mesmo tempo que os pods ipam-controller estão a ser iniciados. A criação do cluster está bloqueada no estado de conciliação.
Verifique se o objeto
ClusterCIDRConfigfoi criado no cluster:kubectl --kubeconfig=CLUSTER_KUBECONFIG get clustercidrconfigs -oyamlO resultado pode ter o seguinte aspeto:
apiVersion: v1 items: - apiVersion: networking.gke.io/v1alpha1 kind: ClusterCIDRConfig metadata: annotations: baremetal.cluster.gke.io/managed: "true" kubectl.kubernetes.io/last-applied-configuration: | {"apiVersion":"networking.gke.io/v1alpha1","kind":"ClusterCIDRConfig","metadata":{"annotations":{"baremetal.cluster.gke.io/managed":"true"},"creationTimestamp":null,"name":"root-admin-control-plane"},"spec":{"ipv4":{"cidr":"172.24.0.0/21","perNodeMaskSize":23},"ipv6":{"cidr":"fd00:1::2:0/112","perNodeMaskSize":119}},"status":{}} creationTimestamp: "2024-06-17T05:27:55Z" finalizers: - networking.kubernetes.io/cluster-cidr-config-finalizer generation: 1 name: root-admin-control-plane resourceVersion: "2172" uid: d1216fe3-04ed-4356-a105-170d72d56c90 spec: ipv4: cidr: 172.24.0.0/21 perNodeMaskSize: 23 ipv6: cidr: fd00:1::2:0/112 perNodeMaskSize: 119 kind: List metadata: resourceVersion: ""Execute o comando describe para um dos objetos de nó do cluster que está bloqueado na reconciliação e verifique se existe um evento
CIDRNotAvailableno objeto de nó:kubectl --kubeconfig=CLUSTER_KUBECONFIG describe node NODE_NAMEOs eventos de saída podem ter o seguinte aspeto:
Type Reason Age From Message ---- ------ ---- ---- ------- Normal CIDRNotAvailable 3m22s (x96 over 21h) cidrAllocator Node gpc-adhoc-4f533d50vm-worker-node2-zone1 status is now: CIDRNotAvailable Warning ReconcileError 3m22s (x96 over 21h) ipam-controller CIDRAssignmentFailed, retrying: failed to get cidrs for node gpc-adhoc-4f533d50vm-worker-node2-zone1, unable to get clusterCIDRs for node gpc-adhoc-4f533d50vm-worker-node2-zone1, no available CIDRs
Solução alternativa:
Reinicie os auriculares
ipam-controller-manager:kubectl --kubeconfig=CLUSTER_KUBECONFIG -n kube-system rollout restart ds ipam-controller-managerDepois de os
ipam-controller-managerpods estarem em execução, verifique se opodCIDRestá atribuído aos nós:kubectl --kubeconfig=CLUSTER_KUBECONFIG get nodes -oyaml | grep podCIDRO resultado pode ter o seguinte aspeto:
podCIDR: 172.24.4.0/23 podCIDRs: podCIDR: 172.24.2.0/23 podCIDRs: podCIDR: 172.24.0.0/23 podCIDRs:
Degradação do NTP
Versões: 1.13.1
Sintomas: um nó de VM tem uma hora incorreta ou desviada após estar em suspensão ou em execução durante algum tempo.
Solução alternativa:
- Estabeleça uma ligação SSH ao nó da VM e edite o ficheiro.
/etc/chrony.conf - Substituir a linha
makestep 1.0 3pormakestep 1.0 -1. Reinicie o serviço chronyd:
systemctl restart chronyd
Só tem de fazer esta alteração uma vez em cada MV. A alteração não vai ser substituída.
Para uma correção rápida imediata para avançar no tempo, estabeleça uma ligação SSH ao nó da VM e execute chronyc -a makestep.
Os registos de auditoria do SyncServer não foram analisados
Versões: 1.13.1, 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7
Sintomas: os registos de auditoria do SyncServer não são analisados corretamente pelo
log-remote-logger. Alguns registos de auditoria não estão disponíveis no Grafana e pode ver mensagens de erro no pod root-admin, como:log-remote-logger
Failed to fetch syncserver audit logs for syncserver-...
Solução alternativa: os registos de auditoria continuam disponíveis no SyncServer. Siga as instruções em
NTP-P0002 para
aceder à IU do SyncServer e ver os registos em Logs > Events.
A mudança de imagem não conseguiu extrair a imagem
Versões: 1.13.3
Sintomas: pode ver uma mensagem como esta no objeto SwitchImageHostRequest
quando executa uma RMA de comutação ou quando inicia o cluster de administrador principal:
failed to pull or extract image "192.0.2.0:10443/gdch-switch/os:v1.13.0-pnet-aa505d9004
Se tiver acesso ao kubectl, use-o para verificar se está a ter este problema:
kubectl --kubeconfig=<path/to/root-admin-kubeconfig> -n gpc-system get switchimagehostrequest -o yaml
O resultado pode ter o seguinte aspeto:
kind: SwitchImageHostRequest
metadata:
annotations:
lcm.private.gdc.goog/claim-by-force: "true"
meta.helm.sh/release-name: pnet-core-assets
meta.helm.sh/release-namespace: pnet-system
creationTimestamp: "2024-08-20T04:16:36Z"
generation: 1
labels:
app.kubernetes.io/managed-by: Helm
name: v1.13.0-pnet-aa505d9004
namespace: gpc-system
resourceVersion: "149295"
uid: f6c5b880-3fdb-4679-acd4-840b52998946
spec:
fromVersion: v1.13.0-pnet-aa505d9004
toVersion: v1.13.0-pnet-aa505d9004
status:
conditions:
- lastTransitionTime: "2024-08-20T05:10:17Z"
message: ""
observedGeneration: 1
reason: TFTPRunning
status: "True"
type: TFTPReady
- lastTransitionTime: "2024-08-20T04:16:36Z"
message: 'exception: failed to pull images with config images: [{10.249.48.5:10443/gdch-switch/os:v1.13.0-pnet-aa505d9004
/shared/tftpboot/switch/images}]: failed to pull or extract image "10.249.48.5:10443/gdch-switch/os:v1.13.0-pnet-aa505d9004":
failed to pull image from source "10.249.48.5:10443/gdch-switch/os:v1.13.0-pnet-aa505d9004":
GET https://10.249.48.5:10443/v2/gdch-switch/os/manifests/v1.13.0-pnet-aa505d9004:
NOT_FOUND: artifact gdch-switch/os:v1.13.0-pnet-aa505d9004 not found'
observedGeneration: 1
reason: ReconcileBackoff
status: Unknown
type: Ready
Solução alternativa:
Crie manualmente um SwitchImageHostRequest com a etiqueta de imagem correta:
- Inicie sessão no servidor de arranque.
Use
gdcloudpara identificar a versão correta da imagem do comutador:release/gdcloud artifacts tree release/oci/ | grep -i gdch-switchO resultado pode ter o seguinte aspeto:
│ │ │ │ └── gdch-switch/os:1.13.3-gdch.5385A partir deste resultado, a versão correta da imagem do interruptor é
1.13.3-gdch.5385.Edite o objeto
SwitchImageHostRequestque comunica o erro:kubectl --kubeconfig=<path/to/root-admin-kubeconfig> -n gpc-system edit switchimagehostrequest <SWITCH_IMAGE_HOST_REQUEST_NAME>Edite ou substitua os campos
name,fromVersionetoVersionpara corresponderem à versão da imagem de comutação esperada. Neste caso, é1.13.3-gdch.5385. Veja o resultadodiffseguinte, que ilustra as alterações a fazer ao objetoSwitchImageHostRequest.kind: SwitchImageHostRequest metadata: - name: v1.13.0-pnet-aa505d9004 + name: 1.13.3-gdch.5385 namespace: gpc-system spec: - fromVersion: v1.13.0-pnet-aa505d9004 + fromVersion: 1.13.3-gdch.5385 - toVersion: v1.13.0-pnet-aa505d9004 + toVersion: 1.13.3-gdch.5385
A comunicação do pod StatefulSet falha
Versões: 1.13.1, 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7, 1.13.8, 1.13.9, 1.13.10
Sintomas: problemas de conectividade ou interrupções devido à eliminação de objetos Cilium Endpoint (CEP) que não são processados corretamente após o reinício dos pods StatefulSet.
Isto pode fazer com que a identidade do ponto final não gerido faça com que as políticas de rede rejeitem erroneamente tráfego legítimo. Pode verificar os pods afetados verificando a ausência do respetivo objeto CEP correspondente:
kubectl get cep -A | grep [*POD_IP*]
Solução alternativa: reinicie os pods StatefulSet afetados para atualizar o respetivo UID e
atualizar os metadados associados:
kubectl rollout restart statefulset [*STATEFULSET_NAME*] -n [*NAMESPACE*]
Problemas de conetividade com instâncias de DBS
Versões: 1.13.0, 1.13.1
Sintomas: as instâncias dos serviços de base de dados (DBS) estão inacessíveis e os clientes da base de dados apresentam limites de tempo de ligação.
Este problema pode ser apresentado através de outro componente do sistema que dependa do DBS. Por exemplo, a faturação pode comunicar mensagens de erro como as seguintes:
DBSE0301: Healthcheck: DB cluster is not healthy. Cannot connect to DBdaemon
DBSE0005: DBDaemon Client Error. secure dbdaemon connection failed: context
deadline exceeded
Solução alternativa: a falha é causada por um componente do sistema de rede que não consegue agendar no cluster de serviços da organização.
Defina as seguintes variáveis de ambiente:
export KUBECONFIG=KUBECONFIG_PATH export ORG_NAME=ORG_NAMESubstitua o seguinte:
KUBECONFIG_PATH: o caminho para o ficheiro kubeconfig do cluster de administrador da organização.ORG_NAME: o nome da sua organização, comoorg-1.
Atualize a configuração do componente de rede para permitir que seja agendada:
kubectl --kubeconfig=KUBECONFIG_PATH kubectl -n g-ORG_NAME-shared-service-cluster patch addonconfiguration ang-overrides --type='json' -p='[{"op": "replace", "path": "/spec/configs/1/patchContent", "value": "apiVersion: apps/v1\nkind: DaemonSet\nmetadata:\n name: ang-node\n namespace: kube-system\nspec:\n template:\n spec:\n containers:\n - name: angd\n - name: bgpd\n env:\n - name: DISABLE_RECEIVED_ROUTES\n value: \"true\"\n tolerations:\n - operator: \"Exists\"\n effect: \"NoSchedule\""}]'
A conetividade de rede é restaurada após alguns minutos.
A malha do cluster não está configurada com informações zonais
Versões: 1.13.5
Sintomas: uma VM não consegue estabelecer ligação a um cluster de base de dados no mesmo projeto. A conetividade ao balanceador de carga interno é afetada. Este problema é causado por um Clustermesh que não consegue trocar objetos de serviço entre clusters devido a informações de zona em falta na configuração do nome do cluster.
Solução alternativa: em ambientes inicializados como multizona, execute os seguintes passos manuais da solução alternativa para que o balanceador de carga interno funcione:
No cluster de administrador da organização, obtenha o nome da zona:
ZONENAME="$(kubectl get controlplanes -A -o jsonpath="{.items[0].spec.zone}")" echo $ZONENAMEO resultado pode ter o seguinte aspeto:
zone1No cluster de administrador da organização, obtenha o ID do site da zona:
SITEID="$(kubectl -n mz-system get zones $ZONENAME -o jsonpath="{.spec.siteID}")" echo $SITEIDO resultado pode ter o seguinte aspeto:
1Liste todos os clusters:
kubectl get clusters -AO resultado pode ter o seguinte aspeto:
NAMESPACE NAME ABM VERSION DESIRED ABM VERSION CLUSTER STATE g-org-1-shared-service-cluster g-org-1-shared-service 1.30.0-gke.1592 1.30.0-gke.1592 Running org-1-system-cluster org-1-system 1.30.0-gke.1592 1.30.0-gke.1592 Running user-vm-1-cluster user-vm-1 1.16.11 1.16.11 Running user-vm-2-cluster user-vm-2 1.28.700-gke.150 1.28.700-gke.150 RunningPara cada cluster, construa o
CILIUM_CLUSTERNAME:CLUSTER_NAME=CLUSTER_NAME CILIUM_CLUSTERNAME=$CLUSTERNAME-zone$SITEID echo $CILIUM_CLUSTERNAMEO resultado pode ter o seguinte aspeto:
org-1-system-zone1Para cada cluster, defina os outros parâmetros da seguinte forma. O exemplo seguinte para org-1-system:
CLUSTER_NAMESPACE=org-1-system-cluster CLUSTER_VERSION=1.30.0-gke.1592Para cada cluster, crie um objeto
AddOnConfiguratione armazene-o num ficheiroaddonconfig.yaml. Crie este ficheiro para todos os clusters existentes e quaisquer novos clusters que criar no futuro:Nesta página, defina as seguintes variáveis para atualizar o seguinte exemplo de código:
CLUSTER_NAMESPACE=CLUSTER_NAMESPACE CLUSTER_VERSION=CLUSTER_VERSION CILIUM_CLUSTERNAME=CILIUM_CLUSTERNAMEapiVersion: baremetal.cluster.gke.io/v1alpha1 kind: AddOnConfiguration metadata: name: cilium-addon namespace: CLUSTER_NAMESPACE spec: anthosBareMetalVersions: - CLUSTER_VERSION configs: - name: cilium-config namespace: kube-system apiVersion: v1 kind: ConfigMap patchContent: | apiVersion: v1 kind: ConfigMap metadata: name: cilium-config namespace: kube-system data: cluster-name: CILIUM_CLUSTERNAMEAplique o
addonconfig.yamlno cluster de administrador da organização:kubectl apply -f addonconfig.yamlNos clusters de sistema, de serviço e de utilizadores, certifique-se de que o
cluster-nameé atualizado nocilium-configno cluster. Esta atualização pode demorar algum tempo, mas este passo é necessário antes de reiniciar a implementação doclustermesh-apiserver.kubectl get configmap -n kube-system cilium-config -o jsonpath="{.data.cluster-name}" && echoNos clusters do sistema, de serviço e de utilizador, reinicie a
clustermesh-apiserverimplementação:kubectl rollout restart deployment -n kube-system clustermesh-apiserver
São gerados endereços IP EVPN incorretos
Versões: 1.13.1, 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7
Sintomas: os endereços IP de peering da sessão de interconexão EVPN (MZ) multizona
gerados pelo sistema de gestão de recursos de hardware (HAMS) não terminam com .65
ou .66, o que está incorreto e impede o estabelecimento das sessões BGP EVPN MZ.
Solução alternativa:
Para resolver manualmente este problema, siga estes passos:
Apresentar todos os recursos de
InterconnectSession:kubectl get interconnectsession -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfig | grep zoneevpnpeeringReveja os recursos
InterconnectSessionde várias zonas EVPN gerados que têm um valorinterconnectTypedeZonePeeringe umaddressFamilydeEVPN:apiVersion: system.private.gdc.goog/v1alpha1 kind: InterconnectSession metadata: annotations: lcm.private.gdc.goog/claim-by-force: "true" helm.sh/resource-policy: keep creationTimestamp: null name: interconnect-session-am-aa-blsw01-zoneevpnpeering-3 namespace: gpc-system labels: system.private.gdc.goog/ipv4-session-name-1: interconnect-session-am-aa-blsw01-zoneipv4peering-3 spec: interconnectLinkRef: name: interconnect-am-aa-blsw01-zoneevpnpeering-3 namespace: gpc-system interconnectType: ZonePeering peerIP: 192.168.203.67 md5HashKey: "" peerASN: 65402 addressFamily: EVPN status: {}Para cada um dos recursos
InterconnectSessionque correspondem a estes parâmetros, aplique a seguinte correção:- Verifique o nome do recurso personalizado da sessão de interligação.
- Se o nome terminar num número ímpar, atualize a última parte do endereço IP do
par para
65através do comando no passo seguinte. - Se o nome terminar num número par, atualize a última parte do endereço IP do
par para
66através do comando no passo seguinte.
Modifique o recurso
InterconnectSessioncom o endereço IP do par incorreto:kubectl edit interconnectsession interconnect-session-zy-aa-blsw01-zoneevpnpeering-1 -n gpc-system --kubeconfig=/root/release/root-admin/root-admin-kubeconfigAplique esta correção a todos os
InterconnectSessionrecursos que estão a causar o erro.
O painel de controlo do plano de controlo de rede superior não mostra dados
Versões: 1.13.7
Sintomas: as consultas do Prometheus em TestUpperNetworkingMetrics falham devido a métricas em falta no cluster org-1-system. Os painéis de clustermesh no painel de controlo de rede superior para administradores da organização de E/S não mostram dados. O problema resulta de uma incompatibilidade na etiqueta source_cluster entre o Cilium e o sistema de monitorização.
Solução alternativa: remova o filtro source_cluster do painel de controlo do UNET para mostrar os dados.
Erros de pista falsa apresentados na instalação de rede
Versões: 1.13.1
Sintomas: durante a instalação de rede, são apresentadas algumas mensagens de aviso sobre cablagem. Por exemplo:
W0725 18:01:19.127111 39319 switch_port.go:59] Got error on getting port speed for la-ac-mgmtsw01:Eth1/46<>la-ac-base03:ilo: no speed associated with cable model: 31342 (CAT6 5ft Black)
W0725 18:01:19.127127 39319 switch_port.go:59] Got error on getting port speed for la-ac-mgmtsw01:Eth1/33<>la-ac-bm21:LOM1: no speed associated with cable model: 03982 (CAT6 4ft Black)
Pode ignorar estas mensagens de erro em segurança.
A criação de um PNP de saída total nega tráfego inesperado
Versões:
Todas as versões do Google Distributed Cloud (GDC) air-gapped podem ser afetadas.
Sintomas: a política de rede do projeto (PNP) do projeto allow-all-egress permite o tráfego para pontos finais no projeto e pontos finais externos fora do cluster, mas não permite o tráfego para pontos finais do sistema. Este problema pode levar ao bloqueio do acesso ao sistema e aos serviços originais, como a resolução de DNS e o armazenamento de objetos.
O allow-all-egress PNP pode ter o seguinte aspeto:
apiVersion: networking.gdc.goog/v1
kind: ProjectNetworkPolicy
metadata:
namespace: PROJECT_1
name: allow-all-egress
spec:
policyType: Egress
subject:
subjectType: UserWorkload
egress:
- {}
Solução alternativa: elimine o allow-all-egress PNP. Por predefinição, assim que a
proteção contra exfiltração de dados
é desativada, o tráfego é permitido para o projeto e pontos finais externos fora do cluster e dos pontos finais do sistema.
kubectl delete pnp [*ALLOW_ALL_EGRESS_PNP_NAME*] -n [*NAMESPACE*]
Armazenamento de objetos
Não é possível eliminar a organização de armazenamento
Versões: 1.13.1
Sintomas: a eliminação de uma organização pode não ser bem-sucedida devido a um problema que impede a conclusão da eliminação da SVM. Pode ver um aviso como este:
Warning StorageOrganizationDeletion 49m (x97
over 23h) StorageOrganization Reconcile error for storage org
deletion: cannot delete storage organization resources, pre-checks failed:
subnet claim "poc2/poc2-admin-svm-mgmt-network-subnet" exists,
cannot continue before it is deleted
Alguns avisos de atualização do armazenamento de objetos podem ser ignorados
Versões: 1.13.3
Sintomas: quando atualiza o armazenamento de objetos, pode ver um aviso como este:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ReconcileError 55m (x2 over 55m) ObjectStorageAdminNodeReconciler Reconcile error, retrying: error storing the ssh creds: 500 Internal Server Error:ErrorMessage: {"text":"The GDU service is currently busy. Try again later. Contact technical support if the issue persists.","key":"maintenance.gdu.gdu_server_locked
Solução alternativa:
Verifique se cada nó tem credenciais SSH correspondentes armazenadas num segredo.
Verifique os nós de administração:
kubectl get objectstorageadminnodes -o json | jq -r '.items[].metadata.name' | while read -r nodeName; do kubectl get secret -n gpc-system $nodeName-ssh-creds; doneVerifique os nós de armazenamento:
kubectl get objectstoragestoragenodes -o json | jq -r '.items[].metadata.name' | while read -r nodeName; do kubectl get secret -n gpc-system $nodeName-ssh-creds; doneO resultado bem-sucedido tem o seguinte aspeto para os nós de armazenamento:
NAME TYPE DATA AGE gpcstgecn01-gce-gpcstgesite01-ssh-creds Opaque 2 3d23h NAME TYPE DATA AGE gpcstgecn02-gce-gpcstgesite01-ssh-creds Opaque 2 3d23h NAME TYPE DATA AGE gpcstgecn03-gce-gpcstgesite01-ssh-creds Opaque 2 3d23hSe não for encontrado um segredo, o erro tem este aspeto:
Error from server (NotFound): secrets "gpcstgeadm02-gce-gpcstgesite01-ssh-creds" not found
Se o comando não devolver erros, pode ignorar com segurança os erros comunicados pelos reconciliadores.
ObjectStorageStorageNodeReconciler relatórios maintenance.gdu.gdu_server_locked
Versões: 1.13.3
Sintomas: mostram os detalhes do objectstoragestoragenode:
kubectl describe objectstoragestoragenode zv-aa-objs02
O resultado pode ter o seguinte aspeto:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning ReconcileError 54m (x2 over 54m) ObjectStorageStorageNodeReconciler Reconcile error, retrying: error storing the ssh creds: 500 Internal Server Error:ErrorMessage: {"text":"The GDU service is currently busy. Try again later. Contact technical support if the issue persists.","key":"maintenance.gdu.gdu_server_locked"}
Solução alternativa: pode ignorar este problema. O serviço GDU pode ser bloqueado temporariamente quando recebe demasiados pedidos, mas é desbloqueado após alguns minutos.
A verificação do armazenamento de objetos da atualização pós-voo de 1.12.x para 1.13.x falha
Versões: 1.13.x
Sintoma: o CR ObjectStorageUpgrade falha com o erro
Message: check "ObjectStorageUpgrade" of operable component "OBJ" failed with reason "BackoffLimitExceeded", please check logs in pods: [gpc-system/upgrade-managed-check-objectstorageupgrade]
Observed Generation: 2
Reason: PostflightCheckFailed
Os pods gpc-system/upgrade-managed-check-objectstorageupgrade falham com o erro
Error: check "ObjectStorageUpgrade" preflight check failed: ObjectStorageSite gce-gpcstgesite01 not ready │
Usage: │
managed [flags] │
Flags: │
--component_name string preflight check name │
--current_version string current version of the Organization │
-h, --help help for managed │
--organization-upgrade-name string the name of current OrganizationUpgrade │
--target_version string target version of the Organization │
F1023 06:18:01.122723 1 main.go:80] check "ObjectStorageUpgrade" preflight check failed: ObjectStorageSite gce-gpcstgesite01 not ready │
goroutine 1 [running]:
Causa principal: A atualização do componente operacional de armazenamento de objetos de 1.12.x para 1.13.x falha se o cluster KIND de arranque não tiver sido desativado ou eliminado. Mesmo que a atualização seja bem-sucedida, os serviços de armazenamento de objetos comuns, como a criação de novos contentores ou credenciais do S3 através do RBAC do Kubernetes, podem falhar devido a erros de validação de certificados TLS. Isto deve-se ao facto de um pod de armazenamento de objetos específico no cluster KIND tentar continuamente instalar o certificado do servidor TLS do ponto final de gestão do StorageGRID, que era válido na versão 1.12.x, mas pode não ser reconhecido na versão 1.13.x. Durante a atualização, o StorageGRID instala um certificado de servidor TLS novo e validável, mas o pod do cluster KIND substitui-o pelo certificado antigo e inválido, o que causa o erro do certificado TLS.
Solução alternativa: Os seguintes requisitos têm de ser verdadeiros:
- A atualização do armazenamento de objetos de 1.12.x para 1.13.x
- O cluster de arranque (o cluster KIND) ainda existe
Siga os passos seguintes:
- Adquira um
kubeconfigque tenha autorização de visualização e modificação para o recursoObjectStorageSiteno cluster de arranque (o cluster KIND). Defina um alias para
kubectlestabelecer ligação ao cluster de arranque (o cluster KIND):alias kubectlkind="kubectl --kubeconfig <Full path to the kubeconfig of the bootstrapping cluster>Obtenha a instância de recurso personalizado
ObjectStorageSitedo cluster de arranque. Deve existir uma instância do recursoObjectStorageSite:SITENAME=$(kubectlkind get ObjectStorageSite -A -o jsonpath='{.items[0].metadata.name}')Adicione uma anotação de pausa de armazenamento de objetos à instância do recurso
ObjectStorageSite:kubectlkind annotate ObjectStorageSite "${SITENAME:?}" storagegrid.netapp.storage.private.gdc.goog/paused=trueVerifique se a anotação de pausa do armazenamento de objetos foi adicionada à instância
ObjectStorageSite:kubectlkind get ObjectStorageSite "${SITENAME:?}" -o jsonpath='{.metadata.annotations}' | jqAdquira um
kubeconfigque tenha acesso de visualização e autorização de aplicação de patches de estado aos recursosObjectStorageClusterno cluster de administrador raiz.Defina um alias para o kubectl que se liga ao cluster de administrador raiz:
alias kubectlrootadmin="kubectl --kubeconfig <Full path to the kubeconfig of the root admin >"Verifique se existe alguma instância de recurso
ObjectStorageClusterno cluster de administrador raiz:kubectlrootadmin get ObjectStorageClusterSe não existir uma instância de recurso
ObjectStorageCluster, a solução alternativa está concluída. Pode ter de repetir o procedimento de atualização do armazenamento de objetos.Obtenha o URL do ponto final de gestão a partir do estado do recurso
ObjectStorageSiteno cluster de arranque:MGMT_ENDPOINT=$(kubectlkind get ObjectStorageSite -o jsonpath='{.items[0].status.managementAPIEndpointURL}')Valide se a variável de ambiente
$MGMT_ENDPOINTfoi definida. O ponto final deve começar comhttps://:echo ${MGMT_ENDPOINT:?}Execute os restantes passos apenas quando existir exatamente uma instância de recurso
ObjectStorageClusterno cluster de administrador raiz. Caso contrário, execute novamente o procedimento de atualização do armazenamento de objetos:kubectlrootadmin patch ObjectStorageCluster <the name of ObjectStorageCluster> --type=merge --subresource status --patch "status: {managementAPIEndpointURL: '${MGMT_ENDPOINT:?}'}"Reinicie o pod gpc-system/obj-infra-cluster-cm:
kubectlrootadmin rollout restart deployment -n gpc-system obj-infra-cluster-cm-backend-controllerVerifique se o ponto final de gestão foi adicionado ao estado do recurso
ObjectStorageCluster:kubectlrootadmin get ObjectStorageCluster -o jsonpath='{.items[0].status}' | jqReinicie a verificação pós-voo eliminando a tarefa do Kubernetes de verificação pós-voo
gpc-system/upgrade-managed-check-objectstorageupgrade-<random suffix>. A tarefa é recriada em breve.
Não é possível alcançar o nó na rede de dados
Este é um problema raro que pode ocorrer se o anetd pod ficar preso num ciclo de falhas.
Um recurso do kernel essencial para a conetividade do nó pode ficar bloqueado num estado danificado.
Este guia descreve os sintomas deste problema, bem como os passos que podem ser seguidos para o resolver.
Versões:
Todas as versões do Google Distributed Cloud (GDC) air-gapped podem ser afetadas.
Sintomas:
Se este problema ocorrer, pode ver os seguintes sintomas:
- Os nós estão presos no estado
NotReady - A descrição do nó mostra a mensagem
kubelet:kubelet was found unhealthy; repair flag : true - Não é possível aceder ao nó através de SSH na rede de dados
Solução alternativa:
Use as instruções seguintes para reparar cada nó não saudável:
Obtenha o endereço IP de gestão do nó afetado:
kubectl --kubeconfig ROOT_ADMIN_KUBECONFIG get -n gpc-system servers/NODE_NAME -ojsonpath='{.spec.managementNetwork.ips[0]}'Obtenha acesso SSH ao nó afetado.
Ligue-se ao nó através de SSH com o endereço IP de gestão do nó.
No nó, execute o seguinte comando e, em seguida, feche a ligação SSH:
tc filter del dev bond0 egressReinicie o conjunto de daemon
anetdpara o cluster com o nó afetado:kubectl --kubeconfig AFFECTED_CLUSTER_KUBECONFIG rollout restart ds/anetd -n kube-systemO certificado do ponto final do equilibrador de carga do StorageGRID expirou
Versões: 1.13.10, 1.13.11, 1.13.12
Sintomas: o proxy de armazenamento de objetos está a comunicar 502 Bad Gateway.
Solução alternativa: siga o OBJ T0003.
Sistema operativo
Agrupamentos bloqueados num estado init
Versões: 1.13.1
Sintomas: o nó indica que está pronto, mas o acesso SSH ao nó é lento e
e top -n 1 mostra > 100 processos zombie.
Solução alternativa:
- Siga o erro OS-P0001 para esvaziar o servidor. O consumo pode demorar mais de 20 minutos. Se a drenagem não for bem-sucedida após uma hora, avance para o passo seguinte.
Reinicie o servidor estabelecendo uma ligação SSH ao servidor e emitindo o seguinte comando:
systemctl rebootPode ser necessário reiniciar novamente para recuperar totalmente o servidor.
Verifique se o acesso SSH já não é lento e se o número de processos zombie é muito inferior, de preferência, inferior a 30.
Desative a drenagem do servidor definindo
maintenancecomofalseno servidor.
bm-system-machine-preflight-check A tarefa do Ansible para um nó de metal puro ou de VM falha
Versões: 1.13.1
Sintomas: o módulo do kernel nf_tables não é carregado após o reinício, o que faz com que os trabalhos do Ansible do cluster falhem com um erro Either ip_tables or nf_tables kernel module must be loaded. Este problema ocorre quando o nó de metal puro ou da VM é reiniciado antes de estar totalmente aprovisionado.
A tarefa do Ansible pode gerar um erro como este:
fatal: [172.20.128.23]: FAILED! => {"changed": false, "msg": "following are the error messages for each failed preflight check {'check_netw
orking_kernel_module_pass': 'Either ip_tables or nf_tables kernel module must be loaded. Use the command \"modprobe <ip_tables OR nf_tables
>\" to load the module.'}"}
Solução alternativa:
Estabeleça uma ligação SSH ao nó e execute o seguinte comando:
modprobe nf_tables
MV sem espaço disponível no dispositivo
Versões: 1.13.1, 1.13.3, 1.13.4 e 1.13.5
Sintomas: quando o diretório de registo /var/log está cheio, o Node pode ficar bloqueado no estado NotReady e os pods podem não ser iniciados devido ao erro no space left on device. Para verificar esta situação, execute o seguinte comando no nó e verifique se a utilização está perto de 100%.
df -h /var/log
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rocky-rl--var_log 15G 15G 20K 100% /var/log
Solução alternativa:
Inicie sessão no nó que encontra o problema e limpe os arquivos de registos antigos para /var/log/messages.
find /var/log -name "messages*" -mtime +4 -deleteTambém recomendamos que continue a aplicar a seguinte solução alternativa para evitar que isto aconteça. A solução alternativa consiste em criar um
AnsiblePlaybooke aplicar a alteração através de um CROSPolicypersonalizado responsável por configurar em segurança o SO de destino (máquinas BM+VM). Consulte o processo OS-P0005 para ver mais detalhes.Defina as seguintes variáveis de ambiente:
export KUBECONFIG=<the path to the kubeconfig file>Crie um guia interativo do Ansible para a solução alternativa:
kubectl --kubeconfig=${KUBECONFIG:?must be set} apply -f - <<EOF apiVersion: system.private.gdc.goog/v1alpha1 kind: AnsiblePlaybook metadata: name: update-logrotate namespace: gpc-system spec: playbook: | - name: Set the default context for the /etc/kubernetes path to etc_t hosts: all gather_facts: no tasks: - name: Change log rotation for /var/log/messages block: - name: Check if /etc/logrotate.d/syslog exists check_mode: false ansible.builtin.stat: path: '/etc/logrotate.d/syslog' register: syslog_exists - name: Comment out /var/log/messages lines in syslog ansible.builtin.replace: path: '/etc/logrotate.d/syslog' regexp: '^/var/log/messages' replace: '# /var/log/messages' when: syslog_exists.stat.exists - name: Change logrotate config for /var/log/messages ansible.builtin.blockinfile: path: '/etc/logrotate.d/syslog' block: | /var/log/messages { daily rotate 4 missingok notifempty sharedscripts postrotate /usr/bin/systemctl kill -s HUP rsyslog.service >/dev/null 2>&1 || true endscript } when: syslog_exists.stat.exists EOFIdentifique os inventários de destino aos quais a alteração tem de ser aplicada. O destino pode ser um
InventoryMachineindividual ou umNodePool. Consulte o processo OS-P0005 (2. Identifique o inventário de destino para as configurações de tempo de execução) para obter detalhes.O exemplo
OSPolicyseguinte incluía dois inventários de destino emspec.inventory. Pode adicionar mais inventários, conforme necessário.kubectl --kubeconfig=${KUBECONFIG:?must be set} apply -f - <<EOF apiVersion: system.private.gdc.goog/v1alpha1 kind: OSPolicy metadata: name: manual-update-logrotate namespace: gpc-system spec: inventory: - apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool name: control-plane-node-pool namespace: org-1-system-cluster - apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool name: control-plane-node-pool namespace: user-vm-1-cluster policy: installPlaybook: name: update-logrotate EOFValidação
Consulte o processo OS-P0005 (validação) para acompanhar o estado de execução da política.
Pods bloqueados num estado ContainerCreating
Versões: 1.13.3, 1.13.5, 1.13.6
Sintomas: um nó é apresentado como estando em bom estado, mas tem muitos pods bloqueados num estado ContainerCreating e não consegue estabelecer uma ligação SSH ao servidor.
Solução alternativa: reinicie o servidor e confirme que consegue estabelecer uma ligação SSH ao nó quando este voltar a ficar disponível.
Não é possível fazer SSH para o nó aprovisionado
Versões: 1.13.5
Sintomas: um nó é aprovisionado, mas o SSH excede o tempo limite nos IPs de gestão e de dados.
Solução alternativa: reinicie o nó através do iLO. Depois de arrancar, inicie sessão através de SSH e desative o clamonacc com systemctl stop clamonacc; systemctl disable clamonacc.
Os nós bare metal não conseguem arrancar a partir da imagem do SO mais recente porque o arranque seguro não reconhece a assinatura do SO
Versões: 1.13.12
Sintomas: após a atualização para a versão 1.13.12, se o nó for reiniciado, o SO não consegue arrancar no novo kernel. O ecrã da consola iLO apresenta um problema relacionado com o arranque seguro:
../../grub-core/loader/i386/efi/linux.c:385:(hd0,gpt2)/vmlinuz-4.18.0-425.131.e.18.ciqfipscompliant.40.1.x86_64 has invalid signature,..:
../../grub-core/loader/i386/efi/linux.c:256: you need to load the kernel first.
Solução alternativa:
- Para qualquer nó que não arranque devido a este problema, aceda ao ecrã do GRUB através da consola iLO e selecione
Rocky Linux 4.18.0-425.131.e.18.ciqfipscompliant.38.1.x86_64como destino de arranque. Este procedimento faz com que o nó arranque no kernel bom conhecido anterior. Para todos os servidores bare metal atualizados para a versão 1.13.12 do GDC, siga os passos abaixo para evitar a falha de arranque:
- Estabeleça uma ligação SSH ao servidor.
- Execute os seguintes comandos no servidor para remover o kernel problemático:
dnf remove kernel-core-4.18.0-425.131.e.18.ciqfipscompliant.40.1.x86_64- Verifique se o kernel predefinido foi reposto com êxito para uma versão conhecida e funcional:
grubby --default-kernel
O resultado é /boot/vmlinuz-4.18.0-425.131.e.18.ciqfipscompliant.38.1.x86_64.
Infraestrutura do Operations Suite (OI)
A SSA não é necessária para o Hardware 3.0
A configuração do adaptador RAID é diferente para o Hardware 3.0. Os servidores OIC de hardware 3.0 usam uma unidade autoencriptada, pelo que o início da administração de armazenamento inteligente (SSA) já não é necessário. São necessários passos adicionais para determinar os identificadores de disco por servidor. Consulte o bootstrap do servidor OI.
Segurança perimetral
O cluster do sistema da organização fica bloqueado durante o arranque da organização
Versões: 1.13.1
Sintomas: durante o arranque da organização, o cluster do sistema da organização pode ficar
bloqueado. Os agrupamentos edr-sidecar-injector estão no estado pendente. Quando tenta eliminar estes pods, pode ver uma mensagem de erro como esta:
Delete failed with `Internal error occurred: failed calling webhook "validation.gatekeeper.sh": failed to call webhook: Post "https://gatekeeper-webhook-service.opa-system.svc:443/v1/"
Ao mesmo tempo, alguns outros pods pendentes podem ter mensagens de erro como esta:
Error creating: Internal error occurred: failed calling webhook "edr-sidecar-injector.gpc-system.internal": failed to call webhook: Post "https://edr-sidecar-injector.gpc-system.svc:443/mutate?timeout=10s": dial tcp 172.20.3.222:443: connect: connection refused
O sistema precisa de intervenção manual para se desbloquear.
Solução alternativa:
- Duplicar o
MutatingWebhookConfigurationCRedr-sidecar-injector-webhook-cfgno cluster do sistema. - Duplicar o
ValidatingWebhookConfigurationCRgatekeeper-validating-webhook-configurationno cluster do sistema. - Elimine o CR
edr-sidecar-injector-webhook-cfge o CRgatekeeper-validating-webhook-configurationdo cluster do sistema. - Aguarde que os pods
edr-sidecar-injectorvoltem a ficar disponíveis e que ogatekeeper-controller-managervolte a ficar disponível. - Restaure o CR do webhook com o comando
kubectl apply.
Os grupos de endereços da firewall PANW não são atualizados com alterações de reivindicação de CIDR
Versões: 1.13.1
Sintomas: durante o arranque, o OCIT cidr-claim é atualizado com o valor correto, mas a firewall AddressGroups não. Um par de AddressGroups,
especificamente vsys1-root-ocit-network-cidr-group e ocvsys1-root-ocit-network-cidr-group,
use bloqueios de rede que não se sobreponham ao que está realmente em uso no OIR. O OIR não consegue resolver os registos de zona do GDC e as consultas expiram sem uma resposta.
Solução alternativa:
Após as alterações cidr-claim, certifique-se de que o AddressGroup é atualizado com a versão mais recente
cidr-claim reiniciando a implementação do fw-core-backend-controller no espaço de nomes fw-system no cluster de administrador principal.
Servidores físicos
O arranque do servidor falha devido a problemas de POST no servidor HPE
Versões: 1.13.1
Sintomas: o arranque do servidor falha quando um servidor não consegue ultrapassar o processo de arranque POST. Iniciar sessão no ILO e verificar a consola do servidor mostra o seguinte erro:
Symptom: An Invalid Opcode Exception has occurred indicating
that the processor tried to execute an invalid, undefined opcode,
or an instruction with invalid prefixes.
Causes: This issue is typically a software or firmware issue and
not indicative of a hardware problem
Causes: This issue is typically a software or firmware issue and
not indicative of a hardware problem.
ACTION : Reboot the server.
Solução alternativa:
No iLO, clique no botão ligar/desligar e selecione Cold Boot.
Servidores bloqueados no estado de aprovisionamento
Versões: 1.13.1, 1.13.3, 1.13.5
Sintomas: os servidores ficam bloqueados num estado de aprovisionamento durante o arranque do servidor. Verifique o estado dos servidores:
k get servers -A | grep -v availabl
O resultado pode ter o seguinte aspeto:
NAMESPACE NAME AGE RACK MACHINE-CLASS MANAGEMENT-IP DATA-IP DATA-IP BMC-IP CLUSTER NODEPOOL STATE PROVISION-READY
gpc-system ag-aa-bm01 21h ag-aa o1-highmem1-40-gdc-metal 192.0.2.0 198.51.100.0 203.0.113.0 provisioning
gpc-system ag-ab-bm01 21h ag-ab o1-highmem1-40-gdc-metal 192.0.2.0 198.51.100.1 203.0.113.0 provisioned true
gpc-system ag-ac-bm01 21h ag-ac o1-highmem1-40-gdc-metal 192.0.2.0 198.51.100.2 203.0.113.0 provisioning
Solução alternativa:
Inicie o DHCP manualmente com uma configuração transferida do cluster KIND. Neste exemplo,
/tmp/dhcp.confé a configuração DHCP do cluster KIND:docker run -d -it --network host --name dnsmasq -v /tmp/dhcp.conf:/etc/dnsmasq.conf --cap-add=NET_ADMIN --restart always 198.51.100.255/gpc-system-container-images/private-cloud-staging/dnsmasq:VERSIONSubstitua
VERSIONpela versão de lançamento, conforme descrito nas instruções de atualização em Atualização manual de componentes de ficheiros para clusters de administrador de raiz e de organização, por exemplo,1.13.1-gdch.525.Verifique a configuração do BIOS no servidor e confirme que
NetworkBootnão está ativado para NICs do plano de dados (denominados no padrãoSlot{i}Nic{i}).Verifique a BIOS através da chamada da API:
curl -kv https://{bmcIP}/redfish/v1/Systems/1/bios -u $bmcUser:$bmcPasswordOnde
$bmcUsere$bmcPasswordsão as palavras-passe dos ILOs, que podem ser encontradas no ficheiro ou diretóriocellcfgnum segredo denominadobmc-credentials-<server-name>, por exemplo,bmc-credentials-ai-aa-bm01. Verifique se o resultado deste comando mostraSlot1Nic1: Disabled.Se alguma dessas
Slot{i}Nic{i}tiverNetworkBoot, desative-a com a API de definições da BIOS.curl -kv https://{bmcIP}/redfish/v1/Systems/1/bios/settings -u $bmcUser:$bmcPassword -X PATCH -d '{"Attributes": {"Slot{i}Nic{i}":"Disabled"}}' -H 'content-type: application/json'Substitua
Slot{i}Nic{i}pelo nome do espaço que tem o problema na carga útil.Reinicie o servidor.
O servidor DL380a não consegue o aprovisionamento
Versões: 1.13.3, 1.13.4, 1.13.5
Sintomas: o aprovisionamento do servidor falha na tarefa de encriptação para o modelo HPE DL380a.
O estado do CR do servidor está bloqueado em available durante o arranque do servidor:
# server name
export SERVER_NAME=
kubectl --kubeconfig "${KUBECONFIG:?must be set}" get servers ${SERVER_NAME} -n gpc-system
Solução alternativa:
Siga o procedimento IAM-R0004 para gerar o
KUBECONFIGpara oroot-admin-cluster.Siga o procedimento PLATAUTH-G0001 para gerar a chave SSH
root-id_rsaparaCLUSTER_NS=root.Pausar o servidor adicionando a anotação
server.system.private.gdc.goog/pausedao recurso personalizado do servidor:kubectl --kubeconfig "${KUBECONFIG:?must be set}" annotate server ${SERVER_NAME:?} -n gpc-system --overwrite server.system.private.gdc.goog/paused=''Inicie sessão no servidor a partir do IP de gestão:
export MGMT_IP=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get server ${SERVER_NAME:?} -n gpc-system -o=jsonpath='{.spec.managementNetwork.ips[0]}') ssh $MGMT_IP -i ~/.ssh/root-id_rsaAtive a encriptação manualmente:
/opt/MegaRAID/storcli/storcli64 /call/eall/sall secureerase force /opt/MegaRAID/storcli/storcli64 /c0 delete securitykey /opt/MegaRAID/storcli/storcli64 /c0 set securitykey useekms jDeve esperar uma saída dos comandos semelhante a:
root@ubuntu:~# /opt/MegaRAID/storcli/storcli64 /call/eall/sall secureerase force CLI Version = 007.2417.0000.0000 Apr 21, 2023 Operating system = Linux 5.4.0-1072-fips Controller = 0 Status = Success Description = Drive Secure Erase Succeeded. root@ubuntu:~# /opt/MegaRAID/storcli/storcli64 /c0 delete securitykey CLI Version = 007.2417.0000.0000 Apr 21, 2023 Operating system = Linux 5.4.0-1072-fips Controller = 0 Status = Success Description = None Controller Properties : ===================== ------------------------ Ctrl Method Result ------------------------ 0 delete Key Success ------------------------ root@ubuntu:~# /opt/MegaRAID/storcli/storcli64 /c0 set securitykey useekms j { "Controllers":[ { "Command Status" : { "CLI Version" : "007.2417.0000.0000 Apr 21, 2023", "Operating system" : "Linux 5.4.0-1072-fips", "Controller" : 0, "Status" : "Success", "Description" : "None" }, "Response Data" : { "Controller Properties" : [ { "Ctrl" : 0, "Method" : "Set Security using EKMS", "Result" : "Please reboot the system for the changes to take effect" } ] } } ] }Se verificar que o último comando não é bem-sucedido ou vir erros como "Invalid BIOS EKM status" (Estado do EKM do BIOS inválido), experimente reiniciar o servidor e o iLO e, em seguida, execute novamente este passo.
root@ubuntu:~# /opt/MegaRAID/storcli/storcli64 /c0 set securitykey useekms j { "Controllers":[ { "Command Status" : { "CLI Version" : "007.2417.0000.0000 Apr 21, 2023", "Operating system" : "Linux 5.4.0-1072-fips", "Controller" : 0, "Status" : "Failure", "Description" : "None", "Detailed Status" : [ { "Ctrl" : 0, "Method" : "Set Security using EKMS", "Result" : "-", "ErrMsg" : "Invalid BIOS EKM status", "ErrCd" : 255 } ] } } ] }Se o último comando tiver sido bem-sucedido, reinicie o servidor conforme indicado.
Crie uma unidade lógica manualmente:
Depois de o servidor terminar o reinício, inicie sessão no servidor a partir do IP de gestão novamente e liste todas as unidades disponíveis:
ssh $MGMT_IP -i ~/.ssh/root-id_rsa /opt/MegaRAID/storcli/storcli64 /c0 show jO resultado do último comando pode ter o seguinte aspeto:
{ "Controllers":[ { "Command Status" : { "CLI Version" : "007.2417.0000.0000 Apr 21, 2023", "Operating system" : "Linux 5.4.0-1072-fips", "Controller" : 0, "Status" : "Success", "Description" : "None" }, "Response Data" : { "Product Name" : "HPE MR416i-o Gen11", "Serial Number" : "******", "PCI Slot Number" : 17, "SAS Address" : "******", "PCI Address" : "00:12:00:00", "System Time" : "09/12/2024 23:32:48", "Mfg. Date" : "09/15/23", "Controller Time" : "09/12/2024 23:32:47", "FW Package Build" : "52.26.3-5379", "BIOS Version" : "7.26.00.0_0x071A0000", "FW Version" : "5.260.03-3985", "Driver Name" : "megaraid_sas", "Driver Version" : "07.713.01.00-rc1", "Current Personality" : "RAID-Mode ", "Vendor Id" : 4096, "Device Id" : 4322, "SubVendor Id" : 5520, "SubDevice Id" : 808, "Host Interface" : "PCI-E", "Device Interface" : "SAS-12G", "Bus Number" : 18, "Device Number" : 0, "Function Number" : 0, "Domain ID" : 0, "Security Protocol" : "SPDM-1.0.0", "Physical Drives" : 8, "Drive LIST" : [ { "EID:Slt" : "252:1", "DID" : 0, "State" : "UGood", "DG" : "-", "Size" : "1.60 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "MO001600PXVRU ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:2", "DID" : 1, "State" : "UGood", "DG" : "-", "Size" : "1.60 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "MO001600PXVRU ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:3", "DID" : 2, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:4", "DID" : 3, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:5", "DID" : 4, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:6", "DID" : 5, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:7", "DID" : 6, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" }, { "EID:Slt" : "252:8", "DID" : 7, "State" : "UGood", "DG" : "-", "Size" : "7.68 TB", "Intf" : "SAS", "Med" : "SSD", "SED" : "Y", "PI" : "N", "SeSz" : "512B", "Model" : "VO007680PXVRT ", "Sp" : "U", "Type" : "-" } ], "Enclosures" : 1, "Enclosure LIST" : [ { "EID" : 252, "State" : "OK", "Slots" : 8, "PD" : 8, "PS" : 0, "Fans" : 0, "TSs" : 0, "Alms" : 0, "SIM" : 0, "Port#" : "2I" } ] } } ] }Deve guardar os 2 IDs com
Sizeigual a1.60 TB, neste caso:EID:Slt252:1,252:2Em seguida, crie uma unidade lógica com IDs de
EID:Slt:/opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid1 drives=252:1,252:2 SEDA saída do último comando tem o seguinte aspeto:
/opt/MegaRAID/storcli/storcli64 /c0 add vd type=raid1 drives=252:1,252:2 SED CLI Version = 007.2417.0000.0000 Apr 21, 2023 Operating system = Linux 5.4.0-1072-fips Controller = 0 Status = Success Description = Add LD Succeeded.Simule o estado da encriptação do disco no CR do servidor.
Edite o estado do CR do servidor:
kubectl edit-status --kubeconfig "${KUBECONFIG:?must be set}" server ${SERVER_NAME:?} -n gpc-systemAdicione ou modifique o estado
DiskEncryptionEnabledpara verdadeiro:- lastTransitionTime: "<time>" message: "" observedGeneration: 1 reason: DiskEncryptionJobSucceeded status: "True" type: DiskEncryptionEnabledElimine a tarefa de encriptação do servidor, se existir:
kubectl --kubeconfig "${KUBECONFIG:?must be set}" delete job server-encrypt-and-create-logical-drive-${SERVER_NAME:?} -n gpc-systemRetome o servidor para que o aprovisionamento seja retomado:
kubectl --kubeconfig "${KUBECONFIG:?must be set}" annotate server ${SERVER_NAME:?} -n gpc-system --overwrite server.system.private.gdc.goog/paused-
A eliminação segura falha sem uma licença
Versões: 1.13.5
Sintomas: quando um servidor fica bloqueado durante a instalação do servidor, pode ver um estado no CR do servidor semelhante ao seguinte:
- lastTransitionTime: "2024-09-10T20:28:33Z"
message: 'unable to trigger secure erase: unable to complete secure erase
for server "zx-ad-bm07": failed to post payload to /redfish/v1/Systems/1/Actions/Oem/Hpe/HpeComputerSystemExt.SecureSystemErase:
400: {"error":{"code":"iLO.0.10.ExtendedInfo","message":"See @Message.ExtendedInfo
for more information.","@Message.ExtendedInfo":[{"MessageId":"iLO.2.27.LicenseKeyRequired"}]}}'
reason: Succeeded
status: "False"
type: BMCConfigPreinstallSecureEraseTriggered
Solução alternativa: siga as instruções no manual de procedimentos SERV-R0014.
Segurança da plataforma
O reconciliador da subAC de BYO não está a verificar se os certificados têm uma chave pública correspondente
Versões: 1.13.1
Sintomas: quando o modo de subCA BYO de PKI gera um novo pedido de assinatura de certificado (CSR) enquanto um certificado assinado anteriormente é carregado para a subCA, o reconciliador não verifica se o novo CSR corresponde ao certificado assinado antigo e marca o recurso personalizado (CR) cert-manager CertificateRequest como Ready.
Isto ocorre durante a renovação ou a rotação manual do certificado da SubCA. O controlador cert-manager tenta atualizar o estado do CR, o que aciona a seguinte mensagem de erro:Certificate
The certificate request has failed to complete and will be retried: Error signing certificate: error creating x509 │
│ certificate: x509: provided PrivateKey doesn't match parent's PublicKey
Solução alternativa:
Siga as instruções para carregar um novo certificado BYO SubCA assinado para o novo CSR.
O problema do cert-manager resulta na emissão sem êxito de PKI BYO com ACME
Versões: 1.13.1
Sintomas: a falha ocorre na primeira emissão ou renovação de certificados BYO com o protocolo Automatic Certificate Management Environment (ACME). Quando executa o comando para verificar o estado do certificado, vê que o certificado está not ready:
kubectl -n istio-system get certificate.pki.security.gdc.goog/default-wildcard-cert
O resultado tem um aspeto semelhante ao seguinte:
status:
conditions:
- lastTransitionTime: "2024-07-23T17:27:02Z"
message: 'reconciling Certificate status failed: cert-manager Certificate CR "default-wildcard-cert-pki-ct"/"pki-system" is not ready'
observedGeneration: 1
reason: ReconcileBackoff
status: "False"
type: Ready
Solução alternativa:
Reinicie a implementação do cert-manager no cluster de administrador da organização:
export KUBECONFIG=ORG_ADMIN_KUBECONFIG
kubectl rollout restart deployment/cert-manager -n cert-manager
Gestor de recursos
O estado do projeto não está disponível na consola do GDC
Versões: 1.13.1 ou superior
Sintomas: a consola do GDC não apresenta o estado de um projeto.
Os projetos que não estão no estado Ready não podem suportar novos recursos nem
processar novas modificações aos recursos existentes. Devido à incapacidade de confirmar o estado do projeto, não é claro quando os recursos de um projeto podem ser geridos, o que resulta em erros ao tentar novas ações do projeto.
Solução alternativa: consulte o manual de procedimentos RM-R0100 para imprimir o estado do projeto através da CLI kubectl.
Atualizar
bm-system e outras tarefas bloqueadas
Versões: 1.13.1
Sintomas: o bm-system e outros trabalhos que executam o playbook do Ansible estão bloqueados em gathering facts.
Solução alternativa: introduza o nome do nó que está bloqueado e execute multipath -ll | grep failed e multipath -ll | grep #. Se existir um resultado não vazio,siga os runbooks FILE R0020 e FILE R0021.
IP de gestão inacessível
Versões: 1.13.1, 1.13.3, 1.13.4 e 1.13.5
Sintomas: durante uma atualização, o IP de gestão de um servidor fica inacessível, especificamente após uma mudança.
Com o Rocky Linux, quando são adicionadas rotas estáticas, o IP de destino usado para alcançar as rotas estáticas tem de estar acessível antes de adicionar as rotas estáticas. Se o comutador for reiniciado após uma atualização do SO, esse IP de gestão pode ficar temporariamente inacessível.
Solução alternativa: estabeleça uma ligação SSH ao servidor através do endereço IP de dados e reinicie o serviço de rede para recriar as rotas estáticas em falta:
systemctl restart NetworkManager.service
O número da versão de storagecluster não é apresentado
Versões: 1.13.3
Sintomas: após uma atualização
o CR não mostra nenhum valor para o campo de estado StorageVersion.StorageCluster
Verifique a versão:
kubectl --kubeconfig <var>ROOT_ADMIN_KUBECONFIG</var> get StorageCluster -n gpc-system
Siga os passos na solução alternativa se o campo da versão estiver vazio.
Solução alternativa: reinicie a implementação do file-storage-backend-controller:
kubectl --kubeconfig <var>ROOT_ADMIN_KUBECONFIG</var> rollout restart deployment -n file-system file-storage-backend-controller
O servidor bare metal está bloqueado no estado de aprovisionamento
Versões: 1.13.1
Sintomas:
O servidor bare metal fica bloqueado no estado "Aprovisionamento" durante muito tempo quando está a ser criada uma organização.
Solução alternativa:
É possível que a configuração da BIOS do servidor tenha sido alterada para fazer com que o servidor use a placa de rede incorreta para o Pxebooting.
Siga estes passos para desativar o arranque de rede da NIC do plano de dados.
- Acesso necessário:
Defina o nome do servidor bloqueado.
export SERVER_NAME=Defina o IP e as credenciais do BMC do servidor.
export ip=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get server ${SERVER_NAME:?} -n gpc-system -ojsonpath='{.spec.bmc.ip}') export BMC_CREDENTIALS_SECRET=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get server ${SERVER_NAME:?} -n gpc-system -ojsonpath='{.spec.bmc.credentialsRef.name}') export user=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get secret ${BMC_CREDENTIALS_SECRET:?} -n gpc-system -ojsonpath='{.data.username}' | base64 -d) export pass=$(kubectl --kubeconfig "${KUBECONFIG:?must be set}" get secret ${BMC_CREDENTIALS_SECRET:?} -n gpc-system -ojsonpath='{.data.password}' | base64 -d)Identifique a ranhura PCIe da placa de rede do plano de dados no servidor.
kubectl --kubeconfig "${KUBECONFIG:?must be set}" get server ${SERVER_NAME} -n gpc-system -o jsonpath={.spec.serverHardware.portBond.nicPortNames}Por exemplo, a saída seguinte indica que a placa de rede está instalada no Slot 3.
["s3p1","s3p2"]Defina a variável PCIEslot:
export DATA_NIC_SLOT=3Confirme que o arranque de rede não está desativado.
curl -ks -u $user:$pass https://$ip/redfish/v1/systems/1/bios/settings | jq .Attributes | grep "Slot${DATA_NIC_SLOT}NicBoot1"Se o resultado for "NetworkBoot", tem de o desativar explicitamente.
Use o BMC para desativar a função de arranque de rede na placa de rede do plano de dados.
Substitua "Slot3" no comando seguinte pelo número do espaço real.
curl -k -u "$user":"$pass" -H "Content-Type: application/json" https://$ip/redfish/v1/systems/1/bios/settings/ -X PUT --data '{"Attributes":{"Slot3NicBoot1":"Disabled"}}' | jqe, em seguida, reinicie o computador.
curl -k -u "$user":"$pass" -H "Content-Type: application/json" https://$ip/redfish/v1/Systems/1/Actions/ComputerSystem.Reset/ -X POST -d '{"ResetType": "ForceRestart"}' | jqO servidor demora 10 a 15 minutos a ficar novamente disponível e retoma automaticamente o processo de aprovisionamento.
A atualização do armazenamento de objetos mostra um erro durante a verificação de pré-lançamento ou pós-lançamento
Versões: 1.13.1
Sintomas: as verificações pré-publicação ou pós-publicação falham com um erro. Verifique os registos:
kubectl logs -n gpc-system upgrade-managed-check-objectstorageupgrade-87698-rrjhrW0410
O erro pode ter o seguinte aspeto:
03:42:05.701163 1 upgrade_check.go:276] 1 error occurred:
* Group "/rbac.sysstd.role.vm-system.wtwf7txfmbhvujhpxrfampnrkdwqsvzro6i7rmo5tsfst4wbxldq" not ready for RBAC resource {Role vm-system g-vm-image-bucket-reader }
Error: check "ObjectStorageUpgrade" preflight check failed: 1 error occurred:
* Bucket "gpc-system/range-read-internal" not ready
F0410 03:42:05.701901 1 main.go:80] check "ObjectStorageUpgrade" preflight check failed: 1 error occurred:
* Bucket "gpc-system/range-read-internal" not ready
Solução alternativa:
Se o erro ocorrer durante as verificações pós-voo e todas as outras verificações forem concluídas sem erros, ignore as verificações pós-voo. Quando o upgrade for reiniciado, também tem de ignorar as verificações prévias com o kubeconfig de administrador raiz:
kubectl delete organizationupgrade -n gpc-system ORG_NAME && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-postflight-check=ok && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-preflight-check=okPor exemplo, se o erro ocorrer na organização org-1, o comando tem o seguinte aspeto:
kubectl delete organizationupgrade -n gpc-system org-1 && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-postflight-check=ok && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-preflight-check=okSe o erro ocorrer durante as verificações de pré-publicação e todas as outras verificações de pré-publicação forem concluídas sem erros, ignore as verificações de pré-publicação:
kubectl delete organizationupgrade -n gpc-system ORG_NAME && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-preflight-check=okPor exemplo, se o erro ocorrer na organização org-1, o comando tem o seguinte aspeto:
kubectl delete organizationupgrade -n gpc-system org-1 && kubectl annotate -n gpc-system organization org-1 upgrade.private.gdc.goog/skip-preflight-check=ok
Pode ter de aplicar esta solução alternativa mais do que uma vez se não for aplicada.
Reversões de atualizações do Helm
Versões: 1.13.3
Sintomas: um problema de atualização do Helm resulta numa série de reversões, não conseguindo encontrar um Certificate e um ServiceEntry. Pode ver uma mensagem como esta:
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
91 Thu Jul 18 13:26:42 2024 deployed iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Upgrade complete
9138 Fri Jul 19 22:21:56 2024 superseded iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
9139 Fri Jul 19 22:22:04 2024 superseded iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Rollback "iam-ais-backend" failed: no ServiceEntry with the name "ais-envoy-grpc" found
9140 Fri Jul 19 22:22:16 2024 superseded iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
9141 Fri Jul 19 22:22:30 2024 superseded iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Rollback "iam-ais-backend" failed: no ServiceEntry with the name "ais-envoy-grpc" found
9142 Fri Jul 19 22:22:35 2024 superseded iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
9143 Fri Jul 19 22:22:42 2024 superseded iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Rollback "iam-ais-backend" failed: no ServiceEntry with the name "ais-envoy-grpc" found
9144 Fri Jul 19 22:22:48 2024 superseded iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
9145 Fri Jul 19 22:22:56 2024 superseded iam-ais-backend-1.12.4-gdch.54 1.12.4-gdch.54 Rollback "iam-ais-backend" failed: no ServiceEntry with the name "ais-envoy-grpc" found
9146 Fri Jul 19 22:23:04 2024 failed iam-ais-backend-v1.13.0-iam-9b810cbc70 v1.13.0-iam-9b810cbc70 Rollback "iam-ais-backend" failed: no Certificate with the name "ais-metrics" found
Solução alternativa: siga os passos no manual de procedimentos OCLCM-R0122.
Atualização do nó ou ABM bloqueado devido ao pod dhcp-tftp-core-server não ter sido esvaziado
Versões: 1.13.3, 1.14.4, 1.14.5
Sintomas: a atualização do nó pode ficar bloqueada. No estado da máquina sem sistema operativo, o pod dhcp-tftp-core-server não é esvaziado. Pode ver uma mensagem como esta:
bareMetalMachineDrainingStatus:
currentDrainingStage: SystemCriticalPriorityClass
podsYetToDrain:
- name: dhcp-tftp-core-server-7ffcfcbb97-6wlg7
namespace: dhcp-system
resourceVersion: "5005530"
uid: f77826ea-1d57-46ff-a699-f42faa36c1d2
Solução alternativa: force a eliminação do pod dhcp-tftp-core-server-* para continuar. O comando tem o seguinte aspeto:
kubectl delete pod dhcp-tftp-core-server-7ffcfcbb97-6wlg7 -n dhcp-system --force
OrganizationUpgrade está bloqueado na fase de atualização do nó
Versões: 1.13.3
Sintomas: OrganizationUpgrade está bloqueado na fase de atualização do nó. Pode ver uma mensagem como esta:
Last Transition Time: 2024-08-27T12:37:40Z
Message: observed the following reason: [JobRunning]
Observed Generation: 614
Reason: Unsuccessful
Status: Unknown
Type: service/Node
Solução alternativa:
Verifique se existem
upgradetaskrequestCRs no cluster raizka get upgradetaskrequest -n gpc-system. Verifique se o nó ainda está no estado de execução. Certifique-se de que está bloqueado na tarefa para serviço.spec: clusterType: service Last Transition Time: 024-08-27T12:37:40Z Message: job gpc-system/v1.13.0-os-aa505d9004-upg-task-org-1-os-node-upgra-czwwd is running Observed Generation: 1 Reason: JobRunning Status: Unknown Type: SucceededCrie manualmente
nodeupgradeCRs para cada uma das reivindicações do node pool:export KUBECONFIG=ORG_ADMIN_KUBECONFIG kubectl get nodepoolclaims -n g-org-1-shared-service-cluster NAME AGE control-plane-node-pool 34d dbs-billing-system-billing-dbcluster-n2-standard-4-gdc 34d shared-service-default-worker 34dCrie um
nodeupgradeCR para cada uma das reivindicações do grupo de nós. Os detalhes da anotaçãoupgrade.private.gdc.goog/target-release-versiontêm de ser obtidos a partir do nome do CRMD do SO do alvo:kubectl get crmd --kubeconfig ${ROOT_ADMIN_KUBECONFIG} | grep "os" os-1.13.1-gdch.525 35d os-v1.13.0-os-4175a6dce6 27d os-v1.13.0-os-aa505d9004 5d18hUse a versão daqui nas anotações
upgrade.private.gdc.goog/target-release-version:kubectl --kubeconfig ${ROOT_ADMIN_KUBECONFIG} get crmd os-v1.13.0-os-aa505d9004 -o json | jq -r '.spec.config.vmNodeImage' rocky-86-1.13-v20240731-1.13-r191Aplique o seguinte
yamlpara cada um dos nodepoolclaim:apiVersion: upgrade.private.gdc.goog/v1alpha1 kind: NodeUpgrade metadata: annotations: upgrade.private.gdc.goog/target-release-version: VERSION name: NAME labels: addon.private.gdc.goog/cluster-type: service namespace: NAMESPACE spec: inFlightConf: maxConcurrentNodes: 1 nodePoolClaimRef: name: NAME namespace: NAMESPACE nodeType: Virtual software: osImage: name: NAME version: VERSIONDepois de as atualizações dos nós ficarem concluídas para os nós do cluster de serviço, atualize o estado do CR para Verdadeiro, para que a atualização da organização avance para a fase seguinte:
UpgradeTaskRequestkubectl patch upgradetaskrequest upg-task-org-1-os-node-upgrade-task-pckxn --type='json' -p='[{"op": "replace", "path": "/status/conditions/0/status", "value": "True"}]' --subresource=status -n gpc-system --kubeconfig /root/release/root-admin/root-admin-kubeconfigA atualização da organização deve avançar para a fase seguinte e o estado do serviço ou do nó vai ficar concluído:
Last Transition Time: 2024-08-27T22:44:09Z Message: observed the following reason: [JobRunning] Observed Generation: 614 Reason: Complete Status: True Type: service/Node
O kernel não consegue criar um contentor
Versões: 1.13.3
Sintomas: o kernel não consegue atribuir memória cgroups, o que resulta em falhas na criação de novos contentores.
Pode ver uma mensagem como esta:
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
FrequentContainerdRestart False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 NoFrequentContainerdRestart containerd is functioning properly
KernelDeadlock False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 KernelHasNoDeadlock kernel has no deadlock
ReadonlyFilesystem False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 FilesystemIsNotReadOnly Filesystem is not read-only
ContainerRuntimeUnhealthy False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 10:52:30 +0000 ContainerRuntimeIsHealthy Container runtime on the node is functioning properly
FrequentUnregisterNetDevice False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 NoFrequentUnregisterNetDevice node is functioning properly
KubeletUnhealthy False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 KubeletIsHealthy kubelet on the node is functioning properly
FrequentKubeletRestart False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 NoFrequentKubeletRestart kubelet is functioning properly
FrequentDockerRestart False Thu, 29 Aug 2024 13:28:33 +0000 Sun, 30 Jun 2024 07:41:50 +0000 NoFrequentDockerRestart docker is functioning properly
MemoryPressure Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
DiskPressure Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
PIDPressure Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
Ready Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
[root@zv-aa-bm01 ~]# journalctl -u kubelet -f | grep cilium-agent
Aug 29 17:29:47 zv-aa-bm01 kubelet[48625]: E0829 17:29:47.941493 48625 pod_workers.go:1298]
"Error syncing pod, skipping" err="failed to \"StartContainer\" for \"cilium-agent\" with CrashLoopBackOff: \"back-off 5m0s restarting failed container=cilium-agent pod=anetd-pvmz4_kube-system(db55cbd2-36e3-4d20-8c6b-edbb5191232d)\"" pod="kube-system/anetd-pvmz4" podUID="db55cbd2-36e3-4d20-8c6b-edbb5191232d"
Unknown Thu, 29 Aug 2024 13:31:31 +0000 Thu, 29 Aug 2024 13:32:30 +0000 NodeStatusUnknown Kubelet stopped posting node status.
e o nó está a usar um número muito grande de cgroups:
# cat /proc/cgroups | grep memory
memory 12 380360 1
Solução alternativa:
Siga um dos seguintes procedimentos:
- Execute
echo 3 > /proc/sys/vm/drop_cachesno nó e reinicie o kubelet. - Se o método anterior não funcionar, experimente reiniciar o nó.
Falha de conetividade intermitente ao VIP do cluster externo
Versões: 1.13.3
Sintomas: as falhas de ligação intermitentes ao IP virtual (VIP) do cluster externo, como o VIP do plano de controlo, o VIP do istio-gateway ou o VIP do Harbor, resultam num erro dial tcp :: connect: no route to host.
Para diagnosticar este problema, siga estes passos:
- Estabeleça ligação ao cluster de administrador principal.
Esta solução alternativa pressupõe que está a depurar endereços IP num cluster de administrador principal. Se estiver a depurar problemas de conetividade com outros clusters do Kubernetes, como os clusters de administrador da organização ou do sistema da organização, altere o valor
KUBECONFIGpara o caminho kubeconfig correto do cluster. Existem duas categorias conhecidas de IPs que podem ser afetadas. Verifique se o Border Gateway Protocol (BGP) anuncia os endereços IP aos comutadores de topo de rack (ToR):
Se o IP for um endereço IP do plano de controlo do Kubernetes, como
192.0.2.100, use este comando para obter as informações de configuração:KUBECONFIG=KUBECONFIG kubectl cluster-info # Kubernetes control plane is running at https://192.0.2.100:443`Substitua
KUBECONFIGpelo caminho para o ficheiro kubeconfig no cluster de administrador raiz.Para algumas configurações, o recurso personalizado
BGPAdvertisedRoutedefine que rotas no endereço IP são anunciadas a outras redes ou sistemas através do BGP. Se o endereço IP for anunciado pelo recurso personalizadoBGPAdvertisedRoute, use este comando para obter as informações de configuração:TARGET_IP=TARGET_IP_ADDRESS KUBECONFIG=KUBECONFIG kubectl get BGPAdvertisedRoute -A --kubeconfig=$KUBECONFIG | grep $TARGET_IPSubstitua
TARGET_IP_ADDRESSpelo endereço IP que está a ter problemas de conetividade intermitentes.
Verifique o estado dos
BGPSessionrecursos personalizados. UmBGPSessionrepresenta uma sessão de peering BGP individual estabelecida entre o seu cluster do Kubernetes e um par BGP externo. Inspecione os registos dos podsBGPAdvertisere verifique se todos os recursosBGPSessionestão no estadoEstablished:KUBECONFIG=KUBECONFIG kubectl get pods -l app=bgpadvertiser -n kube-system # Based on the name of pods, check their logs kubectl logs pod/bgpadvertiser-gpc-adhoc-6a265a03vm-worker-node0-zone1 -n kube-system --kubeconfig=$KUBECONFIG`A saída de um pod
BGPAdvertiserem bom estado contém o seguinte fragmento:I0904 04:32:19.999906 1 main.go:217] BGP advertiser serving...\ time="2024-09-04T04:32:25Z" level=info msg="Peer Up" Key=10.200.0.1 State=BGP_FSM_OPENCONFIRM Topic=Peer\Verifique a estabilidade da ligação. Crie e execute um script para verificar se a conetividade é intermitente ou instável:
Crie o script:
#!/bin/bash TARGET=$1 CNT=0 for i in {1..100}; do output=$(curl --no-progress-meter -k https://$TARGET 2>&1) if echo "$output" | grep -q "No route to host"; then CNT=$((CNT+ 1)) echo "Attempt $i: $output" fi sleep 0.1 done echo "$CNT out of 100 runs hit No route to host error"Execute o script:
./script.sh TARGET_IP_ADDRESS:PORTSubstitua
PORTpelo número da porta que está a ter problemas.Se a sua ligação tiver problemas, vê um resultado semelhante ao seguinte:
Attempt 2: curl: (7) Failed to connect to 192.0.2.201 port 10443: No route to host Attempt 4: curl: (7) Failed to connect to 192.0.2.201 port 10443: No route to host Attempt 7: curl: (7) Failed to connect to 192.0.2.201 port 10443: No route to host`
O resultado anterior confirma o problema. Verifique as rotas nos comutadores TOR para ver se a configuração do comutador TOR é a origem do problema.
Supondo que o tráfego é rejeitado para um endereço IP de exemplo de
192.0.2.201e é anunciado pelo recursoBGPAdvertisedRoute, examine os saltos no recursoBGPAdvertisedRoutepara identificar potenciais pontos de falha:apiVersion: networking.gke.io/v1 kind: BGPAdvertisedRoute metadata: annotations: bgploadbalancer.networking.gke.io/servicename: istio-ingressgateway bgploadbalancer.networking.gke.io/servicens: istio-system creationTimestamp: "2024-08-20T19:03:02Z" generation: 150 name: default-istio-system-istio-ingressgateway-rj2fv namespace: kube-system ownerReferences: - apiVersion: networking.gke.io/v1 blockOwnerDeletion: true controller: true kind: BGPLoadBalancer name: default uid: f681f3e5-c66a-45d6-a3ac-9d7ae26f555f resourceVersion: "27133500" uid: 8ede0c81-3aba-40ce-a441-4aec334b41bd spec: bgpPeerNames: - 192.0.2.6-peer-10.0.1.1 - 192.0.2.5-peer-10.0.1.0 - 192.0.2.5-peer-10.0.1.1 - 192.0.2.6-peer-10.0.1.0 nextHops: - 192.0.2.2 - 192.0.2.3 - 192.0.2.4 prefix: 192.0.2.201/32Consulte os endereços IP no campo
nextHops. Para cada endereço IP, encontre o nome do servidor. Por exemplo:- 192.0.2.2 zt-aa-bm08 - 192.0.2.3 zt-aa-bm09 - 192.0.2.4 zt-ab-bm01Este resultado mostra que os próximos saltos são para servidores no rack
aae no rackab. Inicie sessão nos comutadores TOR no rackaaeabe compare as rotas em ambos os racks:show ip route 192.0.2.201 vrf root-external-vrfSe as rotas forem diferentes entre os comutadores TOR nos dois racks, está a ter o problema que a solução alternativa atenua. O resultado para este problema tem o seguinte aspeto:
zt-aa-torsw01# show ip route 192.0.2.201 vrf root-external-vrf IP Route Table for VRF "root-external-vrf" '*' denotes best ucast next-hop '**' denotes best mcast next-hop '[x/y]' denotes [preference/metric] '%<string>' in via output denotes VRF <string> 192.0.2.201/32, ubest/mbest: 3/0, all-best *via 192.0.2.2, [20/0], 1w1d, bgp-65070, external, tag 64513 *via 192.0.2.3, [20/0], 1w1d, bgp-65070, external, tag 64513 *via 192.0.2.4, [20/0], 1w1d, bgp-65070, external, tag 64513 zt-aa-torsw02# sh ip route 192.0.2.201 vrf root-external-vrf IP Route Table for VRF "root-external-vrf" '*' denotes best ucast next-hop '**' denotes best mcast next-hop '[x/y]' denotes [preference/metric] '%<string>' in via output denotes VRF <string> 192.0.2.201/32, ubest/mbest: 3/0, all-best *via 192.0.2.2, [20/0], 1w3d, bgp-65070, external, tag 64513 *via 192.0.2.3, [20/0], 1w3d, bgp-65070, external, tag 64513 *via 192.0.2.4, [20/0], 1w3d, bgp-65070, external, tag 64513 zt-ab-torsw01# show ip route 192.0.2.201 vrf root-external-vrf IP Route Table for VRF "root-external-vrf" '*' denotes best ucast next-hop '**' denotes best mcast next-hop '[x/y]' denotes [preference/metric] '%<string>' in via output denotes VRF <string> 192.0.2.201/32, ubest/mbest: 2/0, all-best *via 10.249.88.2, [200/0], 1w1d, bgp-65070, internal, tag 64513 *via 192.0.2.3, [200/0], 1w1d, bgp-65070, internal, tag 64513 zt-ab-torsw02# sh ip route 192.0.2.201 vrf root-external-vrf IP Route Table for VRF "root-external-vrf" '*' denotes best ucast next-hop '**' denotes best mcast next-hop '[x/y]' denotes [preference/metric] '%<string>' in via output denotes VRF <string> 192.0.2.201/32, ubest/mbest: 2/0, all-best *via 192.0.2.2, [200/0], 1w3d, bgp-65070, internal, tag 64513 *via 192.0.2.3, [200/0], 1w3d, bgp-65070, internal, tag 64513Neste resultado, as rotas no rack
aaestão no estado esperado, mostrando três saltos seguintes listados em relação ao prefixo. No entanto, no rackab, o prefixo tem apenas dois saltos seguintes. Quando o tráfego destinado ao prefixo é aplicado hash ao rack,abo nó correspondente ao próximo salto em falta nunca recebe o tráfego e a rede encontra o problema de conetividade.
Siga a solução alternativa para mitigar este problema.
Solução alternativa:
Esta solução alternativa ajuda a resolver problemas de conetividade intermitentes com determinados endereços IP em clusters do Kubernetes.
Para mitigar este problema, tem de aplicar várias alterações de configuração à sessão BGP entre os comutadores agregados. Os comutadores agregados (AGG) agregam o tráfego de vários comutadores TOR. Siga estes passos para atualizar todas as configurações necessárias:
Um ficheiro de configuração denominado
switchstaticconfigrepresenta as configurações estáticas num único comutador. Transfira o ficheiroswitchstaticconfigpara ambos os comutadores AGG:export KUBECONFIG=KUBECONFIG kubectl get switchstaticconfig za-ab-aggsw01-static-config -n gpc-system -oyaml > /tmp/za-ab-aggsw01-static-config.yaml kubectl get switchstaticconfig za-ac-aggsw01-static-config -n gpc-system -oyaml > /tmp/za-ac-aggsw01-static-config.yamlObtenha o número do sistema autónomo (ASN) do ambiente:
root@bootstrapper:/tmp# kubectl get ClusterBGPRouter --kubeconfig KUBECONFIG -A -o yaml | grep networkASN | head -1 networkASN: 65030Este resultado mostra um valor de ASN de
65030. Tem de usar o valor de ASN que é devolvido aqui nos passos seguintes.Um endereço IP de loopback num comutador AGG funciona como um endereço estável e sempre ativo para gestão, encaminhamento e resolução de problemas, mesmo que outras ligações de rede estejam inativas. Obtenha os endereços IP de loopback de cada um dos comutadores AGG:
root@bootstrapper:~# kubectl get --kubeconfig KUBECONFIG aggswitchinternal -n gpc-system -o jsonpath='{range.items[*]}{.metadata.name}{":\t"}{.spec.loopbackIPs}{"\n"}{end}'O resultado tem um aspeto semelhante ao seguinte:
za-ab-aggsw01-internal: ["192.0.2.1"] za-ac-aggsw01-internal: ["192.0.2.2"]Atualize o
staticswitchconfigpara o interrutorza-ab-aggsw01AGG. Adicione este fragmento à secçãoconfig:spec: config: | route-map onlydefault permit 10 match ip address prefix default router bgp ASN neighbor LOOPBACK_ADDRESS address-family l2vpn evpn route-map onlydefault in ... key chain OSPF_AUTH_KEYCHAIN_0 key 1Substitua o seguinte:
ASN: o valor ASN do passo anterior. Neste exemplo, este valor é65030.LOOPBACK_ADDRESS: este é o endereço IP de loopback do comutador AGGza-ac-aggsw01. Neste exemplo, o valor é192.0.2.2.
Aplique a mesma atualização ao outro comutador AGG,
za-ac-aggsw01. Tem de fornecer o endereço de loopback correto. O endereço IP de loopback é diferente para cada comutador:za-ab-aggsw01-internal: ["192.0.2.1"] za-ac-aggsw01-internal: ["192.0.2.2"]Crie e execute o mesmo script usado para diagnosticar o problema neste passo para verificar se a correção foi bem-sucedida. O resultado não mostra mensagens de erro.
O erro Incorrect version of Trident é apresentado durante a atualização
Versões: 1.13.3, 1.13.4, 1.13.5
Sintomas: quando atualiza a partir de versões inferiores à 1.13.3, o ontap apresenta o erro Incorrect version of Trident. Pode ver uma mensagem como esta:
Status:
Conditions:
Last Transition Time: 2024-08-27T15:19:07Z
Message: Incorrect version of Trident. Wanted v23.10.0-gke.6, got v23.10.0-gke5
Observed Generation: 1
Reason: QualificationFailed
Status: False
Type: AllComplete
Events:
Solução alternativa:
Atualize o
releasemetadatada versão para a qual está a fazer a atualização:export KUBECONFIG=<point to ROOT Admin Kubeconfig> To get the list of all releasemetadata: `kubectl get releasemetadata`O resultado pode ter o seguinte aspeto:
NAME AGE 1.12.2-gdch.785 24d 1.12.4-gdch.96 13d 1.13.3-gdch.5548 11hEscolha a versão para a qual está a fazer a atualização, conforme mencionado no exemplo seguinte:
kubectl get releasemetadata 1.13.3-gdch.5548 -o yaml > releasemetadata.yamlAtualize o tridentVersion na secção fileBlockStorage do ficheiro .yaml para a versão mencionada no erro. Se a mensagem de erro tiver o seguinte aspeto:
Message: Incorrect version of Trident. Wanted v23.10.0-gke.6, got v23.10.0-gke.5Altere o
tridentVersionparav23.10.0-gke.5emreleasemetadata.yaml.Por exemplo, se o valor original fosse:
infraComponents: fileBlockStorage: ONTAPVersion: 9.14.1P1 harvestVersion: v22.08.0-gke.7 tridentVersion: v23.10.0-gke.6,Altere-o para o seguinte valor:
infraComponents: fileBlockStorage: ONTAPVersion: 9.14.1P1 harvestVersion: v22.08.0-gke.7 tridentVersion: v23.10.0-gke.5.Aplique as alterações:
kubectl apply -f releasemetadata.yamlAplique novamente a atualização de armazenamento do
ontap.
Falha no agendamento dos pods
Versões: 1.13.3. 1.13.4 e 1.13.5
Sintomas: durante o aprovisionamento do cluster de utilizadores, não é possível agendar alguns pods. Pode ver uma mensagem como esta:
0/6 nodes are available: 1 Insufficient cpu. preemption: 0/6 nodes are available: 6 No preemption victims found for incoming pod
Solução alternativa:
Aumente a escala do node pool do painel de controlo do cluster de utilizadores:
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG patch addresspoolclaim/control-plane-node-pool -n ${CLUSTER_NAME}-cluster --type=json -p="[{'op': 'replace', 'path': '/spec/size', 'value': 5}]"
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG patch nodepoolclaim/control-plane-node-pool -n ${CLUSTER_NAME}-cluster --type=json -p="[{'op': 'replace', 'path': '/spec/nodeCount', 'value': 5}]"
Falha na atualização do subcomponente iac-zoneselection-global
Versões: 1.13.1
Sintomas: durante uma atualização para a versão 1.13.3, ocorre um erro no subcomponente iac-zoneselection-global. Pode ver uma mensagem como esta:
== Subcomponents with failures in root org ===
Sub-Component: iac-zoneselection-global - Reconciliation error: E0100 - deploy: failed to install chart: release iac-zoneselection-global-backend failed, and has been uninstalled due to atomic being set: 1 error occurred:
* ZoneSelection.location.mz.global.private.gdc.goog "iac" is invalid: spec.resultObjectName: Required value
Events: Type Reason Age From Message
---- ------ ---- ---- -------
Warning ReconciliationError 119s (x521 over 20h) Subcomponent E0100 - deploy: failed to install chart: release iac-zoneselection-global-backend failed, and has been uninstalled due to atomic being set: 1 error occurred:
* ZoneSelection.location.mz.global.private.gdc.goog "iac" is invalid: spec.resultObjectName: Required value
Solução alternativa:
A atualização para a versão 1.13.3 corrige o erro.
A verificação de atualização de tarefas excedeu o prazo
Versões: 1.12.x, 1.13.x
Sintomas: durante a atualização da organização, a verificação da atualização mostra o estado False com o motivo DeadlineExceeded. Pode ver uma mensagem como esta:
Preflight Check:
Conditions:
Last Transition Time: 2024-10-29T18:57:47Z
Message: the result has status: False, reason: PreflightCheckFailed, and err: [check "OPAUpgrade" of operable component "OPA" failed with reason "DeadlineExceeded", no existing pods found, check "Arti
actAvailability" of operable component "AR" failed with reason "DeadlineExceeded", no existing pods found, check "PackageValidation" of operable component "AR" failed with reason "DeadlineExceeded", no existing pods foun
d, check "IAMUpgrade" of operable component "IAM" failed with reason "DeadlineExceeded", no existing pods found, check "NodeHealth" of operable component "OS" failed with reason "DeadlineExceeded", no existing pods found
, check "DNSHealth" of operable component "DNS" failed with reason "DeadlineExceeded", no existing pods found, check "AdminClusterCheck" of operable component "UPORC" failed with reason "DeadlineExceeded", no existing po
ds found[]
Observed Generation: 3
Reason: PreflightCheckFailed
Status: False
Type: Succeeded
Start Time: 2024-10-29T17:57:47Z
Solução alternativa:
- Elimine as tarefas de verificação de atualização com falhas correspondentes às verificações de atualização com falhas.
- Aguarde até que as tarefas de verificação de atualização sejam recriadas.
- Analise os registos das tarefas recriadas e resolva os problemas.
O suplemento meta-monitoring falha devido à localização do strongswan estar num diretório de tempo de execução diferente
Versões: 1.12.x, 1.13.x
Sintomas: durante a atualização para a versão 1.13.4 ou 1.13.5, o suplemento meta-monitoring falha:
kubectl --kubeconfig ORG_ADMIN_KUBECONFIGget addons -A | grep meta-monitoring
org-1-system-cluster meta-monitoring false false 1.12.4-gdch.96
Verifique o suplemento:
kubectl --kubeconfig ORG_ADMIN_KUBECONFIG get -n org-1-system-cluster addon meta-monitoring -o yaml
A mensagem da condição pode ter o seguinte aspeto:
status:
conditions:
- lastTransitionTime: "2024-11-19T02:57:30Z"
message: 'Error occurred during addon installation: failed to rollback chart:
create: failed to create: Internal error occurred: failed calling webhook "validation.gatekeeper.sh":
failed to call webhook: Post "https://gatekeeper-webhook-service.opa-system.svc:443/v1/admit?timeout=3s":
context deadline exceeded'
observedGeneration: 2
reason: InstallationError
status: "False"
type: Deployed
Solução alternativa:
Certifique-se de que as sessões de BGP no cluster do sistema da organização estão a falhar, por exemplo:
kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG get bgpsessions -A NAME LOCAL ASN PEER ASN LOCAL IP PEER IP STATE LAST REPORT 10.252.122.10-peer-10.0.1.32-vm-7351eebe 64513 65030 10.252.122.10 10.0.1.32 10.252.122.10-peer-10.0.1.33-vm-7351eebe 64513 65030 10.252.122.10 10.0.1.33 10.252.122.11-peer-10.0.1.32-vm-7351eebe 64513 65030 10.252.122.11 10.0.1.32 10.252.122.11-peer-10.0.1.33-vm-7351eebe 64513 65030 10.252.122.11 10.0.1.33 172.20.128.3-peer-10.0.1.48-za-aa-bm02-hltg2 64513 65030 172.20.128.3 10.0.1.48 172.20.128.3-peer-10.0.1.49-za-aa-bm02-hqblq 64513 65030 172.20.128.3 10.0.1.49Certifique-se de que os
ang-nodePods estão presosContainerCreating, por exemplo:kubectl --kubeconfig ORG_SYSTEM_KUBECONFIG get pods -n kube-system -l app=ang-node NAME READY STATUS RESTARTS AGE ang-node-5c6c8 0/3 ContainerCreating 0 2d21h ang-node-6skkl 0/3 ContainerCreating 0 2d14h ang-node-7d7dj 0/3 ContainerCreating 0 2d20h ang-node-9l4xc 0/3 ContainerCreating 0 2d17hÉ apresentado o seguinte erro:
Warning FailedMount 112s (x2056 over 2d21h) kubelet MountVolume.SetUp failed for volume "vici" : hostPath type check failed: /var/run/strongswan is not a directoryAplique a seguinte alteração à
ang-overridesAddonConfiguration no cluster de administração da organização:kubectl --kubeconfig ORG_ADMIN_KUBECONFIG edit addonconfiguration ang-overrides -n org-1-system-clusterAltere o seguinte:
volumes: - hostPath: path: /var/run/strongswan type: Directory name: vicipara o seguinte:
volumes: - hostPath: path: /var/run type: Directory name: viciApós cerca de um minuto, confirme que os
ang-nodePods estão agora no estadoRunning:NAME READY STATUS RESTARTS AGE ang-node-7hj5q 3/3 Running 0 15s ang-node-xps2m 3/3 Running 0 34s ang-node-krx8p 3/3 Running 0 34s ang-node-cbm1a 3/3 Running 0 34sCertifique-se de que as sessões de BGP no cluster do sistema da organização estão agora em execução.
O suplemento
meta-monitoringvai avançar para a fase seguinte.
A atualização da organização de raiz está bloqueada devido a uma falha na tarefa de assinatura
Versões: 1.13.3, 1.13.4
Sintomas: quando atualiza de 1.13.3 para 1.13.4, pode ver uma mensagem como esta:
Message: [the result has status: False, reason: PreflightCheckFailed, and err: check "PackageValidation" of operable component "AR" failed with reason "DeadlineExceeded", no existing pods found, the result has status: Unknown, reason: UpgradeCheckJobsInProgress
Solução alternativa:
Desative a verificação prévia:
kubectl annotate -n gpc-system organization root upgrade.private.gdc.goog/skip-preflight-check=okElimine a tarefa
artifact-signature-verification-***com falha.Aguarde até que a atualização de raiz esteja concluída.
Opcional: ative a verificação pré-voo se o ambiente for atualizado para a versão 1.13.4 ou posterior.
Quando o comando tiver a versão 1.13.4, as atualizações não devem ter este problema.
A atualização da organização de inquilinos falha na fase de verificação prévia com ErrImagePull
Versões: 1.13.3
Sintomas: a atualização da organização de inquilinos falha na fase de verificação prévia com ErrImagePull para o pod de validação de pacotes. Pode ver uma mensagem como esta:
export KUBECONFIG=ORG_ADMIN_KUBECONFIG
kubectl get po -n package-validation-system | grep artifact-signature-verification
Os pods apresentam um ImagePullBackOff erro:
kubectl describe po -n package-validation-system POD_NAME
É apresentado um erro de obtenção de imagem, como no seguinte exemplo:
Name: artifact-signature-verification-20240823224755-4ppkt
Namespace: package-validation-system
Priority: 0
Service Account: package-validation
Node: ak-ab-base02/203.0.113.250
Start Time: Fri, 23 Aug 2024 22:47:55 +0000
Labels: batch.kubernetes.io/controller-uid=bf81d5eb-d597-464e-a907-67c1c8a11c11
batch.kubernetes.io/job-name=artifact-signature-verification-20240823224755
controller-uid=bf81d5eb-d597-464e-a907-67c1c8a11c11
job-name=artifact-signature-verification-20240823224755
Annotations: <none>
Status: Pending
IP: 203.0.113.255
IPs:
IP: 203.0.113.255
Controlled By: Job/artifact-signature-verification-20240823224755
Containers:
artifact-signature-verification:
Container ID:
Image: gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004
Image ID:
Port: <none>
Host Port: <none>
State: Waiting
Reason: ImagePullBackOff
Ready: False
Restart Count: 0
...
node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 10m default-scheduler Successfully assigned package-validation-system/artifact-signature-verification-20240823224755-4ppkt to ak-ab-base02
Normal Pulling 7m25s (x4 over 9m22s) kubelet Pulling image "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004"
Warning Failed 7m14s (x4 over 9m12s) kubelet Failed to pull image "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004": failed to pull and unpack image "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004": failed to resolve reference "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004": unexpected status from HEAD request to https://203.0.113.255/v2/private-cloud-staging/signature-verifier/manifests/v1.13.0-uporc-aa505d9004?ns=gcr.io: 401 Unauthorized
Warning Failed 7m14s (x4 over 9m12s) kubelet Error: ErrImagePull
Warning Failed 7m3s (x6 over 9m11s) kubelet Error: ImagePullBackOff
Normal BackOff 4m11s (x17 over 9m11s) kubelet Back-off pulling image "gcr.io/private-cloud-staging/signature-verifier:v1.13.0-uporc-aa505d9004"
Solução alternativa:
Ignore as verificações prévias:
kubectl annotate -n gpc-system organization ORG_NAME \
upgrade.private.gdc.goog/skip-preflight-check=ok
Não foi possível encontrar serviceaccount durante a atualização da organização raiz
Versões: 1.13.8, 1.13.9
Sintomas: durante a atualização para a versão 1.13.8, a implementação do addon para RBACs falha se tiverem sido feitas atualizações anteriores e já existirem suplementos. Os sintomas podem estar num dos seguintes estágios:
- verificações prévias ou posteriores ao voo
- Qualquer fase que envolva uma tarefa de atualização e a mensagem indique que o trabalho está em execução, mesmo que a tarefa esteja bloqueada. A mensagem
status.conditionsindica que a tarefa está a ser executada durante muito tempo, o que indica que existe um problema.
Para verificar se existe uma falha na verificação prévia da atualização, verifique o estado do objeto OrganizationUpgrade correspondente da organização que está a fazer a atualização:
kubectl get -n gpc-system organizationupgrade ORG_NAME -o yaml
Se a tarefa falhar em PreflightCheck, pode apresentar uma falha como esta ou uma mensagem
UpgradeCheckRBACDeploymentInProgress:- lastTransitionTime: "2024-09-27T00:28:21Z" message: "" observedGeneration: 2 reason: Unknown status: "False" type: PreflightCheckSe a tarefa estiver a falhar na fase do AnthosBareMetal (ABM) em que a tarefa está a ser executada, é apresentado o seguinte resultado:
- Last Transition Time: 2024-09-26T19:55:13Z message: observed the following reason: [JobRunning] observedGeneration: 3 reason: Unsuccessful status: Unknown type: root-admin/AnthosBareMetalSe a falha estiver nas verificações, o
upgradecheckrequestCR falha:kubectl get upgradecheckrequests -n gpc-system --kubeconfig /root/release/root-admin/root-admin-kubeconfigO resultado pode ter o seguinte aspeto:
NAME AGE upgrade-check-root-postflight-xc7p8 6h32mSe a falha estiver nas tarefas, o
upgradetaskrequestsCR falha:kubectl get upgradetaskrequests -n gpc-system --kubeconfig /root/release/root-admin/root-admin-kubeconfigO resultado pode ter o seguinte aspeto:
NAME AGE upg-task-org-1-mz-mz-location-upgrade-5n6wp 2d19hSe a falha indicar um erro de RBAC na procura de uma conta de serviço, verifique se foi implementado um suplemento anterior:
Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedCreate 38s (x11 over 5m41s) job-controller Error creating: pods "v1.13.0-mz-2837f80328-upg-task-root-mz-mz-location-jkv69-" is forbidden: error looking up service account gpc-system/upgrade-task-mz-sa-v1.13.0-mz-2837f80328: serviceaccount "upgrade-task-mz-sa-v1.13.0-mz-2837f80328" not found
Solução alternativa:
Verifique se foi implementado um suplemento anterior:
Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedCreate 4m30s (x101 over 99m) job-controller Error creating: pods "v1.13.0-os-2837f80328-upg-task-root-os-node-upgrad-fdblm-" is forbidden: error looking up service account gpc-system/upgrade-task-os-sa-v1.13.0-os-2837f80328: serviceaccount "upgrade-task-os-sa-v1.13.0-os-2837f80328" not foundcount gpc-system/upgrade-task-mz-sa-v1.13.0-mz-2837f80328: serviceaccount "upgrade-task-mz-sa-v1.13.0-mz-2837f80328" not foundObtenha os suplementos anteriores existentes para o mesmo componente,
upgrade-task-mzpara a tarefa:kubectl get addons -n gpc-system | grep upgrade-task upgrade-task-mz-lsqzc true true v1.13.0-mz-7cf810d7a5Eliminar este suplemento:
kubectl delete addon -n gpc-system upgrade-task-mz-lsqzc upgrade-task-os-px5wj addon.addon.private.gdc.goog "upgrade-task-mz-lsqzc" deletedDepois de eliminar o suplemento, também deve eliminar o
upgradetaskrequestou oupgradecheckrequestcorrespondente. É recriado.kubectl delete upgradetaskrequest -n gpc-system upgrade-task-mz-lsqzcContinue a monitorizar o
upgradetaskrequest, oupgradecheckrequestou a tarefa correspondente recém-criados diretamente.
A atualização falha a shared-service-cluster upgrade
Versões: 1.13.3
Sintomas: a atualização do Anthos em bare metal está bloqueada com uma ou mais máquinas bare metal. Todas as outras máquinas bare metal foram atualizadas com êxito ou ainda não iniciaram a atualização. Uma máquina sem sistema operativo está no modo de manutenção, mas continua a apresentar a versão anterior para os campos CURRENT ABM VERSION e DESIRED ABM VERSION.
Siga as instruções do Anthos bare metal para obter o estado baremetalmachine e os detalhes do cluster:
kubectl get baremetalmachines -n "${CLUSTER_NAMESPACE}" --kubeconfig=${ADMIN_KUBECONFIG}
Resultado esperado:
NAME CLUSTER READY INSTANCEID MACHINE ABM VERSION DESIRED ABM VERSION
192.0.2.0 g-org-1-shared-service true baremetal://192.0.2.0 192.0.2.0 1.29.300-gke.185 1.29.300-gke.185
192.0.2.18 g-org-1-shared-service true baremetal://192.0.2.18 192.0.2.18 1.29.300-gke.185 1.29.300-gke.185
192.0.2.19 g-org-1-shared-service true baremetal://192.0.2.19 192.0.2.19 1.29.300-gke.185 1.29.300-gke.185
192.0.2.10 g-org-1-shared-service true baremetal://192.0.2.10 192.0.2.10 1.29.300-gke.185 1.29.300-gke.185
192.0.2.22 g-org-1-shared-service true baremetal://192.0.2.22 192.0.2.22 1.29.300-gke.185 1.29.300-gke.185
192.0.2.9 g-org-1-shared-service true baremetal://192.0.2.9 192.0.2.9 1.29.0-gke.1449 1.29.0-gke.1449
kubectl get baremetalmachines -n "${CLUSTER_NAMESPACE}" --kubeconfig=${ADMIN_KUBECONFIG} ${MACHINE_IP} -o json | jq '.status.underMaintenance'
Resultado esperado:
true
Solução alternativa:
Mova a máquina de inventário para fora do modo de manutenção:
export InventoryMachineName=$(kubectl --kubeconfig=${ADMIN_KUBECONFIG} get inventorymachines -A -o json | jq '.items[] | select(.spec.address=="${MACHINE_IP}") | .metadata.name') kubectl --kubeconfig "${ADMIN_KUBECONFIG:?}" patch inventorymachine/${InventoryMachineName:?} --type=merge -p '{"spec": {"maintenance": false}}'Aguarde que a máquina de inventário saia do modo de manutenção. Esta ação pode demorar até 10 minutos.
kubectl --kubeconfig "${ADMIN_KUBECONFIG:?}" wait inventorymachine/${InventoryMachineName} --for=jsonpath=.status.maintenance=true --timeout=600sMonitorize as baremetalmachines para ver se a máquina deteta a atualização da versão do ABM selecionada.
kubectl get baremetalmachines -n "${CLUSTER_NAMESPACE}" --kubeconfig=${ADMIN_KUBECONFIG}
Falha na instalação do suplemento system-dashboards
Versões: 1.13.5
Sintomas: a atualização de 1.12.4 para 1.13.5 falha na atualização do suplemento para o suplemento system-dashboards:
│ Status: │
│ Conditions: │
│ Last Transition Time: 2024-10-22T00:34:54Z │
│ Message: Error occurred during addon installation: failed to rollback chart: no ConfigMap with the name "cluster-etcd-platform-obs" found │
│ Observed Generation: 2 │
│ Reason: InstallationError │
│ Status: False
Solução alternativa: siga os passos no manual de instruções OCLCM-R0122.
O NodeUpgradeTask CR está bloqueado na condição NodeOSInPlaceUpgradePostProcessingCompleted
Versões: 1.13.5
Sintomas: durante a atualização para a versão 1.13.5, o NodeUpgradeTask CR fica bloqueado na condição NodeOSInPlaceUpgradePostProcessingCompleted.
Verifique se a tarefa os-artifact-collector correspondente está concluída. Se a tarefa estiver bloqueada durante muitas horas, é apresentada a seguinte mensagem:
root@gpc-adhoc-7e017e71vm-bootstrapper-zone1:~# kag logs os-artifact-collector-bm-45942837-p8hrk-z56gh
I1020 22:06:11.844634 1 main.go:30] BuildDate: 2024-10-19T16:54:08Z
I1020 22:06:11.844695 1 main.go:31] Version: 0.0.0-gdch.1.v3f2043
Solução alternativa:
- Elimine a tarefa ou o pod para forçar a nova tentativa.
A distribuição de imagens falha durante uma atualização
Versões: 1.13.5
Sintomas: a distribuição de imagens falha durante uma atualização da versão 1.12.4 para a 1.13.x:
Error: error uploading the VM image to object storage: failed to upload to object storage: BadRequest: Bad Request
status code: 400, request id: , host id:
F1018 02:04:46.191627 1 main.go:88] VM Image Distributor quit: error uploading the VM image to object storage: failed to upload to object storage: BadRequest: Bad Request
status code: 400, request id: , host id:
goroutine 1 [running]:
Verifique os pods obj-proxy em gpc-system na organização para ver que está a falhar na validação de certificados:
E1021 19:10:31.710076 1 token_source.go:185] Unable to rotate token: failed to initialize aisClient: failed to initialise AIS client: failed to obtain login config from the provided path "https://console.org-1.zone1.google.gdch.test/.well-known/login-config" with error: unable to parse centralized login config file: unsuccessful get request to config URL (https://console.org-1.zone1.google.gdch.test/.well-known/login-config) with error: Get "https://console.org-1.zone1.google.gdch.test/.well-known/login-config": tls: failed to verify certificate: x509: certificate signed by unknown authority
Solução alternativa:
Reinicie o pod obj-proxy com o comando
KUBECONFIGda organização em que está a falhar:export KUBECONFIG=<ORG_KUBECONFIG> kubectl delete pods -n gpc-system -l name=obj-proxy-managerVerifique os registos de obj-proxy:
kubectl get pods -n gpc-system | grep obj-proxyO resultado esperado é o seguinte:
obj-proxy-gdgzp 1/1 Running 0 5d1h obj-proxy-nhnsm 1/1 Running 0 5d1h obj-proxy-wrxlq 1/1 Running 0 5d1hVerifique os registos dos pods disponíveis, por exemplo:
kubectl logs obj-proxy-gdgzp -n gpc-systemAs tarefas de distribuição de imagens devem ser concluídas após a aplicação da solução alternativa.
O nó falha durante a atualização do cluster de utilizadores
Versões: 1.13.3
Sintomas: uma tarefa executada num nó falha durante a atualização do cluster de utilizadores e apresenta uma mensagem de erro como esta:
Reason: mkdir: cannot create directory '/root/.ansible/tmp/ansible-tmp-1727810181.4584012-29-114086005628321': No space left on device
Inicie sessão no nó e verifique se a partição está cheia:
df -h /O resultado pode ter o seguinte aspeto:
Filesystem Size Used Avail Use% Mounted on /dev/mapper/rocky-rl--root 31G 31G 120K 100% /Verifique se
/etc/kubernetes/tmpestá a usar uma grande quantidade de espaço:du -s /etc/kubernetes/tmp. Este problema ocorre quando o Kubernetes faz mais cópias de segurança do que o habitual.
Solução alternativa:
Limpe todas as cópias de segurança em
rm -f /etc/kubernetes/tmp/*:df -h /O resultado pode ter o seguinte aspeto:
Filesystem Size Used Avail Use% Mounted on /dev/m
A atualização do administrador principal está a ser recriada e a falhar nas verificações prévias
Versões: 1.13.3, 1.13.4, 1.13.5, 1.13.6, 1.13.7, 1.13.8, 1.13.9
Sintoma: a atualização da organização principal falha na verificação prévia, por exemplo:
│ Preflight Check: │
│ Conditions: │
│ Last Transition Time: 2024-10-28T14:17:31Z │
│ Message: [the result has status: False, reason: PreflightCheckFailed, and err: check "ASMStable" of operable component "ASM" failed with reason "BackoffLi │
│ mitExceeded", please check logs in pods: [gpc-system/upgrade-managed-check-asmstable-4dw66-cld74, gpc-system/upgrade-managed-check-asmstable-4dw66-k8xk5, gpc-system/upgrade-m │
│ anaged-check-asmstable-4dw66-wtc6q, gpc-system/upgrade-managed-check-asmstable-4dw66-l9b6v, gpc-system/upgrade-managed-check-asmstable-4dw66-nf62h, gpc-system/upgrade-managed │
│ -check-asmstable-4dw66-6m7p2, gpc-system/upgrade-managed-check-asmstable-4dw66-4mqmb], the result has status: Unknown, reason: UpgradeCheckJobsInProgress, and err: upgrade ch │
│ eck jobs in progress for Operable Components: haas,bil] │
│ Observed Generation: 2 │
│ Reason: PreflightCheckFailed │
│ Status: False │
│ Type: Succeeded │
│ Start Time: 2024-10-28T14:46:42Z
O cluster de administrador principal e o kubeapiserver para o administrador principal foram atualizados para a versão do ABM escolhida.
Exemplo:
export KUBECONFIG=<path to root admin kubeconfig>
kubectl describe kubeapiserver root-admin -n root
kubectl get cluster root-admin -n root
Exemplo de saída para kubectl describe kubeapiserver root-admin -n root:
Name: root-admin
Namespace: root
Labels: lcm.private.gdc.goog/cluster-type=root-admin
lcm.private.gdc.goog/cluster-version=1.29.600-gke.108
lcm.private.gdc.goog/component-version=v1.13.0-oclcm-f4c190e0f2
Exemplo de saída para kubectl get cluster root-admin -n root:
NAME ABM VERSION DESIRED ABM VERSION CLUSTER STATE
root-admin 1.29.600-gke.108 1.29.600-gke.108 Running
Solução alternativa
Aplique a opção de ignorar a verificação prévia para continuar a atualização:
export KUBECONFIG=<path to root admin kubeconfig>
kubectl delete organizationupgrade root -n gpc-system && kubectl annotate -n gpc-system organization root upgrade.private.gdc.goog/skip-preflight-check=ok
kubectl delete organizationupgrade root -n gpc-system
Os espaços de nomes platform-obs-obs-system ou platform-obs ficam presos no estado de encerramento
Versões: 1.13.5
Sintomas: os suplementos não são implementados durante a atualização ou o arranque e apresentam uma mensagem de erro semelhante a esta:
export KUBECONFIG=ROOT_ADMIN
kubectl get addon -n org-1 system-alerts system-dashboards
É apresentado o seguinte resultado:
NAME DEPLOYED READY VERSION
system-alerts
system-dashboards false false 1.12.4-gdch.96
Se os estados DEPLOYED ou READY apresentarem false ou estiverem em branco, verifique os suplementos respetivos quanto ao erro, por exemplo:
export KUBECONFIG=ROOT_ADMIN
kubectl describe addon -n org-1 system-alerts
É apresentado o seguinte resultado:
...
... unable to create new content in namespace platform-obs-obs-system because it is being terminated
...
O suplemento está bloqueado devido à sua tentativa de criar conteúdo nos espaços de nomes em eliminação. Este bloqueio persiste, uma vez que a eliminação do espaço de nomes também está bloqueada.
Solução alternativa:
Antes de iniciar uma atualização, anote os projetos para evitar a eliminação:
export KUBECONFIG=ORG_ADMIN kubectl annotate project -n gpc-system platform-obs helm.sh/resource-policy="keep"É apresentado o seguinte resultado:
project.resourcemanager.gdc.goog/platform-obs annotated kubectl annotate project -n gpc-system platform-obs-obs-system helm.sh/resource-policy="keep" project.resourcemanager.gdc.goog/platform-obs-obs-system annotatedSe o ambiente já estiver a apresentar os sintomas descritos anteriormente, siga esta solução alternativa:
A eliminação do espaço de nomes está bloqueada devido a recursos com finalizadores. Para continuar com a eliminação, remova os finalizadores através do script fornecido:
export KUBECONFIG=ORG_ADMIN function rm_finalizer() { export TYPE=$1 export NS=$2 RESOURCES=$(kubectl get $TYPE -n $NS --no-headers -o custom-columns=":metadata.name") for rc in $RESOURCES; do kubectl patch $TYPE $rc -n $NS \ --type json \ --patch '{"metadata":{"finalizers":[]}}' --type=merge done } rm_finalizer "monitoringrule" "platform-obs-obs-system" rm_finalizer "monitoringrule" "platform-obs" rm_finalizer "loggingrule" "platform-obs" ``` Note: Use a bash terminal (default on bootstrappers) to run the script.Aguarde a eliminação do recurso. Depois de executar o script, elimine os recursos e os espaços de nomes de terminação. Pode ter de executar o script novamente se o espaço de nomes continuar no estado de encerramento. Após a rescisão, o espaço de nomes é recriado automaticamente. Verifique se os espaços de nomes foram recriados e estão no estado ATIVO:
export KUBECONFIG=ORG_ADMIN kubectl get namespace platform-obs platform-obs-obs-systemÉ apresentado o seguinte resultado:
NAME STATUS AGE platform-obs Active 45s platform-obs-obs-system Active 49sCom os espaços de nomes ativos, os suplementos que estavam bloqueados devem ser implementados em poucos minutos. Verifique se os respetivos estados DEPLOYED e READY são agora verdadeiros:
export KUBECONFIG=ROOT_ADMIN kubectl get addon -n org-1 system-alerts system-dashboardsÉ apresentado o seguinte resultado:
NAME DEPLOYED READY VERSION system-alerts true true 1.14.0-gdch.143998 system-dashboards true true 1.14.0-gdch.143998
UPORC crash loops in the KIND cluster during bootstrap
Versões: 1.13.x
Sintomas: a implementação uporc-root-backend-controller no espaço de nomes uporc-system entra em ciclos de falhas no cluster KIND.
Solução alternativa:
Verifique se os objetos
ComponentGroupReleaseMetadataeReleaseMetadatacorrespondem:export KUBECONFIG=KIND kubectl get componentgroupreleasemetadata kubectl get releasemetadataSe os objetos corresponderem, não é necessária nenhuma solução alternativa.
Se os objetos não corresponderem, contacte a equipa do UPORC para receber assistência, uma vez que isto pode indicar outros problemas subjacentes.
Falha na atualização do nó
Versões: 1.13.6
Sintomas: a atualização do nó falhou em NodeOSInPlaceUpgradeCompleted.
- Verifique os registos das tarefas da
os-upgradeospolicy. - Se o registo incluir um erro que sugira que o ficheiro de configuração está danificado,
introduza o computador do nó e verifique o conteúdo do ficheiro manualmente para ver se está
danificado. O erro de registo pode mencionar o código de erro
configparser.DuplicateOptionErrore o ficheiro/etc/yum.repos.d/gdch.repo.
Solução alternativa: apenas se tiver confirmado que o ficheiro está danificado, elimine manualmente o ficheiro /etc/yum.repos.d/gdch.repo danificado no nó danificado.
A tarefa ansible para a atualização regenera o ficheiro automaticamente, como parte do playbook ansible.
### NodeUpgradeTask CR está bloqueada na condição NodeOSInPlaceUpgradePostProcessingCompleted
Versões: 1.13.5
Sintomas: durante a atualização para a versão 1.13.5, o NodeUpgradeTask CR fica bloqueado na condição NodeOSInPlaceUpgradePostProcessingCompleted.
Verifique se a tarefa os-artifact-collector correspondente está concluída. Se a tarefa estiver bloqueada durante muitas horas, é apresentada a seguinte mensagem:
root@gpc-adhoc-7e017e71vm-bootstrapper-zone1:~# kag logs os-artifact-collector-bm-45942837-p8hrk-z56gh
I1020 22:06:11.844634 1 main.go:30] BuildDate: 2024-10-19T16:54:08Z
I1020 22:06:11.844695 1 main.go:31] Version: 0.0.0-gdch.1.v3f2043
Solução alternativa:
- Elimine a tarefa ou o pod para forçar a nova tentativa.
O NodeUpgradeTask CR está bloqueado na condição NodeBIOSFirmwareUpgradeCompleted
Versões: 1.13.5
Sintomas: durante a atualização para a versão 1.13.5, o NodeUpgradeTask CR fica bloqueado na condição NodeBIOSFirmwareUpgradeCompleted.
Verifique se a condição NodeBIOSFirmwareUpgradeCompleted correspondente está bloqueada com a seguinte condição apresentada:
{
"lastTransitionTime": "2024-12-03T04:03:37Z",
"message": "",
"observedGeneration": 1,
"reason": "InProgress",
"status": "False",
"type": "NodeBIOSFirmwareUpgradeCompleted"
}
Solução alternativa:
- No
NodeUpgradeCR, edite manualmente"U30 v3.20 (05/29/2024)"para"U30 v3.20 (05/27/2024)".
A atualização do cluster está bloqueada porque um nó não consegue entrar no modo de manutenção
Versões: 1.13.5, 1.13.6, 1.13.7
Sintomas: a atualização do cluster (administrador da organização, sistema ou cluster de utilizadores) está bloqueada devido a um nó que não consegue entrar no modo de manutenção.
O cluster mostra MaintenanceMode definido como true, mas Status está bloqueado em false quando executa o seguinte:
kubectl get baremetalmachines -A -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,MaintenanceMode:.spec.maintenanceMode,Status:.status.underMaintenace
É apresentado o seguinte resultado:
NAMESPACE NAME MaintenanceMode Status
user-vm-1-cluster 10.8.4.22 true false
user-vm-1-cluster 10.8.4.23 false false
user-vm-1-cluster 10.8.4.24 false false
user-vm-1-cluster 172.20.128.13 false false
user-vm-1-cluster 172.20.128.14 false false
user-vm-1-cluster 172.20.128.15 false false
Solução alternativa:
Defina o KUBECONFIG para o ficheiro kubeconfig do cluster que contém o nó que não está a ser drenado. O cluster pode ser o cluster de utilizadores ou um cluster de serviços partilhados.
for VM in $(kubectl get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints --no-headers | grep "baremetal.cluster.gke.io/maintenance" | awk '{print $1}'); do
for i in {1..50}; do
kubectl delete po -n kube-system $(kubectl get po -A -o wide | grep ang | grep -e $VM| awk '{print $2}');
done
done
Excedeu o limite de tempo persistente durante a raiz inicial organizationupgrade
Versões: 1.13.3
Sintomas: se a anotação ignore maintenance window estiver presente durante uma atualização da organização, o organizationupgrade CR é repetidamente corrigido, o que repõe o progresso.
Solução alternativa:
Pause o subcomponente rm-org e reduza as réplicas rm-org-backend-controller.
Se o alias não for declarado, execute o seguinte comando:
alias ka="kubectl --kubeconfig=/root/release/root-admin/root-admin-kubeconfig"Pause o subcomponente e reduza a implementação para
rm-org:kubectl --kubeconfigROOT_ADMIN_KUBECONFIG annotate subcomponent -n root rm-org lcm.private.gdc.goog/paused=true kubectl --kubeconfigROOT_ADMIN_KUBECONFIG scale deploy -n gpc-system rm-org-backend-controller --replicas=0Após a conclusão da atualização do cluster, reduza a implementação:
kubectl --kubeconfigROOT_ADMIN_KUBECONFIG scale deploy -n gpc-system rm-org-backend-controller --replicas=1
O subcomponente obj-syslog-server não consegue fazer a conciliação na organização de raiz
Versões: 1.13.3, 1.13.4, 1.13.5, 1.13.6
Sintomas: durante a atualização para a versão 1.13.x, o subcomponente obj-syslog-server encontra-se no estado ReconciliationError:
root obj-syslog-server ReconciliationError
com uma condição semelhante a:
Sub-Component: obj-syslog-server - Reconciliation error: E0100 - deploy: failed to install chart: release obj-syslog-server-backend failed, and has been uninstalled due to atomic being set: context deadline exceeded
Last Transition Time: 2024-09-17T21:49:25Z
Message: E0100 - deploy: failed to install chart: release obj-syslog-server-backend failed, and has been uninstalled due to atomic being set: context deadline exceeded
Observed Generation: 1
ReconciliationError
Status:True
Type: Reconciling
Last Transition Time: 2024-09-17T21:49:23Z
Message: E0100 - deploy: failed to install chart: release obj-syslog-server-backend failed, and has been uninstalled due to atomic being set: context deadline exceeded
Observed Generation: 1
Reason: DeployError
Status: False
Type: Deployed
Pode ver que o pod, syslog-server-abcdefg-wxyz, está num estado CrashLoopBackOff com o seguinte erro:
containerID: containerd://65d460176a1dcae412af698fa02fa5ffb0c5f0ef9bf0d0e2111ef88845630827
exitCode: 128
finishedAt: "2024-09-18T19:14:45Z"
message: 'failed to create containerd task: failed to create shim task: OCI
runtime create failed: runc create failed: unable to start container process:
error during container init: error mounting "/var/lib/kubelet/pods/637cf395-e597-446d-9949-1371cca88970/volume-subpaths/observability-ca/syslog-server/2"
to rootfs at "/etc/ssl/certs/obs-ca-cert.pem": mount /var/lib/kubelet/pods/637cf395-e597-446d-9949-1371cca88970/volume-subpaths/observability-ca/syslog-server/2:/etc/ssl/certs/obs-ca-cert.pem
(via /proc/self/fd/6), flags: 0x5001: not a directory: unknown'
reason: StartError
startedAt: "1970-01-01T00:00:00Z"
Solução alternativa:
Para repor o subcomponente num estado normal, remova o volumeMounts desnecessário.
Edite a implementação atual:
export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfigkubectl edit deployments syslog-server -n istio-systemRemova os
volumeMountsque não são necessários nospec.containers.volumeMounts. Remova os seguintes caminhos de montagem:- mountPath: /etc/ssl/certs/obs-ca-cert.pem name: observability-ca readOnly: true1. subPath: ca.crt - mountPath: /etc/ssl/certs/obj-ca-cert.pem name: obj-ca readOnly: true subPath: ca.crtAplique as alterações e o subcomponente volta a
ReconciliationCompleteddepois de as alterações serem aplicadas.
A atualização do ABM ou do nó está bloqueada em maintenanceMode false
Versões: 1.13.4
Sintomas: o nó está bloqueado na atualização do cluster AnthosBaremetal e não entra no modo de manutenção.
Verifique a baremetalmachine num nó do cluster de serviço, por exemplo:
kubectl get baremetalmachine -n g-org-1-shared-service-cluster 192.0.2.0 -o json | jq .spec.maintenanceMode
false
Solução alternativa:
Reinicie o anthos-cluster-operator para propagar o BMM.MaintenanceMode:
kubectl get baremetalmachine -n g-org-1-shared-service-cluster 192.0.2.0 -o json | jq .spec.maintenanceMode
true
A atualização falha na atualização do suplemento atat-webhooks para a organização do inquilino
Versões: 1.13.5
Sintomas: a atualização do suplemento atat-webhooks não é recuperada:
org-1 atat-webhooks false false 1.13.4-gdch.5582
Pode ver uma mensagem como esta:
Status: │
│ Conditions: │
│ Last Transition Time: 2024-10-30T17:57:06Z │
│ Message: Error occurred during addon installation: failed to generate parameters for AddOn[atat-webhooks]: failed to generate runtime parameters: parameter job not ready yet │
│ Observed Generation: 4 │
│ Reason: InstallationError │
│ Status: False │
│ Type: Deployed │
│ Last Transition Time: 2024-10-30T17:56:36Z │
│ Message: Reconciliation error
Verifique os pods para atat-webhooks-parameters-*****:
kubectl logs -n org-1 atat-webhooks-parameters-***** --kubeconfig ROOT_ADMIN_KUBECONFIG
Pode ver um erro como este:
E1030 22:04:33.242244 7 main.go:39] failed to generate parameter for AddOn [atat-webhooks], error: ATAT0003: Organization.resourcemanager.private.gdc.goog "org-1" is invalid: metadata.labels[atat.config.google.com/task-order-number]: Invalid value: "TO1234": The current date 2024-10-30 is not within the valid range of this TaskOrder: 2024-06-30 - 2024-10-30.
Solução alternativa:
Crie uma cópia da carteira atual:
export KUBECONFIG=ROOT_ADMIN_KUBECONFIGkubectl get portfolios -n atat-system portfolio-org-1 -oyaml > portfolio-org-1Atualize
portfolio-org-1 Pop End Datepara uma data no futuro:kubectl delete portfolios -n atat-system portfolio-org-1Se este comando deixar de responder, elimine a condição
.Metadata.Finalizersdo portefólio ativo antes de eliminar o portefólio. A condição pode ter o seguinte aspeto:│ portfolio.finalizers.atat.config.google.comVolte a aplicar o ficheiro YAML copiado:
kubectl apply -f portfolio-org-1Verifique novamente as datas para garantir que os portefólios e o configmap estão atualizados.
Se a tarefa não for recuperada, elimine a tarefa
atat-webhooks-parameterscom falhas para que seja recuperada. Aguarde a conclusão:kubectl delete jobs -n org-1 atat-webhooks-parameters
A verificação pós-implementação ou de atualização falha devido a erros DeadlineExceeded ou BackoffLimitExceeded.
Versões: 1.13.8
Sintomas:
Durante a atualização da versão 1.13.7 para a 1.13.8, as verificações pós-voo continuam no estado pendente e mostram erros DeadlineExceeded ou BackoffLimitExceeded.
Message:postflight check result: pending, [NodeHealth (OS) HarborClusterHealth (AR)] still running
Observed Generation: 3
Reason: ReconcileBackoff
Status: Unknown
Type: ManagedCheckSucceeded
Last Transition Time: 2025-02-13T02:11:41Z
Message: observed the following failure reasons: [ReconcileBackoff UpgradeCheckJobsInProgress]
Solução alternativa:
Identifique onde as tarefas estão a falhar:
Verifique se as tarefas estão a falhar durante as verificações pré-voo ou pós-voo:
kubectl get jobs -A -l "upgrade.private.gdc.goog/use" -o json | jq '.items[] | select(.status.conditions | any(.reason == "BackoffLimitExceeded" or .reason == "DeadlineExceeded")) | {name: .metadata.name, namespace: .metadata.namespace, status: .status.conditions[].type, reason: .status.conditions[].reason}'Verifique se as tarefas estão a falhar durante a atualização:
kubectl get jobs -A -l "upgrade.private.gdc.goog/upgrade-check-owner" -o json | jq '.items[] | select(.status.conditions | any(.reason == "BackoffLimitExceeded" or .reason == "DeadlineExceeded")) | {name: .metadata.name, namespace: .metadata.namespace, status: .status.conditions[].type, reason: .status.conditions[].reason}'Elimine as tarefas:
kubectl delete jobs -n gpc-system CHECK_NAME
As verificações de atualização incluem resultados irrelevantes para o nível de verificação
Versões: 1.13.x
Sintomas:
As verificações de atualização da organização podem falhar devido a resultados incluídos incorretamente de outros níveis. Por exemplo, as verificações da organização raiz podem mostrar resultados da organização inquilina ou as verificações da organização inquilina podem apresentar resultados do cluster de utilizadores.
Exemplos de registos de falhas para verificações da organização raiz:
kubectl logs -n gpc-system upgrade-check-postflight-haas-n2rk2-zv9rr --kubeconfig /root/release/root-admin/root-admin-kubeconfig
... {org-1 admin } failure ...
Solução alternativa:
Ignore totalmente as verificações prévias ou posteriores com:
Verificação prévia:
kubectl delete organizationupgrade -n gpc-system ORG_NAME && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-preflight-check=ok
Pós-voo:
kubectl delete organizationupgrade -n gpc-system ORG_NAME && kubectl annotate -n gpc-system organization ORG_NAME upgrade.private.gdc.goog/skip-postflight-check=ok
Vertex AI
As APIs pré-preparadas mostram um estado Enabling na interface do utilizador
Versões: 1.13.1
Sintomas: o MonitoringTarget mostra um estado Not Ready quando os clusters de utilizadores estão a ser criados, o que faz com que as APIs pré-preparadas mostrem continuamente um estado Enabling na interface do utilizador.
Solução alternativa:
- Abra o menu no navegador Chrome (ícone de três pontos).
- Clique em Mais ferramentas > Ferramentas para programadores para abrir a consola.
- Clique no separador Rede na consola.
- Encontre os
ai-service-statuspedidos. - Clique no separador Resposta num pedido
ai-service-statuspara mostrar o conteúdo desse pedido. - Verifique se tudo parece pronto, exceto os componentes
MonitoringTargeteLoggingTarget.
A função de API pré-preparada streaming_recognize de Speech-to-Text falha
Versões: 1.13.3
Sintomas: quando chama a função de API pré-preparada streaming_recognize de Speech-to-Text, um problema com a biblioteca de cliente provoca uma mensagem de erro 400 semelhante à seguinte:
google.api_core.exceptions.InvalidArgument: 400 The header 'x-goog-user-project' should be set
Solução alternativa: use o seguinte script Python para permitir que a função streaming_recognize funcione:
import base64
from google.cloud import speech_v1p1beta1
from google.cloud.speech_v1p1beta1.services.speech import client
import google.auth
from google.auth.transport import requests
import requests as reqs
from google.api_core.client_options import ClientOptions
import os
audience= "https://ENDPOINT:443"
api_endpoint="ENDPOINT:443"
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "APPLICATION_DEFAULT_CREDENTIALS_FILENAME"
os.environ["GRPC_DEFAULT_SSL_ROOTS_FILE_PATH"] = "CERT_NAME"
def get_client(creds):
opts = ClientOptions(api_endpoint=api_endpoint)
return client.SpeechClient(credentials=creds, client_options=opts)
def main():
creds = None
try:
creds, project_id = google.auth.default()
creds = creds.with_gdch_audience(audience)
sesh = reqs.Session()
sesh.verify = False
req = requests.Request(session=sesh)
creds.refresh(req)
except Exception as e:
print("Caught exception" + str(e))
raise e
return creds
def speech_func(creds):
tc = get_client(creds)
content="[ENCODED CONTENT STRING HERE]"
audio = speech_v1p1beta1.RecognitionAudio()
audio.content = base64.standard_b64decode(content)
config = speech_v1p1beta1.StreamingRecognitionConfig()
config.config.encoding= speech_v1p1beta1.RecognitionConfig.AudioEncoding.LINEAR16
config.config.sample_rate_hertz=16000
config.config.language_code="en-US"
config.config.audio_channel_count=1
request_config = speech_v1p1beta1.StreamingRecognizeRequest(
streaming_config = config,
)
request_audio = speech_v1p1beta1.StreamingRecognizeRequest(
audio_content = audio.content
)
requests = [request_config, request_audio]
def request_generator():
for request in requests:
yield request
metadata = (("x-goog-user-project", "projects/vtx-pretrained"),)
resp = tc.streaming_recognize(requests=request_generator(), metadata=metadata)
for response in resp:
print(response)
if __name__=="__main__":
creds = main()
speech_func(creds)
Substitua o seguinte:
ENDPOINT: o ponto final da conversão de voz em texto. Para mais informações, veja os estados e os pontos finais dos serviços.APPLICATION_DEFAULT_CREDENTIALS_FILENAME: o nome do ficheiro JSON que contém as chaves da conta de serviço que criou no projeto, comomy-service-key.json.CERT_NAME: o nome do ficheiro de certificado da autoridade de certificação (AC), comoorg-1-trust-bundle-ca.cert. Para mais informações, consulte o artigo Gere o ficheiro do certificado da AC do conjunto de confiança num ambiente de desenvolvimento.
O script Python introduz as seguintes diferenças entre as funções streaming_recognize e recognize para permitir que a solução alternativa para streaming_recognize funcione:
- Linha 4: uma declaração
importadicional em comparação com o scriptrecognize(from google.cloud.speech_v1p1beta1.services.speech import client). - Linha 18: o cliente é devolvido por
client.SpeechClient()em vez despeech_v1p1beta1.SpeechClient().
O pod e o serviço de frontend de tradução não são inicializados
Versões: 1.11.x, 1.12.x, 1.13.x
Sintomas: durante as atualizações, o cluster da base de dados de tradução é recriado, o que faz com que o segredo do cluster do sistema ODS secret-store fique desatualizado e dessincronizado. Por este motivo, o pod e o serviço de frontend de tradução falham a inicialização.
Solução alternativa:
Elimine o segredo no cluster do sistema:
kubectl --kubeconfig SYSTEM_CLUSTER_KUBECONFIG delete secret postgres-secret-store -n ai-translation-system
Substitua SYSTEM_CLUSTER_KUBECONFIG pelo caminho para o ficheiro kubeconfig no cluster do sistema.
Um controlador recria o Secret automaticamente e sincroniza-o novamente com o cluster de BD.
A sondagem do estado da tarefa não é suportada para a API batchTranslateDocument
Versões: 1.13.3
Sintomas: a Vertex AI não suporta operações GET e LIST nas APIs do serviço de tradução. Chamar a API BatchTranslateDocument Translation devolve uma operação de execução prolongada semelhante ao seguinte exemplo:
{
"name": "projects/PROJECT_ID/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.translation.v3.BatchTranslateDocumentMetadata",
"state": "RUNNING"
}
}
Este problema deve-se a uma limitação da APIP (autorização) que impede a chamada direta do ponto final. Os pontos finais não suportam a sondagem do estado da tarefa e não pode realizar operações GET na operação de longa duração devido à limitação da APIP.
Solução alternativa: como operador de aplicações (AO), reveja o estado da tarefa verificando regularmente a pasta s3_destination e procure um ficheiro de saída da tarefa recém-criado. Se a pasta contiver o ficheiro de saída, a tarefa foi concluída com êxito.
batchTranslateDocument pedidos podem causar problemas de desempenho
Versões: 1.13.3
Sintomas: o serviço de tradução de documentos em lote lê um ou vários ficheiros de entrada do utilizador e escreve os ficheiros de saída traduzidos e de processamento temporário no StorageGRID. É criado um novo cliente curl para cada ação de leitura/escrita porque a reutilização do cliente falha.
Os clientes curl do S3 no ficheiro binário são de utilização única, o que significa que cada cliente só pode realizar uma única ação de leitura/escrita em contentores do StorageGRID. Por conseguinte, é criado um novo cliente curl sempre que a comunicação com o cliente do StorageGRID é estabelecida a partir do servidor batchTranslateDocument para ler e escrever ficheiros em contentores.
No entanto, esta opção não é ideal para clientes do curl. Pode levar aos seguintes problemas:
- Degradação do desempenho: aumento da latência e diminuição da taxa de transferência
- Esgotamento de recursos: sobrecarga de memória e CPU e esgotamento de tomadas
- Sobrecarga do servidor: limitação de velocidade ou limitação
A consola GDC mostra um estado inconsistente após a ativação das APIs pré-preparadas
Versões: 1.13.3
Sintomas: quando ativa as APIs pré-preparadas pela primeira vez, a consola GDC pode apresentar um estado inconsistente após alguns minutos para o serviço ativado. A consola GDC muda o estado Enabling novamente para Disabled e mostra o botão Ativar novamente na interface do utilizador, mesmo que o serviço esteja, de facto, a ser ativado.
Solução alternativa: o estado torna-se consistente após alguns minutos e o serviço reflete o estado correto.
Para verificar o estado do serviço, abra o separador Rede na consola do navegador e verifique o estado do pedido ai-service-status. A carga útil tem de mostrar que o operador de nível 2 está ativado.
Os pedidos de tradução com mais de 250 carateres falham nos translation-prediction-server pods
Versões: 1.13.3
Sintomas: quando envia pedidos de tradução com aproximadamente 250 carateres ou mais (incluindo pedidos de tradução de documentos), os pods translation-prediction-0 ou translation-prediction-1 podem falhar, o que requer o recarregamento do modelo. O recarregamento do modelo ocorre automaticamente e este processo pode demorar cerca de 30 minutos a ser resolvido.
Este problema deve-se a uma limitação dos contentores de tradução.
Solução alternativa: divida os pedidos de tradução para que tenham menos de 250 carateres. Um intervalo entre 200 e 250 carateres é seguro para todos os idiomas. Não é necessária qualquer outra ação para mitigar o problema se um pedido longo falhar nos pods.
O GPUAllocation para o cluster de serviços partilhados não está configurado corretamente
Versões: 1.13.3
Sintomas: não é possível agendar cargas de trabalho do Vertex AI devido à falta de recursos de GPU suficientes. Por exemplo, se não conseguir ver nem ativar os pontos finais de serviço da Vertex AI, pode dever-se à falta de recursos de GPU suficientes.
Este problema de recursos pode ser causado por alguns dos recursos GPUAllocation localizados no cluster de serviços partilhados que não têm a seguinte anotação:
processed: "true"
Solução alternativa:
Siga o procedimento IAM-R0004 para gerar o ficheiro kubeconfig para o
g-ORG_NAME-shared-service-cluster.Liste todas as atribuições de GPU no cluster de serviços que não tenham a anotação
processed: "true":kubectl get gpuallocations -A -n vm-system \ --kubeconfig SERVICE_CLUSTER_KUBECONFIG \ -o json | jq \ '.items[] | select(.metadata.annotations.processed == null ) | .metadata.name'O resultado é semelhante ao seguinte:
zi-ad-bm08Para o recurso
GPUAllocationque não está atribuído, abra-o num editor:kubectl edit gpuallocation -n vm-system NODE_NAMEEdite a atribuição de GPU com base no número total de atribuições de GPU presentes no cluster de serviços:
Se existir apenas um recurso personalizado de atribuição de GPU, adicione-lhe a anotação
processed: "true"e modifique a respetiva especificação para ser semelhante à seguinte:annotations: processed: "true" spec: mig: allowNodeReboot: true count: 4 profiles: - mixed-5 - uniform-3g.40gb - uniform-3g.40gb - uniform-7g.80gb node: $node_name // unchanged pod: 0 vm: 0Se existirem dois recursos personalizados de atribuição de GPU, encontre o que não tem a anotação
processed: "true", adicione-lhe a anotaçãoprocessed: "true"e modifique a respetiva especificação para ficar semelhante à seguinte:annotations: processed: "true" spec: mig: allowNodeReboot: true count: 2 profiles: - mixed-5 - uniform-3g.40gb node: $node_name // unchanged pod: 0 vm: 0Se existirem quatro recursos personalizados de atribuição de GPU, procure o que não tem a anotação
processed: "true", adicione-lhe a anotaçãoprocessed: "true"e modifique a respetiva especificação para ser semelhante à seguinte:annotations: processed: "true" spec: mig: allowNodeReboot: true count: 1 profiles: - mixed-5 node: $node_name // unchanged pod: 0 vm: 0
Guarde as alterações ao recurso personalizado
GPUAllocatione confirme se o respetivo estado de atribuição foi atualizado paratrue:kubectl get gpuallocations -A --kubeconfig SERVICE_CLUSTER_KUBECONFIGO resultado é semelhante ao seguinte:
NAMESPACE NAME ALLOCATED DEVICEMODEL vm-system zi-ad-bm08 true H100L 94GB vm-system zi-ad-bm09 true H100L 94GB
Quando atualiza da versão 1.9.x para a 1.13.3, o controlador OCLCM apresenta erros
Versões: 1.13.3
Sintomas: quando atualiza da versão 1.9.x para a 1.13.3, o controlador da gestão do ciclo de vida de componentes operacionais (OCLCM) para subcomponentes da Vertex AI pode apresentar erros. Este problema é causado por um erro na tarefa do suplemento ai_platform. Os erros que recebe durante a atualização indicam que o OCLCM não consegue transferir a propriedade destes componentes do Vertex AI.
Seguem-se os componentes do Vertex AI afetados no cluster de administrador da organização:
| Nome | Espaço de nomes |
|---|---|
aip-l1operator-deployment |
ai-system |
aip-l2operator-deployment |
ai-system |
aip-web-plugin-frontend |
ai-system |
aip-web-plugin-backend |
ai-system |
aip-l1operator-sa |
ai-system |
aip-l2operator-sa |
ai-system |
aip-web-plugin-sa |
ai-system |
aip-l1operator-role |
N/A |
aip-l2operator-role |
N/A |
aip-web-plugin-role |
N/A |
aip-l1operator-rolebinding |
N/A |
aip-l2operator-rolebinding |
N/A |
aip-web-plugin-rolebinding |
N/A |
aip-l1operator-log |
ai-system |
aip-l2operator-log |
ai-system |
aip-web-plugin-frontend-log |
ai-system |
aip-web-plugin-backend-log |
ai-system |
log-rule-aipl-a004 |
platform-obs |
mon-rule-aipl-a0001 |
platform-obs |
mon-rule-aipl-a0003 |
platform-obs |
aip-l1operator-mon |
ai-system |
aip-l1operator-mon-cm |
ai-system |
aip-l2operator-mon |
ai-system |
aip-l2operator-mon-cm |
ai-system |
aip-l1operator-webhook-svc |
ai-system |
aip-web-plugin-frontend-svc |
ai-system |
aip-web-plugin-backend-svc |
ai-system |
aip-web-plugin-frontend-virtualsvc |
ai-system |
aip-web-plugin-backend-virtualsvc |
ai-system |
aip-l1operator-selfsigned-issuer |
ai-system |
aip-l1operator-serving-cert |
ai-system |
aip-l1operator-validating-webhook |
ai-system |
aip-l1operator-mutating-webhook |
ai-system |
Solução alternativa: para resolver este problema, tem de remover manualmente os componentes afetados da Vertex AI do cluster de administrador da organização. Em seguida, a nova versão do Vertex AI baseada no OCLCM reinstala-os.
Remova manualmente os componentes afetados do Vertex AI no cluster de administrador da organização:
kubectl --kubeconfig=ORG_ADMIN_CLUSTER_KUBECONFIG delete deployment -n NAMESPACE COMPONENT_NAME
Substitua o seguinte:
ORG_ADMIN_CLUSTER_KUBECONFIG: o caminho para o ficheiro kubeconfig no cluster de administrador da organização.NAMESPACE: o espaço de nomes do componente do Vertex AI que quer remover. Se o componente não tiver um espaço de nomes, remova-n NAMESPACEdo comando.COMPONENT_NAME: o nome do componente do Vertex AI que quer remover.
O exemplo seguinte mostra como remover o componente aip-l1operator-deployment que existe no espaço de nomes ai-system no cluster de administrador da organização:
kubectl --kubeconfig=ORG-ADMIN-CLUSTER-KUBECONFIG delete deployment -n ai-system aip-l1operator-deployment
Os pedidos de tradução podem gerar o código de erro RESOURCE_EXHAUSTED
Versões: 1.13.3
Sintomas: depois de enviar um pedido de tradução, recebe o código de erro RESOURCE_EXHAUSTED na mensagem de resposta. Este erro ocorre quando excede um limite de frequência do sistema. Um recurso foi esgotado, como uma quota por utilizador, o número máximo de consultas por segundo ou o sistema de ficheiros completo está sem espaço.
Solução alternativa: peça ao seu operador de infraestrutura (IO) para reiniciar os fragmentos de back-end do serviço de tradução. Em seguida, envie novamente pedidos de tradução com intervalos de tempo mais longos entre pedidos ou enviando pedidos mais curtos.
As solicitações batchTranslateDocument devolvem o erro 503
Versões: 1.13.3
Sintomas: depois de enviar um pedido batchTranslateDocument, recebe o código de erro 503 "Batch Document translation is not implemented" na mensagem de resposta. Este erro ocorre porque o método BatchTranslateDocument requer o serviço Aspose, que só é implementado quando o parâmetro enableRAG operável está definido como true no cluster.
Solução alternativa: peça ao operador de infraestrutura (IO) para definir o parâmetro enableRAG operable como true no cluster de administrador da organização seguindo estes passos:
Crie um
SubcomponentOverriderecurso personalizado num ficheiro YAML denominadovai-translation.yamlcom o parâmetroenableRAGoperable definido comotrue:apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: "vai-translation" namespace: ORG_ADMIN_NAMESPACE spec: subComponentRef: "vai-translation" backend: operableParameters: enableRAG: trueSubstitua
ORG_ADMIN_NAMESPACEpelo espaço de nomes do cluster de administrador da organização.Aplique o recurso personalizado
SubcomponentOverrideao cluster de administrador da organização:kubectl --kubeconfig ORG_ADMIN_KUBECONFIG apply -f vai-translation.yamlSubstitua
ORG_ADMIN_KUBECONFIGpelo caminho para o ficheiro kubeconfig no cluster de administrador da organização.
Serviços pré-treinados do Vertex AI indisponíveis
Versões: 1.13.7, 1.13.9
Sintomas: os serviços Vertex AI OCR e Translation não são iniciados devido a problemas de agendamento do Kubernetes. Pode ver um aviso como este nos registos:
Warning FailedScheduling 105s (x40 over 3h18m) default-scheduler 0/9 nodes are available: 1 Insufficient nvidia.com/mig-3g.40gb-NVIDIA_A100_80GB_PCIE, 1 node(s) had untolerated taint {serviceenvironment.private.gdc.goog/dbs-billing-
system-billing-dbcluster: }, 1 node(s) had untolerated taint {serviceenvironment.private.gdc.goog/dbs-g-vai-ocr-sie-g-vai-ocr-sie: }, 1 node(s) had untolerated taint {serviceenvironment.private.gdc.goog/dbs-g-vai-translation-sie-g-v-1gvg:
}, 3 Insufficient cpu, 3 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }. preemption: 0/9 nodes are available: 3 No preemption victims found for incoming pod, 6 Preemption is not helpful for scheduling.
Solução alternativa: adicione mais nós de trabalho ao conjunto predefinido e despeje os pods nos nós de GPU para que as cargas de trabalho de IA possam ser agendadas.
Máquinas virtuais
A importação de imagens BYO falha para imagens qcow2 e raw
Versões: 1.13.1, 1.13.3
Sintomas: quando as imagens de VMs locais são importadas através da CLI gdcloud compute images import, o estado de importação fica bloqueado em WaitingForTranslationVM ou ImportJobNotCreated. Isto deve-se ao facto de o disco temporário criado para traduzir ou importar usar o tamanho exato da imagem qcow2/raw, mas o LUKS adiciona uma sobrecarga de alguns MiBs que faz com que o aprovisionamento do disco falhe.
Solução alternativa:
Crie manualmente um novo VirtualMachineImageImport com o mesmo nome de imagem, mas com um spec.minimumDiskSize maior
Por exemplo, se este foi o comando usado para importar a imagem:
gdcloud compute images import $IMPORT_NAME --project $PROJECT --source-file=$LOCAL_FILENAME --os=$OS
Se o grupo de recursos original VirtualMachineImageImport criado automaticamente pela CLI tiverminimumDiskSize como X Gi, crie um novo com X+1 Gi. O valor baseia-se no tamanho da imagem que está a ser importada. No caso do qcow2, seria o tamanho virtual. Por exemplo, 20 Gi deve ser substituído por 21 Gi.
Substitua os valores dos marcadores de posição com base na forma como a CLI foi chamada.
Encontre o
VirtualMachineImageImport:kubectl get virtualmachineimageimport $IMPORT_NAME -n $PROJECT -o yamlSe o objeto não estiver presente, acione novamente o comando
gdcloud compute images import .... Quando o resultado da consola transitar deUploading image to ..paraImage import has started for ..., prima ctrl+c para que a imagem local seja carregada para o armazenamento de objetos e oVirtualMachineImageImportseja preservado para referência na criação de um novo.Crie um novo
VirtualMachineImageImportcom umminimumDiskSizemaior:apiVersion: virtualmachine.gdc.goog/v1 kind: VirtualMachineImageImport metadata: name: $IMPORT_NAME_NEW namespace: $NAMESPACE spec: imageMetadata: minimumDiskSize: $NEW_SIZE name: $IMAGE_NAME operatingSystem: $OS source: objectStorage: bucketRef: name: vm-images-bucket objectName: $LOCAL_FILENAME
O aprovisionamento de um disco a partir de uma imagem falha
Versões: 1.13.1, 1.13.3
Sintomas: quando aprovisiona um disco a partir de uma imagem personalizada, o minimumDiskSize
pode estar demasiado próximo do tamanho virtual, o que faz com que o aprovisionamento do disco falhe.
O disco da VM está num estado pendente, mas nunca é aprovisionado.
Solução alternativa: crie manualmente um novo disco com um spec.minimumDiskSize maior.
O plug-in de dispositivos NVIDIA DaemonSet falha quando um cluster tem GPUs
Versões: 1.13.3
Sintomas: o plug-in do dispositivo NVIDIA DaemonSet falha com a mensagem driver rpc error em nós do cluster com GPUs:
kubectl --kubeconfig KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-system
Substitua KUBECONFIG pelo caminho para o ficheiro kubeconfig no cluster.
Obtém um resultado semelhante ao seguinte exemplo:
Warning Failed 23m (x4 over 25m) kubelet Error: failed to create containerd task: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy'
nvidia-container-cli: initialization error: driver rpc error: timed out: unknown
Este problema faz com que as GPUs fiquem indisponíveis para máquinas virtuais (VM) e pods. As implicações baseiam-se nos seguintes tipos de clusters:
- Cluster do sistema: o recurso personalizado
GPUAllocationnão é criado para esse nó bare metal e as GPUs nesse nó não são configuradas no modo de VM para consumo pelo serviço e pelo cluster de utilizadores. Consulte a solução alternativa para o cluster do sistema para resolver este problema. - Serviço ou cluster de utilizadores: o recurso personalizado
GPUAllocationnão é criado para esse nó de VM e os GPUs nesse nó não são consumíveis por pods no cluster. Consulte a solução alternativa para o serviço ou o cluster de utilizadores para resolver este problema.
Solução alternativa para o cluster do sistema:
Siga estes passos para resolver o problema no cluster do sistema:
Defina a variável de ambiente
KUBECONFIGcom o caminho para o ficheiro kubeconfig no cluster do sistema. Para obter detalhes, consulte o manual de procedimentos IAM-R0004.Identifique o nó que está a ter o problema:
kubectl --kubeconfig $KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-system | grep -i Node:O resultado tem de imprimir o nome do nó e o endereço IP do nó do Kubernetes.
Se existirem vários nós, execute os passos em todos eles. Neste caso, o resultado tem o seguinte aspeto:
Node: yy-ab-bm04/172.20.128.26Defina a variável de ambiente
NODE_NAMEcom o nome do nó, por exemplo:export NODE_NAME=yy-ab-bm04Estabeleça uma ligação SSH com o nó. Para obter detalhes, consulte o manual de procedimentos PLATAUTH-G0001.
Verifique se o nó tem GPUs:
nvidia-smi -LO resultado tem de imprimir as GPUs no nó, como no exemplo seguinte:
GPU 0: NVIDIA H100 NVL (UUID: GPU-0f6179a7-71a8-c654-44f0-1542bddf2574) GPU 1: NVIDIA H100 NVL (UUID: GPU-4debf794-d8a5-74a2-e521-0c763288ea79) GPU 2: NVIDIA H100 NVL (UUID: GPU-5827b65a-3841-d877-fc17-881a2b71d416) GPU 3: NVIDIA H100 NVL (UUID: GPU-31448904-9ae2-c95a-1986-a56cce004f49)Ative o modo de persistência nas GPUs:
nvidia-smi -pm 1Esta ação garante que os controladores da NVIDIA são sempre carregados para que o plug-in do dispositivo não expire.
O resultado tem de ser semelhante ao seguinte exemplo:
Enabled persistence mode for GPU 00000000:4E:00.0. Enabled persistence mode for GPU 00000000:62:00.0. Enabled persistence mode for GPU 00000000:C9:00.0. Enabled persistence mode for GPU 00000000:DE:00.0. All done.Saia da sessão SSH:
exitVerifique se o plug-in do dispositivo está em execução consultando o
DaemonSet:kubectl --kubeconfig $KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-systemVerifique se o recurso personalizado
GPUAllocationfoi criado e configurado no modo de VM:kubectl --kubeconfig $KUEBCONFIG get gpuallocation -n vm-system $NODE_NAME -o yamlO resultado tem de ser semelhante ao seguinte exemplo:
apiVersion: gpu.cluster.gke.io/v1 kind: GPUAllocation metadata: annotations: processed: "true" creationTimestamp: "2024-08-21T07:03:18Z" generation: 2 name: yy-ab-bm04 namespace: vm-system resourceVersion: "12179728" uid: b840cb53-5b0b-45bf-ab26-66db98fd64a4 spec: node: yy-ab-bm04 pod: 0 vm: 4 status: allocated: true conditions: - lastTransitionTime: "2024-08-21T07:05:49Z" message: "" observedGeneration: 2 reason: AllocationFulfilled status: "True" type: AllocationStatus - lastTransitionTime: "2024-08-21T07:03:53Z" message: "" observedGeneration: 2 reason: DeviceStateUpdated status: "True" type: DeviceStateUpdated consumption: pod: 0/0 vm: 4/4 deviceModel: H100L 94GB
Solução alternativa para o serviço ou o cluster de utilizadores:
Siga estes passos para resolver o problema no serviço ou no cluster:
Defina a variável de ambiente
KUBECONFIGcom o caminho para o ficheiro kubeconfig no serviço ou no cluster de utilizadores. Para obter detalhes, consulte o manual de procedimentos IAM-R0004.Identifique o nó que está a ter o problema:
kubectl --kubeconfig $KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-system | grep -i Node:O resultado tem de imprimir o nome do nó e o endereço IP do nó do Kubernetes.
Se existirem vários nós, execute os passos em todos eles. Neste caso, o resultado tem o seguinte aspeto:
Node: vm-948fa7f4/172.20.128.21Defina a variável de ambiente
NODE_NAMEcom o nome do nó, por exemplo:export NODE_NAME=vm-948fa7f4Estabeleça uma ligação SSH com o nó. Para obter detalhes, consulte o manual de procedimentos PLATAUTH-G0001.
Verifique se o nó tem GPUs:
nvidia-smi -LO resultado tem de imprimir as GPUs no nó, como no exemplo seguinte:
GPU 0: NVIDIA H100 NVL (UUID: GPU-0f6179a7-71a8-c654-44f0-1542bddf2574) GPU 1: NVIDIA H100 NVL (UUID: GPU-4debf794-d8a5-74a2-e521-0c763288ea79)Ative o modo de persistência nas GPUs:
nvidia-smi -pm 1Esta ação garante que os controladores da NVIDIA são sempre carregados para que o plug-in do dispositivo não expire.
O resultado tem de ser semelhante ao seguinte exemplo:
Enabled persistence mode for GPU 00000000:05:00.0. Enabled persistence mode for GPU 00000000:06:00.0. All done.Saia da sessão SSH:
exitVerifique se o plug-in do dispositivo está em execução consultando o
DaemonSet:kubectl --kubeconfig $KUBECONFIG describe pods -lgpu-device-plugin=nvidia -n vm-systemVerifique se o recurso personalizado
GPUAllocationfoi criado e configurado no modo de VM:kubectl --kubeconfig $KUBECONFIG get gpuallocation -n vm-system $NODE_NAME -o yamlO resultado tem de ser semelhante ao seguinte exemplo:
apiVersion: gpu.cluster.gke.io/v1 kind: GPUAllocation metadata: annotations: processed: "true" creationTimestamp: "2024-08-21T07:03:18Z" generation: 2 name: vm-948fa7f4 namespace: vm-system resourceVersion: "12179728" uid: b840cb53-5b0b-45bf-ab26-66db98fd64a4 spec: node: vm-948fa7f4 pod: 2 vm: 0 status: allocated: true conditions: - lastTransitionTime: "2024-08-21T07:05:49Z" message: "" observedGeneration: 2 reason: AllocationFulfilled status: "True" type: AllocationStatus - lastTransitionTime: "2024-08-21T07:03:53Z" message: "" observedGeneration: 2 reason: DeviceStateUpdated status: "True" type: DeviceStateUpdated consumption: pod: 0/2 vm: 0/0 deviceModel: H100L 94GB
A VM do cluster do sistema não está pronta
Versões: 1.13.3
Sintomas: a VM do cluster do sistema não está pronta. Pode ver uma mensagem como esta:
│ Conditions: │
│ Type Status LastHeartbeatTime LastTransitionTime Reason │
│ Message │
│ ---- ------ ----------------- ------------------ ------ │
│ ------- │
│ KubeletUnhealthy False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:37 +0000 KubeletIsHealthy │
│ kubelet on the node is functioning properly │
│ KernelDeadlock False Tue, 20 Aug 2024 02:10:42 +0000 Sun, 30 Jun 2024 16:53:33 +0000 KernelHasNoDeadlock │
│ kernel has no deadlock │
│ ReadonlyFilesystem False Tue, 20 Aug 2024 02:10:42 +0000 Sun, 30 Jun 2024 16:53:33 +0000 FilesystemIsNotReadOnly │
│ Filesystem is not read-only │
│ FrequentUnregisterNetDevice False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:40 +0000 NoFrequentUnregisterNetDevice │
│ node is functioning properly │
│ ContainerRuntimeUnhealthy False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:39 +0000 ContainerRuntimeIsHealthy │
│ Container runtime on the node is functioning properly │
│ FrequentKubeletRestart False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:41 +0000 NoFrequentKubeletRestart │
│ kubelet is functioning properly │
│ FrequentDockerRestart False Tue, 20 Aug 2024 02:10:42 +0000 Tue, 20 Aug 2024 02:10:40 +0000 NoFrequentDockerRestart │
│ docker is functioning properly │
│ FrequentContainerdRestart False Tue, 20 Aug 2024 02:10:42 +0000 Thu, 15 Aug 2024 01:44:23 +0000 NoFrequentContainerdRestart │
│ containerd is functioning properly │
│ MemoryPressure Unknown Tue, 20 Aug 2024 01:25:55 +0000 Tue, 20 Aug 2024 01:27:22 +0000 NodeStatusUnknown │
│ Kubelet stopped posting node status. │
│ DiskPressure Unknown Tue, 20 Aug 2024 01:25:55 +0000 Tue, 20 Aug 2024 01:27:22 +0000 NodeStatusUnknown │
│ Kubelet stopped posting node status. │
│ PIDPressure Unknown Tue, 20 Aug 2024 01:25:55 +0000 Tue, 20 Aug 2024 01:27:22 +0000 NodeStatusUnknown │
│ Kubelet stopped posting node status. │
│ Ready Unknown Tue, 20 Aug 2024 01:25:55 +0000 Tue, 20 Aug 2024 01:27:22 +0000 NodeStatusUnknown │
│ Kubelet stopped posting node status.
Solução alternativa:
- Encontre o ficheiro
VirtualMachineInstancee elimine-o. - Reiniciar uma nova VM.
Não foi encontrado o espaço temporário dos relatórios de volume de dados
Versões: 1.13.3, 1.13.4
Sintomas: quando cria um disco de VM, o volume de dados é apresentado como bem-sucedido:
gdch-vm-infra gdc-vm-disk-vm-ce34b8ea-disk Succeeded 100.0% 1 18h
No entanto, um pod de importação, como importer-gdc-vm-disk-vm-ce34b8ea-disk crash
loops, com uma mensagem como esta:
E0823 16:14:15.920008 1 data-processor.go:251] scratch space required and none found
E0823 16:14:15.920017 1 importer.go:185] scratch space required and none found
Solução alternativa: elimine o pod do importador depois de confirmar que o estado do volume de dados é Succeeded.
As VMs em projetos com nomes que excedem 45 carateres permanecem num estado parado
Versões: 1.13.5
Sintomas: quando cria uma VM, esta permanece no estado Stopped se o nome do projeto tiver mais de 45 carateres.
Solução alternativa: crie um projeto com um nome que não tenha mais de 45 carateres.
Atribuição de GPU em falta no cluster de serviço
Versões: 1.13.5
Sintomas: o GPUAllocation está em falta no cluster de serviços partilhados de
gpu-org. Pode ver uma mensagem quando recebe as atribuições de GPU:
KUBECONFIG=/root/release/user/gpu-org-shared-service-kubeconfig kubectl get gpuallocations -A
O resultado tem o seguinte aspeto:
No resources found
Solução alternativa:
Adicione uma restrição ao nó da GPU:
taints: - effect: NoExecute key: vmm.gdc.goog/gpu-node value: a3-highgpu-4gRemova a restrição para permitir o agendamento do pod virt-launcher da VM.
Não é possível agendar a VM de trabalho do cluster de serviço partilhado
Versões: 1.13.6
Sintomas: uma VM de trabalho do Kubernetes não conseguiu agendar devido a recursos de CPU insuficientes no nó designado, apesar das GPUs disponíveis. Pode ver um evento como este:
Warning FailedScheduling 33m (x29 over 92m) default-scheduler 0/9 nodes are available: 1 Insufficient memory, 3 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }, 5 Insufficient cpu, 5 Insufficient nvidia.com/gpu-vm-H100L_94GB. preemption: 0/
9 nodes are available: 3 Preemption is not helpful for scheduling, 6 No preemption victims found for incoming pod.
Solução alternativa:
- Pare manualmente as VMs sem GPU para libertar recursos da CPU.
- Depois de agendar a VM pendente, inicie as VMs sem GPU.