update |
1.28.0-1.28.400 ou 1.29.0 |
O uso de várias interfaces de rede com CNI padrão não funciona.
Os binários padrão da CNI bridge, ipvlan, vlan, macvlan, dhcp, tuning,
host-local, ptp, portmap não estão incluídos nas imagens do SO nas versões
afetadas. Esses binários CNI não são usados pelo plano de dados v2, mas podem ser usados
para interfaces de rede adicionais no recurso de interface de várias redes.
Várias interfaces de rede com esses plug-ins de CNI não funcionarão.
Alternativa:
Se você estiver usando esse recurso, faça upgrade para a versão com a correção.
|
update |
1,15, 1,16, 1,28 |
As dependências do trident do Netapp interferem no driver CSI do vSphere
A instalação do multipathd nos nós do cluster interfere no driver CSI do vSphere, e isso impede a inicialização das cargas de trabalho do usuário.
Alternativa:
|
Atualizações |
1,15, 1,16 |
O webhook do cluster de administrador pode bloquear atualizações quando você
adiciona as configurações necessárias
Se algumas configurações obrigatórias estiverem vazias no cluster de administrador
porque as validações foram ignoradas, é possível que a adição delas seja bloqueada pelo webhook
do cluster de administrador. Por exemplo, se o campo gkeConnect não foi
definido em um cluster de administrador atual, adicioná-lo com o
comando gkectl update admin pode receber a seguinte mensagem de
erro:
admission webhook "vonpremadmincluster.onprem.cluster.gke.io" denied the request: connect: Required value: GKE connect is required for user clusters
Alternativa:
-
Para clusters de administrador 1,15, execute o comando
gkectl update admin com a sinalização --disable-admin-cluster-webhook . Por exemplo:
gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --disable-admin-cluster-webhook
-
Para clusters de administrador 1,16, execute comandos
gkectl update admin com a sinalização --force . Por exemplo:
gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig ADMIN_CLUSTER_KUBECONFIG --force
|
Configuração |
1.15.0-1.15.10, 1.16.0-1.16.6, 1.28.0-1.28.200 |
O campo controlPlaneNodePort assume o padrão 30968 quando a especificação manualLB está vazia
Se você for usar um balanceador de carga manual
(loadBalancer.kind está definido como "ManualLB" ),
não será necessário configurar a seção loadBalancer.manualLB
no arquivo de configuração para um cluster de administrador de alta
disponibilidade (HA) nas versões 1.16 e mais recentes. No entanto, quando esta seção está vazia,
o GKE no VMware atribui valores padrão a todos os NodePorts, incluindo
manualLB.controlPlaneNodePort , o que faz com que a criação
do cluster falhe com a seguinte mensagem de erro:
- Validation Category: Manual LB
- [FAILURE] NodePort configuration: manualLB.controlPlaneNodePort must
not be set when using HA admin cluster, got: 30968
Alternativa:
Especifique manualLB.controlPlaneNodePort: 0 na configuração do cluster de administrador
para o cluster de administrador de alta disponibilidade:
loadBalancer:
...
kind: ManualLB
manualLB:
controlPlaneNodePort: 0
...
|
Armazenamento |
1.28.0-1.28.100 |
O nfs-common está ausente na imagem do SO Ubuntu.
nfs-common não está presente na imagem do SO Ubuntu, o que pode causar problemas para clientes que usam drivers dependentes de NFS, como o NetApp.
Se o registro tiver uma entrada como a seguinte após o upgrade para a versão 1.28, você será afetado por esse problema:
Warning FailedMount 63s (x8 over 2m28s) kubelet MountVolume.SetUp failed for volume "pvc-xxx-yyy-zzz" : rpc error: code = Internal desc = error mounting NFS volume 10.0.0.2:/trident_pvc_xxx-yyy-zzz on mountpoint /var/lib/kubelet/pods/aaa-bbb-ccc/volumes/kubernetes.io~csi/pvc-xxx-yyy-zzz/mount: exit status 32".
Alternativa:
Verifique se os nós podem fazer o download de pacotes da Canonical.
Em seguida, aplique o DaemonSet a seguir ao cluster para instalar o nfs-common :
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: install-nfs-common
labels:
name: install-nfs-common
namespace: kube-system
spec:
selector:
matchLabels:
name: install-nfs-common
minReadySeconds: 0
updateStrategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 100%
template:
metadata:
labels:
name: install-nfs-common
spec:
hostPID: true
hostIPC: true
hostNetwork: true
initContainers:
- name: install-nfs-common
image: ubuntu
imagePullPolicy: IfNotPresent
securityContext:
privileged: true
command:
- chroot
- /host
- bash
- -c
args:
- |
apt install -y nfs-common
volumeMounts:
- name: host
mountPath: /host
containers:
- name: pause
image: gcr.io/gke-on-prem-release/pause-amd64:3.1-gke.5
imagePullPolicy: IfNotPresent
volumes:
- name: host
hostPath:
path: /
|
Armazenamento |
1.28.0-1.28.100 |
O campo de política de armazenamento está ausente no modelo de configuração do cluster de administrador
O SPBM em clusters de administrador tem suporte na versão 1.28.0 e mais recentes. Mas o campo
vCenter.storagePolicyName está ausente no modelo do arquivo de configuração.
Alternativa:
Adicione o campo "vCenter.storagePolicyName" no arquivo de configuração do cluster de administrador se
quiser definir a política de armazenamento desse cluster. Consulte as instructions.
|
Geração de registros e monitoramento |
1.28.0-1.28.100 |
A API kubernetesmetadata.googleapis.com recém-adicionada não é compatível com o VPC-SC.
Isso fará com que o agente de coleta de metadados não alcance essa API no VPC-SC. Depois, os rótulos de metadados de métricas vão estar ausentes.
Alternativa:
No namespace "kube-system", a resposta automática "stackdriver" define o campo "featureGates.disableExperimentalMetadataAgent" como "true" executando o comando
`kubectl -n kube-system patch stackdriver stackdriver -p '{"spec":{"featureGates":{"disableExperimentalMetadataAgent":true}}}'`
depois executar
`kubectl -n kube-system patch deployment stackdriver-operator -p '{"spec":{"template":{"spec":{"containers":[{"name":"stackdriver-operator","env":[{"name":"ENABLE_LEGACY_METADATA_AGENT","value":"true"}]}]}}}}'`
|
Upgrades e atualizações |
1.15.0-1.15.7, 1.16.0-1.16.4, 1.28.0 |
O controlador clusterapi-controller pode falhar quando o cluster de administrador e qualquer cluster de usuário com o ControlPlane V2 ativado usam credenciais diferentes do vSphere.
Quando um cluster de administrador e qualquer cluster de usuário com o ControlPlane V2 ativado usam
credenciais diferentes do vSphere, por exemplo, depois de atualizar as credenciais do vSphere para o
cluster de administrador, o clusterapi-controller pode não se conectar ao vCenter após a reinicialização. Confira o registro do clusterapi-controller em execução no namespace "kube-system" do cluster de administrador.
kubectl logs -f -l component=clusterapi-controllers -c vsphere-controller-manager \
-n kube-system --kubeconfig KUBECONFIG
Se o registro contiver uma entrada como a seguinte, você será afetado por este problema:
E1214 00:02:54.095668 1 machine_controller.go:165] Error checking existence of machine instance for machine object gke-admin-node-77f48c4f7f-s8wj2: Failed to check if machine gke-admin-node-77f48c4f7f-s8wj2 exists: failed to find datacenter "VSPHERE_DATACENTER": datacenter 'VSPHERE_DATACENTER' not found
Alternativa:
Atualize as credenciais do vSphere para que o cluster de administrador e todos os clusters de usuário com o Controlplane V2 ativado usem as mesmas credenciais do vSphere.
|
Geração de registros e monitoramento |
1,14 |
Alto número de solicitações GRPC com falha no Prometheus Alert Manager com etcd
O Prometheus pode gerar alertas semelhantes ao seguinte exemplo:
Alert Name: cluster:gke-admin-test1: Etcd cluster kube-system/kube-etcd: 100% of requests for Watch failed on etcd instance etcd-test-xx-n001.
Para verificar se esse é um falso positivo que pode ser ignorado,
siga estas etapas:
- Verifique a métrica bruta
grpc_server_handled_total em relação
ao grpc_method fornecido na mensagem de alerta. Neste exemplo, verifique o rótulo grpc_code para Watch .
É possível verificar essa métrica usando o Cloud Monitoring com a seguinte
consulta MQL:
fetch
k8s_container | metric 'kubernetes.io/anthos/grpc_server_handled_total' | align rate(1m) | every 1m
- Um alerta em todos os códigos diferentes de
OK pode ser ignorado com segurança se o código não for um dos seguintes:
Unknown|FailedPrecondition|ResourceExhausted|Internal|Unavailable|DataLoss|DeadlineExceeded
.
Alternativa:
Para configurar o Prometheus para ignorar esses alertas de falsos positivos, analise
as seguintes opções:
- Silenciar alerta na interface do Gerenciador de alertas.
- Se silenciar o alerta não for uma opção, confira as etapas a seguir
para suprimir os falsos positivos:
- Reduza os recursos do operador de monitoramento para
0 réplicas. Assim,
as modificações poderão ser mantidas.
- Modifique o configmap
prometheus-config e adicione grpc_method!="Watch" à configuração de alerta etcdHighNumberOfFailedGRPCRequests , conforme mostrado no exemplo a seguir:
- Original:
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code!="OK",job=~".*etcd.*"}[5m])
- Modificado:
rate(grpc_server_handled_total{cluster="CLUSTER_NAME",grpc_code=~"Unknown|FailedPrecondition|ResourceExhausted|Internal|Unavailable|DataLoss|DeadlineExceeded",grpc_method!="Watch",job=~".*etcd.*"}[5m])
Substitua o CLUSTER_NAME a seguir pelo nome do cluster.
- Reinicie o Prometheus e o Statefulset do Alertmanager para selecionar a
nova configuração.
- Se o código se enquadrar em um dos casos problemáticos, verifique os registros
do etcd e
kube-apiserver para depurar mais.
|
Rede |
1.16.0-1.16.2 ou 1.28.0 |
As conexões de longa duração NAT de saída são descartadas
Se não houver tráfego, as conexões NAT de saída poderão ser descartadas depois de 5 a 10 minutos após o estabelecimento de uma conexão.
Como o conntrack só importa na direção de entrada (conexões externas com o cluster), esse problema só acontecerá se a conexão não transmitir nenhuma informação por um tempo e o lado do destino transmitir algo. Se o pod de saída NAT sempre instanciar as mensagens, esse problema não será visto.
Esse problema ocorre porque a coleta de lixo do Anetd remove acidentalmente
entradas conntrack que o daemon acredita não serem usadas.
Uma correção upstream
foi integrada recentemente à rede para corrigir o comportamento.
Alternativa:
Não há uma solução alternativa fácil, e não observamos problemas desse comportamento na versão 1.16. Se você notar que conexões de longa duração foram descartadas devido a
esse problema, soluções alternativas seriam usar uma carga de trabalho no mesmo nó que o
endereço IP de saída ou enviar mensagens de maneira consistente na conexão
TCP.
|
Operação |
1,14, 1,15, 1,16 |
O signatário da CSR ignora spec.expirationSeconds ao assinar
certificados
Se você criar uma CertificateSigningRequest (CSR) com
expirationSeconds definido, o expirationSeconds
será ignorado.
Alternativa:
Se você for afetado por esse problema, atualize o cluster de usuário
adicionando disableNodeIDVerificationCSRSigning: true ao arquivo de configuração
e execute o comando gkectl update cluster
para atualizar o cluster com essa configuração.
|
Rede, upgrades e atualizações |
1.16.0-1.16.3 |
A validação do balanceador de carga do cluster de usuário falha para
disable_bundled_ingress
Se você tentar
desativar a entrada em pacote para um cluster atual, o comando gkectl update cluster falhará com um erro
semelhante ao exemplo a seguir:
[FAILURE] Config: ingress IP is required in user cluster spec
Esse erro acontece porque gkectl verifica se há um endereço IP de entrada do balanceador de carga durante as verificações de simulação. Embora essa verificação
não seja necessária ao desativar a entrada em pacote, a verificação de simulação
gkectl falha quando disableBundledIngress é definido como
true .
Alternativa:
Use o parâmetro --skip-validation-load-balancer ao atualizar o cluster, conforme mostrado no exemplo a seguir:
gkectl update cluster \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG \
--skip-validation-load-balancer
Para mais informações, consulte como
desativar a entrada em pacote para um cluster atual.
|
Upgrades e atualizações |
1.13, 1.14, 1.15.0-1.15.6 |
As atualizações do cluster de administrador falham após a rotação da CA
Se você alternar os certificados de autoridade de certificação (CA, na sigla em inglês) do cluster de administrador,
as tentativas subsequentes de executar o comando gkectl update admin vão falhar.
O erro retornado é semelhante ao seguinte:
failed to get last CARotationStage: configmaps "ca-rotation-stage" not found
Alternativa:
Se esse problema afetar você, atualize o cluster de administrador
usando a sinalização --disable-update-from-checkpoint com o
comando gkectl update admin :
gkectl update admin --config ADMIN_CONFIG_file \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--disable-update-from-checkpoint
Quando você usa a sinalização --disable-update-from-checkpoint , o
comando de atualização não usa o arquivo de checkpoint como a fonte da verdade durante a
atualização do cluster. O arquivo de checkpoint ainda é atualizado para uso futuro.
|
Armazenamento |
1.15.0-1.15.6, 1.16.0-1.16.2 |
A verificação de simulação da carga de trabalho CSI falha devido a uma falha na inicialização do pod
Durante as verificações de simulação, a verificação de validação da carga de trabalho CSI instala um
pod no namespace default . O pod da carga de trabalho CSI valida
que o driver CSI do vSphere está instalado e pode fazer o provisionamento de
volume dinâmico. Se esse pod não for iniciado, a verificação de validação da carga de trabalho CSI
vai falhar.
Há alguns problemas conhecidos que podem impedir a inicialização do pod:
- Se o pod não tiver limites de recursos especificados, como é o caso
de alguns clusters com webhooks de admissão instalados, o pod não será iniciado.
- Se o Anthos Service Mesh estiver instalado no cluster com
a injeção automática de arquivo secundário do Istio ativada no namespace
default , o pod da carga de trabalho CSI não será iniciado.
Se o pod da carga de trabalho CSI não for iniciado, você verá um erro de tempo limite como este
durante as validações de simulação:
- [FAILURE] CSI Workload: failure in CSIWorkload validation: failed to create writer Job to verify the write functionality using CSI: Job default/anthos-csi-workload-writer-<run-id> replicas are not in Succeeded phase: timed out waiting for the condition
Para ver se a falha é causada pela falta de um conjunto de recursos do pod, execute o seguinte comando para verificar o status do job anthos-csi-workload-writer-<run-id> :
kubectl describe job anthos-csi-workload-writer-<run-id>
Se os limites de recursos não estiverem definidos corretamente para o pod de carga de trabalho CSI,
o status do job vai conter uma mensagem de erro como esta:
CPU and memory resource limits is invalid, as it are not defined for container: volume-tester
Se o pod de carga de trabalho CSI não for iniciado devido à injeção de arquivo secundário do Istio,
desative temporariamente a injeção automática de arquivo secundário do Istio no
namespace default . Verifique os rótulos do namespace e use
o comando a seguir para excluir o rótulo que começa com istio.io/rev :
kubectl label namespace default istio.io/rev-
Se o pod estiver configurado incorretamente, verifique manualmente se o provisionamento de volume dinâmico com o driver CSI do vSphere funciona:
- Crie um PVC que use o StorageClass
standard-rwo .
- Crie um pod que use o PVC.
- Verifique se o pod consegue ler/gravar dados no volume.
- Remova o pod e o PVC depois de verificar a operação adequada.
Se o provisionamento de volume dinâmico com o driver CSI do vSphere funcionar, execute
gkectl diagnose ou gkectl upgrade
com a sinalização --skip-validation-csi-workload para pular a
verificação de carga de trabalho do CSI.
|
Operação |
1.16.0-1.16.2 |
Tempos limite de atualização do cluster de usuário quando a versão do cluster de administrador é 1.15
Quando você faz login em uma
estação de trabalho de administrador gerenciada pelo usuário, o comando gkectl update cluster
pode atingir o tempo limite e não atualizar o cluster de usuário. Isso acontecerá se
a versão do cluster de administrador for 1.15 e você executar gkectl update admin
antes de executar o gkectl update cluster .
Quando essa falha ocorrer, você verá o seguinte erro ao tentar atualizar o cluster:
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Durante a atualização de um cluster de administrador 1.15, o validation-controller
que aciona as verificações de simulação é removido do cluster. Se você
tentar atualizar o cluster de usuário, a verificação de simulação travará até que o
tempo limite seja atingido.
Alternativa:
- Execute o seguinte comando para reimplantar o
validation-controller :
gkectl prepare --kubeconfig ADMIN_KUBECONFIG --bundle-path BUNDLE_PATH --upgrade-platform
-
Após a conclusão da preparação, execute
gkectl update cluster novamente para atualizar o cluster de usuário
|
Operação |
1.16.0-1.16.2 |
Tempos limite da criação de clusters de usuário quando a versão do cluster de administrador é 1.15
Quando você faz login em uma
estação de trabalho de administrador gerenciada pelo usuário, o comando gkectl create cluster
pode atingir o tempo limite e falhar ao criar o cluster de usuário. Isso acontecerá se
a versão do cluster de administrador for 1.15.
Quando essa falha ocorrer, você verá o seguinte erro ao tentar criar o cluster:
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Preflight check failed with failed to run server-side preflight checks: server-side preflight checks failed: timed out waiting for the condition
Como o validation-controller foi adicionado na versão 1.16, ao usar o
cluster de administrador 1.15, o validation-controller que é responsável por acionar as verificações de simulação está ausente. Portanto, ao tentar criar um cluster de usuário, as verificações de simulação
travam até o tempo limite ser atingido.
Alternativa:
- Execute o seguinte comando para implantar o
validation-controller :
gkectl prepare --kubeconfig ADMIN_KUBECONFIG --bundle-path BUNDLE_PATH --upgrade-platform
-
Após a conclusão da preparação, execute
gkectl create cluster novamente para criar o cluster de usuário
|
Upgrades e atualizações |
1.16.0-1.16.2 |
A atualização ou o upgrade do cluster de administrador falhará se os projetos ou os locais dos serviços complementares não corresponderem.
Quando você faz upgrade de um cluster de administrador da versão 1.15.x para 1.16.x ou
adiciona uma configuração connect , stackdriver ,
cloudAuditLogging ou gkeOnPremAPI
ao atualizar um cluster de administrador, a operação pode ser rejeitada pelo webhook
do cluster de administrador. Uma das seguintes mensagens de erro pode aparecer:
"projects for connect, stackdriver and cloudAuditLogging must be the
same when specified during cluster creation."
"locations for connect, gkeOnPremAPI, stackdriver and
cloudAuditLogging must be in the same region when specified during
cluster creation."
"locations for stackdriver and cloudAuditLogging must be the same
when specified during cluster creation."
Uma atualização ou upgrade de cluster de administrador exige que o
onprem-admin-cluster-controller reconcilie o cluster
de administrador em um cluster de tipo. Quando o estado do cluster de administrador é restaurado no
cluster do tipo, o webhook do cluster de administrador não consegue distinguir se o
objeto OnPremAdminCluster é para a criação de um cluster de administrador
ou para retomar as operações para uma atualização ou upgrade. Algumas validações somente de criação são invocadas na atualização e no upgrade inesperadamente.
Alternativa:
Adicione a anotação onprem.cluster.gke.io/skip-project-location-sameness-validation: true ao objeto OnPremAdminCluster :
- Edite o recurso de cluster
onpremadminclusters :
kubectl edit onpremadminclusters ADMIN_CLUSTER_NAME -n kube-system –kubeconfig ADMIN_CLUSTER_KUBECONFIG
Substitua o seguinte:
ADMIN_CLUSTER_NAME : o nome do
cluster de administrador.
ADMIN_CLUSTER_KUBECONFIG : o caminho
do arquivo kubeconfig do cluster de administrador.
- Adicione a anotação
onprem.cluster.gke.io/skip-project-location-sameness-validation: true e salve o recurso personalizado.
- Dependendo do tipo de clusters de administrador, conclua uma das
seguintes etapas:
- Para clusters de administrador que não são de alta disponibilidade com um arquivo de checkpoint: adicione o
parâmetro
disable-update-from-checkpoint no
comando de atualização ou adicione o parâmetro
"disable-upgrade-from-checkpoint" no comando de upgrade. Estes parâmetros só serão necessários na próxima vez que você executar o comando update ou upgrade :
-
gkectl update admin --config ADMIN_CONFIG_file --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--disable-update-from-checkpoint
-
gkectl upgrade admin --config ADMIN_CONFIG_file --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--disable-upgrade-from-checkpoint
- Para clusters de administrador de alta disponibilidade ou um arquivo de checkpoint desativado:atualize ou faça upgrade do cluster de administrador normalmente. Nenhum parâmetro adicional é necessário nos comandos de atualização ou upgrade.
|
Operação |
1.16.0-1.16.2 |
A exclusão do cluster de usuário falha ao usar uma estação de trabalho de administrador gerenciada pelo usuário
Quando você faz login em uma
estação de trabalho de administrador gerenciada pelo usuário, o comando gkectl delete cluster
pode atingir o tempo limite e não excluir o cluster de usuário. Isso acontecerá se você primeiro executar gkectl na estação de trabalho gerenciada pelo usuário para criar, atualizar ou fazer upgrade do cluster de usuário. Quando essa falha ocorrer,
você verá o seguinte erro ao tentar excluir o cluster:
failed to wait for user cluster management namespace "USER_CLUSTER_NAME-gke-onprem-mgmt"
to be deleted: timed out waiting for the condition
Durante a exclusão, um cluster primeiro exclui todos os objetos. A
exclusão dos objetos de validação (criados durante a criação,
a atualização ou o upgrade) fica paralisada na fase de exclusão. Isso acontece
porque um finalizador bloqueia a exclusão do objeto, o que faz com que
a exclusão do cluster falhe.
Alternativa:
- Receba os nomes de todos os objetos de validação:
kubectl --kubeconfig ADMIN_KUBECONFIG get validations \
-n USER_CLUSTER_NAME-gke-onprem-mgmt
-
Para cada objeto de validação, execute o seguinte comando para remover o
finalizador do objeto de validação:
kubectl --kubeconfig ADMIN_KUBECONFIG patch validation/VALIDATION_OBJECT_NAME \
-n USER_CLUSTER_NAME-gke-onprem-mgmt -p '{"metadata":{"finalizers":[]}}' --type=merge
Depois que o finalizador é removido de todos os objetos de validação, os objetos
são removidos e a operação de exclusão do cluster de usuário é concluída
automaticamente. Você não precisa fazer nada.
|
Rede |
1,15, 1,16 |
Falha no tráfego do gateway NAT de saída para o servidor externo
Se o pod de origem e o pod do gateway NAT de saída estiverem em dois nós de trabalho
diferentes, o tráfego do pod de origem não poderá alcançar nenhum serviço
externo. Se os pods estiverem localizados no mesmo host, a conexão com o serviço ou aplicativo externo será bem-sucedida.
Esse problema é causado pelo vSphere descartando pacotes VXLAN quando a agregação de
túnel está ativada. Há um problema conhecido com o NSX e o VMware que
só envia tráfego agregado em portas VXLAN conhecidas (4789).
Alternativa:
Altere a porta VXLAN usada pelo Cilium para 4789 :
- Edite o ConfigMap
cilium-config :
kubectl edit cm -n kube-system cilium-config --kubeconfig USER_CLUSTER_KUBECONFIG
- Adicione o seguinte ao ConfigMap
cilium-config :
tunnel-port: 4789
- Reinicie o DaemonSet anetd:
kubectl rollout restart ds anetd -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG
Essa solução é revertida sempre que o cluster é atualizado. É necessário
reconfigurar após cada upgrade. O VMware precisa resolver o problema no vSphere
para uma correção permanente.
|
Upgrades |
1.15.0-1.15.4 |
Falha ao fazer upgrade de um cluster de administrador com a criptografia de secrets sempre ativada
O upgrade do cluster de administrador da versão 1.14.x para o 1.15.x com a
criptografia de secrets sempre ativada falha devido a uma incompatibilidade entre a
chave de criptografia gerada pelo controlador e a chave que persiste no
disco de dados mestre do administrador. A saída de gkectl upgrade
admin contém a seguinte mensagem de erro:
E0926 14:42:21.796444 40110 console.go:93] Exit with error:
E0926 14:42:21.796491 40110 console.go:93] Failed to upgrade the admin cluster: failed to create admin cluster: failed to wait for OnPremAdminCluster "admin-cluster-name" to become ready: failed to wait for OnPremAdminCluster "admin-cluster-name" to be ready: error: timed out waiting for the condition, message: failed to wait for OnPremAdminCluster "admin-cluster-name" to stay in ready status for duration "2m0s": OnPremAdminCluster "non-prod-admin" is not ready: ready condition is not true: CreateOrUpdateControlPlane: Creating or updating credentials for cluster control plane
A execução de kubectl get secrets -A --kubeconfig KUBECONFIG` falha com o seguinte erro:
Internal error occurred: unable to transform key "/registry/secrets/anthos-identity-service/ais-secret": rpc error: code = Internal desc = failed to decrypt: unknown jwk
Alternativa
Se você tiver um backup do cluster de administrador, siga as etapas a seguir para
solucionar a falha de upgrade:
-
Desative
secretsEncryption no arquivo de configuração do cluster
de administrador e atualize o cluster usando o
seguinte comando:
gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG
-
Quando a nova VM mestre do administrador for criada, use SSH para se conectar à VM mestre do administrador e substitua a nova chave no disco de dados pela antiga do backup. A chave está localizada em
/opt/data/gke-k8s-kms-plugin/generatedkeys no mestre administrador.
-
Atualize o manifesto do pod estático kms-plugin.yaml em
/etc/kubernetes/manifests para atualizar --kek-id de modo que corresponda ao campo kid na chave de criptografia original.
-
Reinicie o pod estático kms-plugin movendo o
/etc/kubernetes/manifests/kms-plugin.yaml para outro diretório e, em seguida, mova-o de volta.
-
Execute
gkectl upgrade admin novamente para retomar o upgrade do administrador.
Como evitar a falha no upgrade
Se você ainda não fez o upgrade, recomendamos não fazer upgrade para a versão 1.15.0-1.15.4. Se você precisar fazer upgrade para uma versão afetada, siga
as etapas a seguir antes de fazer upgrade do cluster de administrador:
-
Faça backup do cluster de administrador.
-
Desative
secretsEncryption no arquivo de configuração do cluster
de administrador e atualize o cluster usando o
seguinte comando:
gkectl update admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG
- Faça upgrade do cluster de administrador.
-
Reative a criptografia de secrets sempre ativados.
|
Armazenamento |
1,11 - 1,16 |
Erros de disco e falhas de anexação ao usar o rastreamento de blocos alterados
(CBT, na sigla em inglês)
O GKE no VMware não oferece suporte ao rastreamento de blocos alterados (CBT, na sigla em inglês) em
discos. Alguns softwares de backup usam o recurso CBT para rastrear o estado do disco e
fazer backups, o que faz com que o disco não consiga se conectar a uma VM
que executa o GKE no VMware. Para mais informações, consulte o
artigo da base de conhecimento
do VMware.
Alternativa:
Não faça backup do GKE nas VMs do VMware, porque o software de backup de terceiros
pode fazer com que a CBT seja ativada nos discos. Não é necessário fazer backup
dessas VMs.
Não ative a CBT no nó, porque essa mudança não será mantida em
atualizações ou upgrades.
Se você já tiver discos com CBT ativada, siga as etapas de
Resolução no
artigo da base de conhecimento do VMware
para desativar a CBT no disco de primeira classe.
|
Armazenamento |
1,14, 1,15, 1,16 |
Corrupção de dados no NFSv3 quando anexos paralelos a um arquivo compartilhado são
feitos a partir de vários hosts
Se você usar matrizes de armazenamento Nutanix para fornecer compartilhamentos NFSv3 aos seus
hosts, poderá haver corrupção de dados ou a incapacidade dos pods
de serem executados. Esse problema é causado por um problema de compatibilidade conhecido
entre determinadas versões do VMware e da Nutanix. Para mais
informações, consulte o
artigo associado da
base de conhecimento do VMware.
Alternativa:
O artigo da base de conhecimento do VMware está desatualizado e indica que não há
uma resolução atual. Para resolver esse problema, atualize para a versão mais recente
do ESXi nos seus hosts e para a versão mais recente do Nutanix nas suas matrizes
de armazenamento.
|
Sistema operacional |
1.13.10, 1.14.6 ou 1.15.3 |
Incompatibilidade de versão entre o kubelet e o plano de controle do Kubernetes
Para determinadas versões do GKE no VMware, o kubelet em execução nos nós usa uma versão diferente do plano de controle do Kubernetes. Há uma incompatibilidade porque o binário do kubelet pré-carregado na imagem do SO está usando uma versão diferente.
A tabela a seguir lista as incompatibilidades de versão identificadas:
Versão do GKE no VMware |
versão do kubelet |
Versão do Kubernetes |
1.13.10 |
v1.24.11-gke.1200 |
v1.24.14-gke.2100 |
1.14.6 |
v1.25.8-gke.1500 |
v1.25.10-gke.1200 |
1.15.3 |
v1.26.2-gke.1001 |
v1.26.5-gke.2100 |
Alternativa:
Nenhuma ação é necessária. A inconsistência ocorre apenas entre as versões de patch
do Kubernetes, e nenhum problema foi causado por esse desvio de versão.
|
Upgrades e atualizações |
1.15.0-1.15.4 |
Falha ao fazer upgrade ou atualizar um cluster de administrador com uma versão de CA superior a 1
Quando um cluster de administrador tem uma versão de autoridade de certificação (CA)
mais recente que 1, há uma falha na atualização ou no upgrade devido à validação da versão da CA no
webhook. A saída do upgrade/atualização de gkectl contém a seguinte mensagem de erro:
CAVersion must start from 1
Alternativa:
-
Reduza a escala da implantação
auto-resize-controller no
cluster de administrador para desativar o redimensionamento automático do nó. Isso é necessário
porque um novo campo introduzido no recurso personalizado do cluster de administrador na
versão 1.15 pode causar um erro de ponteiro nulo em auto-resize-controller .
kubectl scale deployment auto-resize-controller -n kube-system --replicas=0 --kubeconfig KUBECONFIG
-
Execute comandos
gkectl com a sinalização --disable-admin-cluster-webhook .Por exemplo:
gkectl upgrade admin --config ADMIN_CLUSTER_CONFIG_FILE --kubeconfig KUBECONFIG --disable-admin-cluster-webhook
|
Operação |
1.13, 1.14.0-1.14.8, 1.15.0-1.15.4, 1.16.0-1.16.1 |
A exclusão do cluster sem plano de controle de alta disponibilidade V2 trava até o tempo limite
Quando um cluster que não é do plano de controle V2 de alta disponibilidade é excluído, ele fica travado na exclusão
do nó até atingir o tempo limite.
Alternativa:
Se o cluster contiver um StatefulSet com dados críticos, entre em contato com o Cloud Customer Care para resolver esse problema.
Caso contrário, siga estas etapas:
|
Armazenamento |
1.15.0+, 1.16.0+ |
As tarefas de anexação de CNS constantes aparecem a cada minuto para PVC/PV na árvore
após o upgrade para a versão 1.15 ou mais recente.
Quando um cluster contém volumes permanentes do vSphere em árvore (por exemplo, PVCs criados com o StorageClass standard ), você observa as tarefas com.vmware.cns.tasks.attachvolume acionadas a cada minuto no vCenter.
Alternativa:
Edite o configMap do recurso CSI do vSphere e defina list-volumes como "false":
kubectl edit configmap internal-feature-states.csi.vsphere.vmware.com -n kube-system --kubeconfig KUBECONFIG
Reinicie os pods do controlador CSI do vSphere:
kubectl rollout restart vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
|
Armazenamento |
1.16.0 |
Avisos falsos contra PVCs
Quando um cluster contém volumes permanentes intree do vSphere, os comandos
gkectl diagnose e gkectl upgrade podem gerar
avisos falsos sobre as declarações de volume permanente (PVCs, na sigla em inglês) ao
validar as configurações de armazenamento do cluster. A mensagem de aviso é semelhante a esta:
CSIPrerequisites pvc/pvc-name: PersistentVolumeClaim pvc-name bounds to an in-tree vSphere volume created before CSI migration enabled, but it doesn't have the annotation pv.kubernetes.io/migrated-to set to csi.vsphere.vmware.com after CSI migration is enabled
Alternativa:
Execute o seguinte comando para verificar as anotações de um PVC com o
aviso acima:
kubectl get pvc PVC_NAME -n PVC_NAMESPACE -oyaml --kubeconfig KUBECONFIG
Se o campo annotations na
saída contiver o seguinte, você poderá ignorar o aviso com segurança:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: csi.vsphere.vmware.com
|
Upgrades e atualizações |
1.15.0+, 1.16.0+ |
A rotação de chaves da conta de serviço falha quando várias chaves estão expiradas
Se o cluster não estiver usando um registro particular e a chave da conta de serviço de acesso ao componente e as chaves da conta de serviço do Logging-monitoring (ou Connect-register) expirarem, quando você alternar as chaves da conta de serviço, gkectl update credentials falhará com um erro semelhante ao seguinte:
Error: reconciliation failed: failed to update platform: ...
Alternativa:
Primeiro, alterne a chave da conta de serviço de acesso ao componente. Ainda que a mesma mensagem de erro seja exibida, será possível alternar as outras chaves após a rotação de chaves da conta de serviço de acesso ao componente.
Se a atualização ainda não for bem-sucedida, entre em contato com o Cloud Customer Care
para resolver o problema.
|
Upgrades |
1.16.0-1.16.5 |
1.15 A máquina mestre do usuário encontra uma recriação inesperada quando o controlador de cluster de usuário é atualizado para a versão 1.16
Durante um upgrade de cluster de usuário, após o upgrade do controlador para a versão 1.16, se você tiver outros 1,15 clusters de usuário gerenciados pelo mesmo cluster de administrador, a máquina mestre de usuário poderá ser recriada inesperadamente.
Há um bug no controlador de cluster de usuário 1.16 que pode acionar a recriação da máquina principal do usuário 1.15.
A solução alternativa depende de como você encontra esse problema.
Solução alternativa ao fazer upgrade do cluster de usuário com o console do Google Cloud:
Opção 1: use a versão 1.16.6 ou mais recente do GKE no VMware com a correção.
Opção 2: siga estas etapas:
- Adicione manualmente a anotação de nova execução com o seguinte comando:
kubectl edit onpremuserclusters USER_CLUSTER_NAME -n USER_CLUSTER_NAME-gke-onprem-mgmt --kubeconfig ADMIN_KUBECONFIG
A anotação de nova execução é:
onprem.cluster.gke.io/server-side-preflight-rerun: true
- Monitore o progresso do upgrade verificando o campo
status do OnPremUserCluster.
Solução alternativa ao fazer upgrade do cluster de usuário usando sua própria estação de trabalho do administrador:
Opção 1: use a versão 1.16.6 ou mais recente do GKE no VMware com a correção.
Opção 2: siga estas etapas:
- Adicione o arquivo de informações de build
/etc/cloud/build.info com o conteúdo abaixo. Isso faz com que as verificações de simulação sejam executadas localmente na estação de trabalho do administrador, e não no servidor.
gke_on_prem_version: GKE_ON_PREM_VERSION
Exemplo:
gke_on_prem_version: 1.16.0-gke.669
- Execute o comando de upgrade novamente.
- Depois que o upgrade for concluído, exclua o arquivo build.info.
|
Criar |
1.16.0-1.16.5, 1.28.0-1.28.100 |
A verificação de simulação falha quando o nome do host não está no arquivo de bloco de IP.
Durante a criação do cluster, se você não especificar um nome do host para cada
endereço IP no arquivo de bloco de IP, a verificação de simulação falhará com a
seguinte mensagem de erro:
multiple VMs found by DNS name in xxx datacenter. Anthos Onprem doesn't support duplicate hostname in the same vCenter and you may want to rename/delete the existing VM.`
Há um bug na verificação de simulação que presume que o nome do host vazio é considerado duplicado.
Alternativa:
Opção 1: use uma versão com a correção.
Opção 2: ignorar essa verificação de simulação adicionando a sinalização --skip-validation-net-config .
Opção 3: especifique um nome do host exclusivo para cada endereço IP no arquivo de bloco de IPs.
|
Upgrades e atualizações |
1.16 |
Falha na montagem do volume ao fazer upgrade/atualização do cluster de administrador se estiver usando um cluster de administrador que não seja de alta disponibilidade e um cluster de usuário do plano de controle v1
Para um cluster de administrador que não é de alta disponibilidade e um cluster de usuário do plano de controle v1, quando você faz upgrade ou atualiza o cluster de administrador, a recriação da máquina mestre do cluster de administrador pode acontecer ao mesmo tempo que a reinicialização da máquina mestre do cluster de usuário, o que pode revelar uma disputa.
Isso faz com que os pods do plano de controle do cluster de usuário não consigam se comunicar com o plano de controle do cluster de administrador, o que causa problemas de anexação de volume para kube-etcd e kube-apiserver no plano de controle do cluster de usuário.
Para verificar o problema, execute os seguintes comandos para o pod afetado:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace USER_CLUSTER_NAME describe pod IMPACTED_POD_NAME
Você vai encontrar eventos como:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedMount 101s kubelet Unable to attach or mount volumes: unmounted volumes=[kube-audit], unattached volumes=[], failed to process volumes=[]: timed out waiting for the condition
Warning FailedMount 86s (x2 over 3m28s) kubelet MountVolume.SetUp failed for volume "pvc-77cd0635-57c2-4392-b191-463a45c503cb" : rpc error: code = FailedPrecondition desc = volume ID: "bd313c62-d29b-4ecd-aeda-216648b0f7dc" does not appear staged to "/var/lib/kubelet/plugins/kubernetes.io/csi/csi.vsphere.vmware.com/92435c96eca83817e70ceb8ab994707257059734826fedf0c0228db6a1929024/globalmount"
Alternativa:
-
SSH no nó do plano de controle do usuário, já que é um cluster de usuário do plano de controle v1, o nó do plano de controle do usuário está no cluster de administrador.
-
Reinicie o kubelet usando o seguinte comando:
sudo systemctl restart kubelet
.
Após a reinicialização, o kubelet poderá reconstruir a montagem global do estágio corretamente.
|
Upgrades e atualizações |
1.16.0 |
Falha ao criar o nó do plano de controle
Durante um upgrade ou atualização de um cluster de administrador, uma disputa pode
fazer com que o gerenciador de controladores do Cloud do vSphere exclua inesperadamente um novo
nó do plano de controle. Isso faz com que o clusterapi-controller fique travado, aguardando a criação do nó, e o tempo limite do upgrade/atualização. Nesse caso, a saída do comando gkectl
de upgrade/update é semelhante a esta:
controlplane 'default/gke-admin-hfzdg' is not ready: condition "Ready": condition is not ready with reason "MachineInitializing", message "Wait for the control plane machine "gke-admin-hfzdg-6598459f9zb647c8-0\" to be rebooted"...
Para identificar o sintoma, execute o comando abaixo para acessar o registro no gerenciador de controladores do Cloud do vSphere no cluster de administrador:
kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n kube-system
Confira um exemplo de mensagem de erro do comando acima:
node name: 81ff17e25ec6-qual-335-1500f723 has a different uuid. Skip deleting this node from cache.
Alternativa:
-
Reinicie a máquina com falha para recriar o objeto de nó excluído.
-
Conecte-se por SSH a cada nó do plano de controle e reinicie o pod estático do gerenciador de controladores do Cloud do vSphere:
sudo crictl ps | grep vsphere-cloud-controller-manager | awk '{print $1}'
sudo crictl stop PREVIOUS_COMMAND_OUTPUT
-
Execute novamente o comando de upgrade/update.
|
Operação |
1.16 |
Um nome de host duplicado no mesmo data center causa falhas na criação ou no upgrade do cluster
Não será possível fazer upgrade de um cluster 1.15 ou criar um cluster 1.16 com IPs estáticos se houver nomes de host duplicados no mesmo data center. Essa falha acontece porque o
gerenciador de controladores do Cloud do vSphere não adiciona um IP externo e um ID de provedor
ao objeto do nó. Isso faz com que o upgrade/criação do cluster atinja o tempo limite.
Para identificar o problema, consiga os registros do pod do gerenciador de controladores do Cloud do vSphere
referentes ao cluster. O comando usado depende do tipo de cluster, da seguinte maneira:
- Cluster de administrador:
kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n kube-system
- Cluster de usuário (kubeception):
kubectl get pods --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAME | grep vsphere-cloud-controller-manager
kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAME
- Cluster de usuário: (Controlplane V2):
kubectl get pods --kubeconfig USER_KUBECONFIG -n kube-system | grep vsphere-cloud-controller-manager
kubectl logs -f vsphere-cloud-controller-manager-POD_NAME_SUFFIX --kubeconfig USER_KUBECONFIG -n kube-system
Este é um exemplo de mensagem de erro:
I1003 17:17:46.769676 1 search.go:152] Finding node admin-vm-2 in vc=vcsa-53598.e5c235a1.asia-northeast1.gve.goog and datacenter=Datacenter
E1003 17:17:46.771717 1 datacenter.go:111] Multiple vms found VM by DNS Name. DNS Name: admin-vm-2
Verifique se o nome do host está duplicado no data center:
Use a abordagem a seguir para verificar se o nome do host está duplicado e fazer uma solução alternativa, se necessário.
export GOVC_DATACENTER=GOVC_DATACENTER
export GOVC_URL=GOVC_URL
export GOVC_USERNAME=GOVC_USERNAME
export GOVC_PASSWORD=GOVC_PASSWORD
export GOVC_INSECURE=true
govc find . -type m -guest.hostName HOSTNAME
Exemplos de comandos e saída:
export GOVC_DATACENTER=mtv-lifecycle-vc01
export GOVC_URL=https://mtv-lifecycle-vc01.anthos/sdk
export GOVC_USERNAME=xxx
export GOVC_PASSWORD=yyy
export GOVC_INSECURE=true
govc find . -type m -guest.hostName f8c3cd333432-lifecycle-337-xxxxxxxz
./vm/gke-admin-node-6b7788cd76-wkt8g
./vm/gke-admin-node-6b7788cd76-99sg2
./vm/gke-admin-master-5m2jb
A solução alternativa depende da operação que falhou.
Solução alternativa para upgrades:
Siga a solução alternativa para o tipo de cluster aplicável.
- Cluster de usuário:
-
Atualize o nome do host da máquina afetada em user-ip-block.yaml para um nome exclusivo e acione uma atualização forçada:
gkectl update cluster --kubeconfig ADMIN_KUBECONFIG --config NEW_USER_CLUSTER_CONFIG --force
-
Executar
gkectl upgrade cluster novamente
- Cluster de administrador:
- Atualize o nome do host da máquina afetada em admin-ip-block.yaml para um nome exclusivo e acione uma atualização forçada:
gkectl update admin --kubeconfig ADMIN_KUBECONFIG --config NEW_ADMIN_CLUSTER_CONFIG --force --skip-cluster-ready-check
- Se for um cluster de administrador sem alta disponibilidade e você descobrir que a VM mestre do administrador está usando um nome de host duplicado, também será necessário:
Receber o nome da máquina mestre do administrador
kubectl get machine --kubeconfig ADMIN_KUBECONFIG -owide -A
Atualizar o objeto da máquina mestre do administrador
Observação:o NEW_ADMIN_MASTER_HOSTNAME precisa ser o mesmo que você definiu em admin-ip-block.yaml na etapa 1.
kubectl patch machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG --type='json' -p '[{"op": "replace", "path": "/spec/providerSpec/value/networkSpec/address/hostname", "value":"NEW_ADMIN_MASTER_HOSTNAME"}]'
Verifique se o nome do host está atualizado no objeto da máquina mestre do administrador:
kubectl get machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG -oyaml
kubectl get machine ADMIN_MASTER_MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG -o jsonpath='{.spec.providerSpec.value.networkSpec.address.hostname}'
- Execute novamente o upgrade do cluster de administrador com o checkpoint desativado:
gkectl upgrade admin --kubeconfig ADMIN_KUBECONFIG --config ADMIN_CLUSTER_CONFIG --disable-upgrade-from-checkpoint
Solução alternativa para instalações:
Siga a solução alternativa para o tipo de cluster aplicável.
|
Operação |
1.16.0, 1.16.1, 1.16.2 e 1.16.3 |
$ e ` não são compatíveis com o nome de usuário ou a senha do vSphere
As operações a seguir falham quando o nome de usuário ou a senha do vSphere
contém $ ou ` :
- Como fazer upgrade de um cluster de usuário 1.15 com o Controlplane V2 ativado para a versão 1.16
- Como fazer upgrade de um cluster de administrador de alta disponibilidade (HA) 1.15 para 1.16
- Como criar um cluster de usuário 1.16 com o Controlplane V2 ativado
- Como criar um cluster de administrador de alta disponibilidade 1.16
Use uma versão 1.16.4 ou mais recente do GKE no VMware com a correção ou execute a solução alternativa abaixo. A solução alternativa depende da operação que falhou.
Solução alternativa para upgrades:
- Altere o nome de usuário ou a senha do vCenter no lado do vCenter para remover
$ e ` .
- Atualize o nome de usuário ou a senha do vCenter no
arquivo de
configuração de credenciais.
- Acionar uma atualização forçada do cluster.
- Cluster de usuário:
gkectl update cluster --kubeconfig ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG --force
- Cluster de administrador:
gkectl update admin --kubeconfig ADMIN_KUBECONFIG --config ADMIN_CLUSTER_CONFIG --force --skip-cluster-ready-check
Solução alternativa para instalações:
- Altere o nome de usuário ou a senha do vCenter no lado do vCenter para remover
$ e ` .
- Atualize o nome de usuário ou a senha do vCenter no
arquivo de
configuração de credenciais.
- Siga a solução alternativa para o tipo de cluster aplicável.
|
Armazenamento |
1.11+, 1.12+, 1.13+, 1.14+, 1.15+, 1.16 |
Falha na criação do PVC após o nó ser recriado com o mesmo nome
Depois que um nó é excluído e recriado com o mesmo nome, há uma pequena chance de que uma criação subsequente de PersistentVolumeClaim (PVC) falhe com um erro como este:
The object 'vim.VirtualMachine:vm-988369' has already been deleted or has not been completely created
Isso é causado por uma disputa em que o controlador CSI do vSphere não exclui uma máquina removida do cache.
Alternativa:
Reinicie os pods do controlador CSI do vSphere:
kubectl rollout restart vsphere-csi-controller -n kube-system --kubeconfig KUBECONFIG
|
Operação |
1.16.0 |
O administrador-master do reparo do gkectl retorna o erro de unmarshall do kubeconfig
Quando você executa o comando gkectl repair admin-master em um cluster de
administrador de alta disponibilidade, gkectl retorna a seguinte mensagem de erro:
Exit with error: Failed to repair: failed to select the template: failed to get cluster name from kubeconfig, please contact Google support. failed to decode kubeconfig data: yaml: unmarshal errors:
line 3: cannot unmarshal !!seq into map[string]*api.Cluster
line 8: cannot unmarshal !!seq into map[string]*api.Context
Alternativa:
Adicione a sinalização --admin-master-vm-template= ao comando e
forneça o modelo de VM da máquina a ser reparada:
gkectl repair admin-master --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \
--config ADMIN_CLUSTER_CONFIG_FILE \
--admin-master-vm-template=/DATA_CENTER/vm/VM_TEMPLATE_NAME
Para encontrar o modelo de VM da máquina:
- Acesse a página Hosts e clusters no cliente vSphere.
- Clique em Modelos de VM e filtre pelo nome do cluster de administrador.
Você verá os três modelos de VM do cluster de administrador.
- Copie o nome do modelo de VM que corresponde ao nome da máquina
que você está reparando e use esse nome no comando de reparo.
gkectl repair admin-master \
--config=/home/ubuntu/admin-cluster.yaml \
--kubeconfig=/home/ubuntu/kubeconfig \
--admin-master-vm-template=/atl-qual-vc07/vm/gke-admin-98g94-zx...7vx-0-tmpl
|
Rede |
1.10.0+, 1.11.0+, 1.12.0+, 1.13.0+, 1.14.0-1.14.7, 1.15.0-1.15.3, 1.16.0 |
VM do Seesaw corrompida por falta de espaço em disco
Se você usar o Seesaw como o tipo de balanceador de carga para o cluster e perceber
que uma VM do Seesaw está inativa ou falha na inicialização, talvez receba a seguinte mensagem de
erro no console do vSphere:
GRUB_FORCE_PARTUUID set, initrdless boot failed. Attempting with initrd
Esse erro indica que há pouco espaço em disco na VM porque o bit fluente
em execução na VM do Seesaw não está configurado com a rotação de registro correta.
Alternativa:
Use du -sh -- /var/lib/docker/containers/* | sort -rh para localizar os arquivos de registro que consomem a maior parte do espaço em disco. Limpe o arquivo de registro com o maior tamanho e reinicie a VM.
Observação:se a VM estiver completamente inacessível, anexe o disco a uma VM que funcione (por exemplo, estação de trabalho do administrador), remova o arquivo do disco anexado e reconecte o disco à VM original do Seesaw.
Para evitar que o problema ocorra novamente, conecte-se à VM e modifique o arquivo /etc/systemd/system/docker.fluent-bit.service . Adicione --log-opt max-size=10m --log-opt max-file=5 ao comando do Docker e execute systemctl restart docker.fluent-bit.service
|
Operação |
1.13, 1.14.0-1.14.6, 1.15 |
Erro de chave pública SSH de administrador após upgrade ou atualização de cluster de administrador
Quando você tentar fazer upgrade (gkectl upgrade admin ) ou atualizar
(gkectl update admin ) um cluster de administrador que não seja de alta disponibilidade
com o checkpoint ativado, poderá ocorrer uma falha com erros como estes:
Checking admin cluster certificates...FAILURE
Reason: 20 admin cluster certificates error(s).
Unhealthy Resources:
AdminMaster clusterCA bundle: failed to get clusterCA bundle on admin master, command [ssh -o IdentitiesOnly=yes -i admin-ssh-key -o StrictHostKeyChecking=no -o ConnectTimeout=30 ubuntu@AdminMasterIP -- sudo cat /etc/kubernetes/pki/ca-bundle.crt] failed with error: exit status 255, stderr: Authorized uses only. All activity may be monitored and reported.
ubuntu@AdminMasterIP: Permission denied (publickey).
failed to ssh AdminMasterIP, failed with error: exit status 255, stderr: Authorized uses only. All activity may be monitored and reported.
ubuntu@AdminMasterIP: Permission denied (publickey)
error dialing ubuntu@AdminMasterIP: failed to establish an authenticated SSH connection: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey]...
Alternativa:
Se não for possível fazer upgrade para uma versão de patch do GKE no VMware com a correção,
entre em contato com o Suporte do Google para receber ajuda.
|
Upgrades |
1.13.0-1.13.9, 1.14.0-1.14.6, 1.15.1-1.15.2 |
O upgrade de um cluster de administrador registrado na API GKE On-Prem pode falhar
Quando um cluster de administrador é registrado na API GKE On-Prem, o upgrade dele
para as versões afetadas pode falhar porque não foi possível atualizar a assinatura da frota. Quando essa falha acontece, você vê o seguinte erro ao tentar fazer upgrade do cluster:
failed to register cluster: failed to apply Hub Membership: Membership API request failed: rpc error: code = InvalidArgument desc = InvalidFieldError for field endpoint.on_prem_cluster.resource_link: field cannot be updated
Um cluster de administrador é registrado na API quando você
registra explicitamente
o cluster ou quando você faz upgrade
de um cluster de usuário usando um cliente da API GKE On-Prem.
Alternativa:
Cancele a inscrição do cluster de administrador:
gcloud alpha container vmware admin-clusters unenroll ADMIN_CLUSTER_NAME --project CLUSTER_PROJECT --location=CLUSTER_LOCATION --allow-missing
e retome o
upgrade do cluster de administrador. Talvez você veja o erro "Falha ao registrar o cluster" desatualizado temporariamente. Depois de um tempo, ele é atualizado automaticamente.
|
Upgrades e atualizações |
1.13.0-1.13.9, 1.14.0-1.14.4, 1.15.0 |
A anotação do link de recurso do cluster de administrador registrado não é preservada
Quando um cluster de administrador é registrado na API GKE On-Prem, a anotação do link do recurso é aplicada ao recurso personalizado OnPremAdminCluster , que não é preservado durante as atualizações posteriores do cluster de administrador, devido ao uso de uma chave de anotação incorreta. Isso pode fazer com que o cluster de administrador seja
registrado na API GKE On-Prem novamente por engano.
Um cluster de administrador é registrado na API quando você
registra explicitamente
o cluster ou quando você faz upgrade
de um cluster de usuário usando um cliente da API GKE On-Prem.
Alternativa:
Cancele a inscrição do cluster de administrador:
gcloud alpha container vmware admin-clusters unenroll ADMIN_CLUSTER_NAME --project CLUSTER_PROJECT --location=CLUSTER_LOCATION --allow-missing
e reinscreva
o cluster de administrador novamente.
|
Rede |
1.15.0-1.15.2 |
orderPolicy do CoreDNS não foi reconhecido
OrderPolicy não é reconhecido como um parâmetro e não é usado. Em vez disso, o GKE no VMware sempre usa Random .
Esse problema ocorre porque o modelo CoreDNS não foi atualizado, o que faz com que orderPolicy seja ignorado.
Alternativa:
Atualize o modelo CoreDNS e aplique a correção. Essa correção persiste até um upgrade.
- Edite o modelo atual:
kubectl edit cm -n kube-system coredns-template
Substitua o conteúdo do modelo pelo seguinte:
coredns-template: |-
.:53 {
errors
health {
lameduck 5s
}
ready
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
{{- if .PrivateGoogleAccess }}
import zones/private.Corefile
{{- end }}
{{- if .RestrictedGoogleAccess }}
import zones/restricted.Corefile
{{- end }}
prometheus :9153
forward . {{ .UpstreamNameservers }} {
max_concurrent 1000
{{- if ne .OrderPolicy "" }}
policy {{ .OrderPolicy }}
{{- end }}
}
cache 30
{{- if .DefaultDomainQueryLogging }}
log
{{- end }}
loop
reload
loadbalance
}{{ range $i, $stubdomain := .StubDomains }}
{{ $stubdomain.Domain }}:53 {
errors
{{- if $stubdomain.QueryLogging }}
log
{{- end }}
cache 30
forward . {{ $stubdomain.Nameservers }} {
max_concurrent 1000
{{- if ne $.OrderPolicy "" }}
policy {{ $.OrderPolicy }}
{{- end }}
}
}
{{- end }}
|
Upgrades e atualizações |
1.10, 1.11, 1.12, 1.13.0-1.13.7, 1.14.0-1.14.3 |
Status OnPremAdminCluster inconsistente entre o checkpoint e a CR real
Certas disputas podem fazer com que o status OnPremAdminCluster seja inconsistente entre o checkpoint e a resposta automática real. Quando o problema acontece, é possível encontrar o seguinte erro ao atualizar o cluster de administrador após o upgrade:
Exit with error:
E0321 10:20:53.515562 961695 console.go:93] Failed to update the admin cluster: OnPremAdminCluster "gke-admin-rj8jr" is in the middle of a create/upgrade ("" -> "1.15.0-gke.123"), which must be completed before it can be updated
Failed to update the admin cluster: OnPremAdminCluster "gke-admin-rj8jr" is in the middle of a create/upgrade ("" -> "1.15.0-gke.123"), which must be completed before it can be updated
Para contornar esse problema, você precisa editar o checkpoint ou desativá-lo para upgrade/atualização. Entre em contato com nossa equipe de suporte para continuar com a solução.
|
Operação |
1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 |
O processo de reconciliação altera os certificados de administrador nos clusters de administrador
O GKE no VMware altera os certificados de administrador nos planos de controle do cluster de administrador
a cada processo de reconciliação, como durante um upgrade de cluster. Esse comportamento
aumenta a possibilidade de receber certificados inválidos para o cluster de administrador,
principalmente para clusters da versão 1.15.
Se esse problema afetar você, talvez encontre problemas como
estes:
- Certificados inválidos podem fazer com que os seguintes comandos atinjam o tempo limite e
retornem erros:
gkectl create admin
gkectl upgrade amdin
gkectl update admin
Esses comandos podem retornar erros de autorização, como:
Failed to reconcile admin cluster: unable to populate admin clients: failed to get admin controller runtime client: Unauthorized
- Os registros
kube-apiserver do cluster de administrador podem conter erros
como os seguintes:
Unable to authenticate the request" err="[x509: certificate has expired or is not yet valid...
Alternativa:
Faça upgrade para uma versão do GKE no VMware com a correção:
1.13.10+, 1.14.6+, 1.15.2+.
Se não for possível fazer o upgrade, entre em contato com o Cloud Customer Care para resolver esse problema.
|
Rede, operação |
1.10, 1.11, 1.12, 1.13, 1.14 |
Componentes do gateway de rede do Anthos removidos ou pendentes devido à
classe de prioridade ausente
Os pods do gateway de rede em kube-system podem mostrar um status
Pending ou Evicted , conforme o exemplo de saída
condensada a seguir:
$ kubectl -n kube-system get pods | grep ang-node
ang-node-bjkkc 2/2 Running 0 5d2h
ang-node-mw8cq 0/2 Evicted 0 6m5s
ang-node-zsmq7 0/2 Pending 0 7h
Esses erros indicam eventos de remoção ou impossibilidade de programar pods
devido a recursos de nó. Como os pods do gateway de rede do Anthos não têm
PriorityClass, eles têm a mesma prioridade padrão que outras cargas de trabalho.
Quando os nós têm recursos restritos, os pods do gateway de rede podem ser
removidos. Esse comportamento é especialmente ruim para o DaemonSet ang-node ,
porque esses pods precisam ser programados em um nó específico e não podem ser
migrados.
Alternativa:
Faça upgrade para a versão 1.15 ou posterior.
Como correção de curto prazo, é possível atribuir manualmente uma
PriorityClass
aos componentes do gateway de rede do Anthos. O controlador do GKE no VMware substitui essas alterações manuais durante um processo de reconciliação, como durante um upgrade de cluster.
- Atribua a PriorityClass
system-cluster-critical às
implantações do controlador de
cluster ang-controller-manager e autoscaler .
- Atribua a PriorityClass
system-node-critical ao
DaemonSet do nó ang-daemon .
|
Upgrades e atualizações |
1.12, 1.13, 1.14, 1.15.0-1.15.2 |
falha no upgrade do cluster de administrador após o registro do cluster no gcloud
Depois de usar gcloud para registrar um cluster de administrador com a seção gkeConnect não vazia, talvez você encontre o seguinte erro ao tentar fazer upgrade do cluster:
failed to register cluster: failed to apply Hub Mem\
bership: Membership API request failed: rpc error: code = InvalidArgument desc = InvalidFieldError for field endpoint.o\
n_prem_cluster.admin_cluster: field cannot be updated
Exclua o namespace gke-connect :
kubectl delete ns gke-connect --kubeconfig=ADMIN_KUBECONFIG
Consiga o nome do cluster de administrador:
kubectl get onpremadmincluster -n kube-system --kubeconfig=ADMIN_KUBECONFIG
Exclua a assinatura da frota:
gcloud container fleet memberships delete ADMIN_CLUSTER_NAME
e retome o upgrade do cluster de administrador.
|
Operação |
1.13.0-1.13.8, 1.14.0-1.14.5, 1.15.0-1.15.1 |
gkectl diagnose snapshot --log-since falha ao limitar a janela de tempo para comandos journalctl em execução nos nós do cluster
Isso não afeta a funcionalidade de tirar um snapshot do cluster, já que o snapshot ainda inclui todos os registros coletados por padrão ao executar journalctl nos nós do cluster. Portanto, nenhuma informação de depuração é perdida.
|
Instalação, upgrades e atualizações |
1.9+, 1.10+, 1.11+, 1.12+ |
gkectl prepare windows falha
gkectl prepare windows falha ao instalar o Docker no
GKE em versões do VMware anteriores à 1.13 porque
MicrosoftDockerProvider
foi descontinuado.
Alternativa:
A ideia geral para solucionar esse problema é fazer upgrade para o GKE no VMware 1.13
e usar a gkectl 1.13 para criar um modelo de VM do Windows e depois os
pools de nós do Windows. Há duas opções para acessar o GKE no VMware 1.13 da versão atual, conforme mostrado abaixo.
Observação: temos opções para resolver esse problema na sua versão atual sem precisar fazer upgrade para a versão 1.13, mas serão necessárias mais etapas manuais. Entre em contato com nossa equipe de suporte se quiser considerar essa opção.
Opção 1: upgrade azul/verde
É possível criar um novo cluster usando a versão 1.13 ou mais recente do GKE no VMware com pools de nós do Windows,
migrar as cargas de trabalho para o novo cluster e desmontar o
atual. É recomendável usar a versão secundária mais recente do GKE no VMware.
Observação: isso exigirá recursos extras para provisionar o novo cluster, mas menos inatividade e interrupção para as cargas de trabalho existentes.
Opção 2: excluir os pools de nós do Windows e adicioná-los novamente ao
fazer upgrade para o GKE no VMware 1.13
Observação: para essa opção, as cargas de trabalho do Windows não poderão ser executadas até que o cluster seja atualizado para a versão 1.13 e os pools de nós do Windows sejam adicionados novamente.
- Exclua os pools de nós atuais do Windows removendo a configuração deles
do arquivo user-cluster.yaml e execute o comando:
gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE
- Faça upgrade dos clusters de administrador+usuário exclusivos do Linux para a versão 1.12 seguindo o guia do usuário para upgrade para a versão secundária de destino correspondente.
- (Siga esta etapa antes de fazer upgrade para a versão 1.13) Verifique se o
enableWindowsDataplaneV2: true está configurado na resposta automática OnPremUserCluster .Caso contrário, o cluster continuará usando o Docker para pools de nós do Windows, que não serão compatíveis com o Modelo de VM 1.13 recém-criado que não tem o Docker instalado. Se a política não for definida ou for definida como falsa, atualize o cluster para defini-lo como verdadeiro no user-cluster.yaml e execute:
gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE
- Faça upgrade dos clusters de administrador+usuário exclusivos do Linux para a versão 1.13 seguindo o guia do usuário para upgrade.
- Prepare o modelo de VM do Windows usando gkectl 1.13:
gkectl prepare windows --base-vm-template BASE_WINDOWS_VM_TEMPLATE_NAME --bundle-path 1.13_BUNDLE_PATH --kubeconfig=ADMIN_KUBECONFIG
- Adicione novamente a configuração do pool de nós do Windows ao user-cluster.yaml com o campo
OSImage definido como o modelo de VM recém-criado do Windows.
- Atualize o cluster para adicionar pools de nós do Windows
gkectl update cluster --kubeconfig=ADMIN_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE
|
Instalação, upgrades e atualizações |
1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 |
A configuração RootDistanceMaxSec não está em vigor para
nós ubuntu
O valor padrão de 5 segundos para RootDistanceMaxSec será usado nos nós, em vez de 20 segundos, que seria a configuração esperada. Se você verificar o registro de inicialização do nó usando SSH na VM, localizada em `/var/log/startup.log`, poderá encontrar o seguinte erro:
+ has_systemd_unit systemd-timesyncd
/opt/bin/master.sh: line 635: has_systemd_unit: command not found
O uso de um RootDistanceMaxSec de cinco segundos pode fazer com que o relógio do sistema fique fora de sincronia com o servidor NTP quando o deslocamento do relógio for maior que cinco segundos.
Alternativa:
Aplique o DaemonSet a seguir ao cluster para configurar RootDistanceMaxSec :
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: change-root-distance
namespace: kube-system
spec:
selector:
matchLabels:
app: change-root-distance
template:
metadata:
labels:
app: change-root-distance
spec:
hostIPC: true
hostPID: true
tolerations:
# Make sure pods gets scheduled on all nodes.
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
containers:
- name: change-root-distance
image: ubuntu
command: ["chroot", "/host", "bash", "-c"]
args:
- |
while true; do
conf_file="/etc/systemd/timesyncd.conf.d/90-gke.conf"
if [ -f $conf_file ] && $(grep -q "RootDistanceMaxSec=20" $conf_file); then
echo "timesyncd has the expected RootDistanceMaxSec, skip update"
else
echo "updating timesyncd config to RootDistanceMaxSec=20"
mkdir -p /etc/systemd/timesyncd.conf.d
cat > $conf_file << EOF
[Time]
RootDistanceMaxSec=20
EOF
systemctl restart systemd-timesyncd
fi
sleep 600
done
volumeMounts:
- name: host
mountPath: /host
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
|
Upgrades e atualizações |
1.12.0-1.12.6, 1.13.0-1.13.6, 1.14.0-1.14.2 |
gkectl update admin falha devido a um campo osImageType vazio
Quando você usa a versão 1.13 gkectl para atualizar um cluster de administrador da versão 1.12, é possível ver o seguinte erro:
Failed to update the admin cluster: updating OS image type in admin cluster
is not supported in "1.12.x-gke.x"
Ao usar gkectl update admin para clusters da versão 1.13 ou 1.14, você verá a seguinte mensagem na resposta:
Exit with error:
Failed to update the cluster: the update contains multiple changes. Please
update only one feature at a time
Se você verificar o registro gkectl , verá que as várias alterações incluem a configuração de osImageType de uma string vazia para ubuntu_containerd .
Esses erros de atualização ocorrem devido ao preenchimento incorreto do campo osImageType na configuração do cluster de administrador desde que ele foi introduzido na versão 1.9.
Alternativa:
Faça upgrade para uma versão do GKE no VMware com a correção. Se o upgrade não for possível, entre em contato com o Cloud Customer Care para resolver esse problema.
|
Instalação, segurança |
1,13, 1,14, 1,15 e 1,16 |
A SNI não funciona em clusters de usuários com o Controlplane V2
A capacidade de fornecer um certificado de atendimento extra para o servidor da API Kubernetes de um cluster de usuário com authentication.sni não funciona quando o Controlplane V2 está ativado (enableControlplaneV2: true ).
Alternativa:
Até que um patch do GKE no VMware esteja disponível com a correção, se
você precisar usar a SNI, desative o Controlplane V2 (enableControlplaneV2: false ).
|
Instalação |
1.0-1.11, 1.12, 1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 |
$ no nome de usuário do registro particular causa falha na inicialização da máquina do plano de controle de administrador
A máquina do plano de controle de administrador não é iniciada quando o nome de usuário do registro particular contém $ .
Ao verificar o /var/log/startup.log na máquina do plano de controle do administrador, você vê o
seguinte erro:
++ REGISTRY_CA_CERT=xxx
++ REGISTRY_SERVER=xxx
/etc/startup/startup.conf: line 7: anthos: unbound variable
Alternativa:
Use um nome de usuário de registro particular sem $ ou use uma versão do GKE no VMware com
a correção.
|
Upgrades e atualizações |
1.12.0-1.12.4 |
Avisos de falso positivo sobre alterações não compatíveis durante a atualização do cluster de administrador
Ao atualizar clusters de administrador, você verá os seguintes avisos de falso positivo no registro e poderá ignorá-los.
console.go:47] detected unsupported changes: &v1alpha1.OnPremAdminCluster{
...
- CARotation: &v1alpha1.CARotationConfig{Generated: &v1alpha1.CARotationGenerated{CAVersion: 1}},
+ CARotation: nil,
...
}
|
Upgrades e atualizações |
1.13.0-1.13.9, 1.14.0-1.14.5, 1.15.0-1.15.1 |
Falha ao atualizar cluster de usuário após rotação de chaves de assinatura KSA
Depois de alternar
as chaves de assinatura KSA e, em seguida,
atualizar um cluster de usuário, gkectl update pode falhar com a
seguinte mensagem de erro:
Failed to apply OnPremUserCluster 'USER_CLUSTER_NAME-gke-onprem-mgmt/USER_CLUSTER_NAME':
admission webhook "vonpremusercluster.onprem.cluster.gke.io" denied the request:
requests must not decrement *v1alpha1.KSASigningKeyRotationConfig Version, old version: 2, new version: 1"
Alternativa:
Altere a versão da chave de assinatura KSA novamente para 1, mas retenha os dados mais recentes da chave:
- Verifique o secret no cluster de administrador no namespace
USER_CLUSTER_NAME e veja o nome do secret ksa-signing-key:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME get secrets | grep ksa-signing-key
- Copie o secret ksa-signing-key e nomeie-o como service-account-cert:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME get secret KSA-KEY-SECRET-NAME -oyaml | \
sed 's/ name: .*/ name: service-account-cert/' | \
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME apply -f -
- Exclua o secret ksa-signing-key anterior:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME delete secret KSA-KEY-SECRET-NAME
- Atualize o campo
data.data no configmap ksa-signing-key-rotation-stage para '{"tokenVersion":1,"privateKeyVersion":1,"publicKeyVersions":[1]}' :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME \
edit configmap ksa-signing-key-rotation-stage
- Desative o webhook de validação para editar as informações da versão no recurso personalizado OnPremUserCluster:
kubectl --kubeconfig=ADMIN_KUBECONFIG patch validatingwebhookconfiguration onprem-user-cluster-controller -p '
webhooks:
- name: vonpremnodepool.onprem.cluster.gke.io
rules:
- apiGroups:
- onprem.cluster.gke.io
apiVersions:
- v1alpha1
operations:
- CREATE
resources:
- onpremnodepools
- name: vonpremusercluster.onprem.cluster.gke.io
rules:
- apiGroups:
- onprem.cluster.gke.io
apiVersions:
- v1alpha1
operations:
- CREATE
resources:
- onpremuserclusters
'
- Atualize o campo
spec.ksaSigningKeyRotation.generated.ksaSigningKeyRotation para 1 no recurso personalizado OnPremUserCluster:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
edit onpremusercluster USER_CLUSTER_NAME
- Aguarde até que o cluster de usuário de destino esteja pronto. É possível verificar o status usando:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=USER_CLUSTER_NAME-gke-onprem-mgmt \
get onpremusercluster
- Restaure o webhook de validação do cluster de usuário:
kubectl --kubeconfig=ADMIN_KUBECONFIG patch validatingwebhookconfiguration onprem-user-cluster-controller -p '
webhooks:
- name: vonpremnodepool.onprem.cluster.gke.io
rules:
- apiGroups:
- onprem.cluster.gke.io
apiVersions:
- v1alpha1
operations:
- CREATE
- UPDATE
resources:
- onpremnodepools
- name: vonpremusercluster.onprem.cluster.gke.io
rules:
- apiGroups:
- onprem.cluster.gke.io
apiVersions:
- v1alpha1
operations:
- CREATE
- UPDATE
resources:
- onpremuserclusters
'
- Evite fazer outra rotação de chaves de assinatura KSA até o cluster fazer upgrade para a versão com a correção.
|
Operação |
1.13.1+, 1.14, 1., 1.16 |
Quando você usa o Terraform para excluir um cluster de usuário com um balanceador de carga F5 BIG-IP, os servidores virtuais F5 BIG-IP não são removidos após a exclusão do cluster.
Alternativa:
Para remover os recursos F5, siga as etapas para
limpar uma partição F5 do cluster de usuário
|
Instalação, upgrades e atualizações |
1.13.8, 1.14.4 |
cluster kind extrai imagens de contêiner de docker.io
Se você criar um cluster de administrador com a versão 1.13.8 ou 1.14.4 ou fizer upgrade dele para a versão 1.13.8 ou 1.14.4, o cluster kind extrairá as seguintes imagens de contêiner de docker.io :
docker.io/kindest/kindnetd
docker.io/kindest/local-path-provisioner
docker.io/kindest/local-path-helper
Se docker.io não estiver acessível na estação de trabalho de administrador, a criação ou o upgrade do cluster de administrador não conseguirá trazer o cluster kind.
A execução do comando a seguir na estação de trabalho de administrador mostra os contêineres correspondentes pendentes com ErrImagePull :
docker exec gkectl-control-plane kubectl get pods -A
A resposta contém entradas como estas:
...
kube-system kindnet-xlhmr 0/1
ErrImagePull 0 3m12s
...
local-path-storage local-path-provisioner-86666ffff6-zzqtp 0/1
Pending 0 3m12s
...
Essas imagens de contêiner precisam ser pré-carregadas na imagem de contêiner do cluster kind. No entanto, o kind v0.18.0 tem um problema com as imagens de contêiner pré-carregadas, que faz com que elas sejam extraídas da Internet por engano.
Alternativa:
Execute os seguintes comandos na estação de trabalho de administrador enquanto o cluster de administrador está com a criação ou o upgrade pendente:
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/kindnetd:v20230330-48f316cd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af docker.io/kindest/kindnetd:v20230330-48f316cd
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/kindnetd:v20230330-48f316cd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af docker.io/kindest/kindnetd@sha256:c19d6362a6a928139820761475a38c24c0cf84d507b9ddf414a078cf627497af
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-helper:v20230330-48f316cd@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270 docker.io/kindest/local-path-helper:v20230330-48f316cd
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-helper:v20230330-48f316cd@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270 docker.io/kindest/local-path-helper@sha256:135203f2441f916fb13dad1561d27f60a6f11f50ec288b01a7d2ee9947c36270
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-provisioner:v0.0.23-kind.0@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 docker.io/kindest/local-path-provisioner:v0.0.23-kind.0
docker exec gkectl-control-plane ctr -n k8s.io images tag docker.io/kindest/local-path-provisioner:v0.0.23-kind.0@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501 docker.io/kindest/local-path-provisioner@sha256:f2d0a02831ff3a03cf51343226670d5060623b43a4cfc4808bd0875b2c4b9501
|
Operação |
1.13.0-1.13.7, 1.14.0-1.14.4, 1.15.0 |
Falha de failover em clusters de usuário e administrador do Controlplane V2 de alta disponibilidade quando a rede filtra solicitações GARP duplicadas
Se as VMs do cluster estiverem conectadas a um switch que filtra solicitações GARP (ARP gratuitas) duplicadas, a eleição de líder de sinal de atividade pode encontrar uma disputa, o que faz com que alguns nós tenham entradas de tabela ARP incorretas.
Os nós afetados podem dar um ping no VIP do plano de controle, mas uma conexão TCP com o VIP do plano de controle expira.
Alternativa:
Execute o seguinte comando em cada nó do plano de controle do cluster afetado:
iptables -I FORWARD -i ens192 --destination CONTROL_PLANE_VIP -j DROP
|
Upgrades e atualizações |
1.13.0-1.13.7, 1.14.0-1.14.4, 1.15.0 |
O vsphere-csi-controller precisa ser reiniciado após a rotação do certificado do vCenter
vsphere-csi-controller precisa atualizar o secret do vCenter após a rotação do certificado do vCenter. No entanto, o sistema atual não reinicia corretamente os pods do vsphere-csi-controller , fazendo com que vsphere-csi-controller falhe após a rotação.
Alternativa:
Para clusters criados nas versões 1.13 e posteriores, siga as instruções abaixo para reiniciar vsphere-csi-controller
kubectl --kubeconfig=ADMIN_KUBECONFIG rollout restart deployment vsphere-csi-controller -n kube-system
|
Instalação |
1.10.3-1.10.7, 1.11, 1.12, 1.13.0-1.13.1 |
A criação do cluster de administrador não falha em erros de registro do cluster
Mesmo quando o registro de cluster falha durante a criação do cluster de administrador, o comando gkectl create admin não falha no erro e pode ser bem-sucedido. Em outras palavras, a criação do cluster de administrador pode ter "êxito" sem o registro em uma frota.
Para identificar o sintoma, procure as seguintes mensagens de erro no registro "gkectl create admin",
Failed to register admin cluster
Verifique também se encontra o cluster entre os clusters registrados no console do Cloud.
Alternativa:
Em clusters criados nas versões 1.12 e posteriores, siga as instruções para tentar novamente o registro do cluster de administrador após a criação do cluster. Para clusters criados em versões anteriores:
-
Anexe um par de chave-valor falso, como "foo: bar", ao seu arquivo de chave SA do connect-register
-
Execute
gkectl update admin para registrar novamente o cluster de administrador.
|
Upgrades e atualizações |
1.10, 1.11, 1.12, 1.13.0-1.13.1 |
O novo registro de cluster de administrador pode ser ignorado durante o upgrade do cluster de administrador
Durante o upgrade do cluster de administrador, se o upgrade dos nós do plano de controle do usuário expirar, o cluster de administrador não será registrado novamente com a versão atualizada do agente de conexão.
Alternativa:
Verifique se o cluster é exibido entre os clusters registrados.
Como etapa opcional, faça login no cluster após configurar a autenticação. Se o cluster ainda estiver registrado, pule as instruções a seguir sobre tentar novamente o registro.
Em clusters que fizeram upgrade para as versões 1.12 e posteriores, siga as instruções para tentar novamente o registro do cluster de administrador após a criação do cluster. Em clusters que fizeram upgrade para versões anteriores:
-
anexe um par de chave-valor falso, como "foo: bar", ao seu arquivo de chave SA do connect-register;
-
execute
gkectl update admin para registrar novamente o cluster de administrador.
|
Configuração |
1.15.0 |
Mensagem de erro falsa sobre vCenter.dataDisk
Para um cluster de administrador de alta disponibilidade, gkectl prepare mostra esta mensagem de erro falsa:
vCenter.dataDisk must be present in the AdminCluster spec
Alternativa:
Você pode ignorar esse erro com segurança.
|
VMware |
1.15.0 |
A criação do pool de nós falha devido a regras de afinidade redundantes de VM e host
Durante a criação de um pool de nós que usa
Afinidade de VM-host , uma disputa pode resultar em várias Regras de afinidade de VM-host
sendo criadas com o mesmo nome. Isso pode causar falha na criação do pool de nós.
Alternativa:
Remova as regras redundantes antigas para que a criação do pool de nós possa continuar.
Essas regras se chamam [USER_CLUSTER_NAME]-[HASH].
|
Operação |
1.15.0 |
gkectl repair admin-master pode falhar devido a failed
to delete the admin master node object and reboot the admin master VM
O comando gkectl repair admin-master pode falhar devido a uma disputa com o seguinte erro.
Failed to repair: failed to delete the admin master node object and reboot the admin master VM
Alternativa:
Esse comando é idempotente. Ele pode ser executado com segurança novamente até o comando ser bem-sucedido.
|
Upgrades e atualizações |
1.15.0 |
Os pods permanecem no estado "Falha" ao recriar ou atualizar um nó do plano de controle
Depois de recriar ou atualizar um nó do plano de controle, alguns pods podem ser deixados no estado Failed devido a uma falha no predicado do NodeAffinity. Esses pods com falha não afetam a integridade ou as operações normais do cluster.
Alternativa:
É possível ignorar com segurança os pods com falha ou excluí-los manualmente.
|
Segurança, configuração |
1.15.0-1.15.1 |
O OnPremUserCluster não está pronto devido a credenciais de registro particulares
Se você usar
credenciais preparadas
e um registro particular, mas não tiver configurado credenciais preparadas para
seu registro particular, talvez o OnPremUserCluster não esteja pronto e
você verá a seguinte mensagem de erro:
failed to check secret reference for private registry …
Alternativa:
Prepare as credenciais do registro particular para o cluster de usuário de acordo com as instruções em Configurar credenciais preparadas.
|
Upgrades e atualizações |
1.15.0 |
Durante gkectl upgrade admin , a verificação de simulação de armazenamento para a CSI Migration verifica se o StorageClasses não tem parâmetros que são ignorados após a CSI Migration.
Por exemplo, se houver um StorageClass com o parâmetro diskformat , gkectl upgrade admin sinalizará o StorageClass e relatará uma falha na validação de simulação.
Os clusters de administrador criados no GKE no VMware 1.10 e anteriores têm um StorageClass com diskformat: thin
que vai falhar nessa validação. No entanto, esse StorageClass ainda funciona
bem após a migração do CSI. Essas falhas precisam ser interpretadas como alertas.
Para mais informações, consulte a seção do parâmetro StorageClass em Como migrar volumes do vSphere em árvore para o plug-in vSphere Container Storage.
Alternativa:
Depois de confirmar que seu cluster tem um StorageClass com parâmetros ignorados depois da CSI Migration, execute gkectl upgrade admin com a flag --skip-validation-cluster-health .
|
Armazenamento |
1,15, 1,16 |
Os volumes migrados do vSphere em árvore usando o sistema de arquivos do Windows não podem ser usados com o driver CSI do vSphere
Em determinadas condições, os discos podem ser anexados como somente leitura aos nós do Windows. Isso faz com que o volume correspondente seja somente leitura dentro de um pod.
É mais provável que esse problema ocorra quando um novo conjunto de nós substitui um conjunto antigo (por exemplo, upgrade de cluster ou atualização de pool de nós). As cargas de trabalho com estado que anteriormente funcionavam bem podem não conseguir gravar nos respectivos volumes no novo conjunto de nós.
Alternativa:
-
Receba o UID do pod que não consegue gravar no volume:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pod \
POD_NAME --namespace POD_NAMESPACE \
-o=jsonpath='{.metadata.uid}{"\n"}'
-
Use o PersistentVolumeClaim para conseguir o nome do PersistentVolume:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pvc \
PVC_NAME --namespace POD_NAMESPACE \
-o jsonpath='{.spec.volumeName}{"\n"}'
-
Determine o nome do nó em que o pod está sendo executado:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIGget pods \
--namespace POD_NAMESPACE \
-o jsonpath='{.spec.nodeName}{"\n"}'
-
Consiga acesso ao nó via PowerShell, seja por SSH ou pela interface da Web do vSphere.
-
Defina as variáveis de ambiente:
PS C:\Users\administrator> pvname=PV_NAME
PS C:\Users\administrator> podid=POD_UID
- Identifique o número do disco associado ao
PersistentVolume:
PS C:\Users\administrator> disknum=(Get-Partition -Volume (Get-Volume -UniqueId ("\\?\"+(Get-Item (Get-Item
"C:\var\lib\kubelet\pods\$podid\volumes\kubernetes.io~csi\$pvname\mount").Target).Target))).DiskNumber
-
Verifique se o disco é
readonly :
PS C:\Users\administrator> (Get-Disk -Number $disknum).IsReadonly
O resultado precisa ser True .
- Defina
readonly como false .
PS C:\Users\administrator> Set-Disk -Number $disknum -IsReadonly $false
PS C:\Users\administrator> (Get-Disk -Number $disknum).IsReadonly
-
Exclua o pod para que ele seja reiniciado:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete pod POD_NAME \
--namespace POD_NAMESPACE
-
O pod precisa ser programado no mesmo nó. No entanto, se o pod for programado em um novo nó, talvez seja necessário repetir as etapas anteriores nesse novo nó.
|
Upgrades e atualizações |
1.12, 1.13.0-1.13.7, 1.14.0-1.14.4 |
vsphere-csi-secret não é atualizado após gkectl update credentials vsphere --admin-cluster
Se você atualizar as credenciais do vSphere para um cluster de administrador seguindo
a atualização das credenciais do cluster,
talvez você encontre vsphere-csi-secret no namespace kube-system no cluster de administrador que ainda usa a credencial antiga.
Alternativa:
- Consiga o nome do secret
vsphere-csi-secret :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system get secrets | grep vsphere-csi-secret
- Atualize os dados do secret
vsphere-csi-secret que você recebeu na etapa acima:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system patch secret CSI_SECRET_NAME -p \
"{\"data\":{\"config\":\"$( \
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system get secrets CSI_SECRET_NAME -ojsonpath='{.data.config}' \
| base64 -d \
| sed -e '/user/c user = \"VSPHERE_USERNAME_TO_BE_UPDATED\"' \
| sed -e '/password/c password = \"VSPHERE_PASSWORD_TO_BE_UPDATED\"' \
| base64 -w 0 \
)\"}}"
- Reiniciar
vsphere-csi-controller :
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system rollout restart deployment vsphere-csi-controller
- É possível acompanhar o status do lançamento com:
kubectl --kubeconfig=ADMIN_KUBECONFIG -n=kube-system rollout status deployment vsphere-csi-controller
Depois que a implantação for implantada, o vsphere-csi-secret atualizado deverá ser usado pelo controlador.
|
Upgrades e atualizações |
1.10, 1.11, 1.12.0-1.12.6, 1.13.0-1.13.6, 1.14.0-1.14.2 |
audit-proxy com loop de falhas ao ativar os Registros de auditoria do Cloud com gkectl update cluster
audit-proxy pode falhar em loop devido a um --cluster-name vazio.
Esse comportamento é causado por um bug na lógica de atualização, em que o nome do cluster não é propagado para o manifesto do pod/contêiner do proxy de auditoria.
Alternativa:
Em um cluster de usuário do plano de controle v2 com enableControlplaneV2: true , conecte-se à máquina do plano de controle do usuário usando SSH e atualize /etc/kubernetes/manifests/audit-proxy.yaml com --cluster_name=USER_CLUSTER_NAME .
Em um cluster de usuário do plano de controle v1, edite o contêiner audit-proxy no kube-apiserver com estado definido para adicionar --cluster_name=USER_CLUSTER_NAME :
kubectl edit statefulset kube-apiserver -n USER_CLUSTER_NAME --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
|
Upgrades e atualizações |
1.11, 1.12, 1.13.0-1.13.5, 1.14.0-1.14.1 |
Uma reimplantação do plano de controle adicional logo após gkectl upgrade cluster
Logo após gkectl upgrade cluster , os pods do plano de controle podem ser reimplantados novamente.
O estado do cluster de gkectl list clusters muda de RUNNING PARA RECONCILING .
As solicitações para o cluster de usuário podem expirar.
Esse comportamento ocorre devido à rotação automática de certificados do plano de controle após gkectl upgrade cluster .
Esse problema só acontece com clusters de usuário que NÃO usam o plano de controle v2.
Alternativa:
Aguarde o estado do cluster voltar para RUNNING novamente em gkectl list clusters ou faça upgrade para versões com a correção: 1.13.6+, 1.14.2+ ou 1.15+.
|
Upgrades e atualizações |
1.12.7 |
A versão incorreta 1.12.7-gke.19 foi removida
O GKE no VMware 1.12.7-gke.19 é uma versão incorreta,
e você não deve usá-lo. Os artefatos foram removidos do bucket do Cloud Storage.
Alternativa:
Use a versão 1.12.7-gke.20.
|
Upgrades e atualizações |
1.12.0+, 1.13.0-1.13.7, 1.14.0-1.14.3 |
O gke-connect-agent
continua usando a imagem mais antiga depois que a credencial do registro é atualizada
Se você atualizar a credencial do registro usando um dos métodos a seguir:
gkectl update credentials componentaccess se não estiver usando o registro particular
gkectl update credentials privateregistry se estiver usando o registro particular
talvez gke-connect-agent continue usando a imagem mais antiga
ou os pods gke-connect-agent não possam ser extraídos devido
a ImagePullBackOff .
Esse problema será corrigido no GKE on VMware versões 1.13.8,
1.14.4 e posteriores.
Alternativa:
Opção 1: reimplantar gke-connect-agent manualmente:
- Exclua o namespace
gke-connect :
kubectl --kubeconfig=KUBECONFIG delete namespace gke-connect
- Reimplante
gke-connect-agent com a chave da conta de serviço de registro original (não é necessário atualizar a chave):
Para o cluster de administrador:
gkectl update credentials register --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG_FILE --admin-cluster
Para o cluster de usuário:
gkectl update credentials register --kubeconfig=ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG_FILE
Opção 2: é possível alterar manualmente os dados do secret de pull da imagem
regcred , que é usado pela implantação
do gke-connect-agent :
kubectl --kubeconfig=KUBECONFIG -n=gke-connect patch secrets regcred -p "{\"data\":{\".dockerconfigjson\":\"$(kubectl --kubeconfig=KUBECONFIG -n=kube-system get secrets private-registry-creds -ojsonpath='{.data.\.dockerconfigjson}')\"}}"
Opção 3: é possível adicionar a chave secreta de pull da imagem padrão do seu cluster
à implantação gke-connect-agent :
- Copie o secret padrão para o namespace
gke-connect :
kubectl --kubeconfig=KUBECONFIG -n=kube-system get secret private-registry-creds -oyaml | sed 's/ namespace: .*/ namespace: gke-connect/' | kubectl --kubeconfig=KUBECONFIG -n=gke-connect apply -f -
- Consiga o nome da implantação de
gke-connect-agent :
kubectl --kubeconfig=KUBECONFIG -n=gke-connect get deployment | grep gke-connect-agent
- Adicione o secret padrão à implantação de
gke-connect-agent :
kubectl --kubeconfig=KUBECONFIG -n=gke-connect patch deployment DEPLOYMENT_NAME -p '{"spec":{"template":{"spec":{"imagePullSecrets": [{"name": "private-registry-creds"}, {"name": "regcred"}]}}}}'
|
Instalação |
1.13, 1.14 |
Falha na verificação de configuração do balanceador de carga manual
Quando você valida a configuração antes de criar um cluster com o balanceador de carga manual executando gkectl check-config , o comando falha com as mensagens de erro a seguir.
- Validation Category: Manual LB Running validation check for "Network
configuration"...panic: runtime error: invalid memory address or nil pointer
dereference
Alternativa:
Opção 1: é possível usar as versões de patch 1.13.7 e 1.14.4, que incluem a correção.
Opção 2: também é possível executar o mesmo comando para validar a configuração, mas pular a validação do balanceador de carga.
gkectl check-config --skip-validation-load-balancer
|
Operação |
1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13 e 1.14 |
privação do relógio no etcd
Os clusters que executam o etcd versão 3.4.13 ou anterior podem apresentar privação do relógio e relógios de recursos não operacionais, que podem causar os seguintes problemas:
- A programação do pod é interrompida
- Não é possível registrar nós
- O kubelet não observa mudanças no pod
Esses problemas podem tornar o cluster não funcional.
Esse problema foi corrigido no GKE on VMware versões 1.12.7, 1.13.6,
1.14.3 e versões posteriores. Essas versões mais recentes usam o etcd versão 3.4.21. Todas as versões anteriores do GKE na VMware foram afetadas por
esse problema.
Alternativa
Se não for possível fazer upgrade imediatamente, reduza o risco de falha do cluster diminuindo seu número de nós. Remova os nós até que a métrica etcd_network_client_grpc_sent_bytes_total seja inferior a 300 MBps.
Para visualizar essa métrica no Metrics Explorer:
- Acesse o Metrics Explorer no Console do Google Cloud:
Acessar o Metrics Explorer
- Selecione a guia Configuração.
- Expanda Selecionar uma métrica, insira
Kubernetes Container na barra de filtros e use os submenus para selecionar a métrica:
- No menu Recursos ativos, selecione Contêiner do Kubernetes.
- No menu Categorias de métricas ativas, selecione Anthos.
- No menu Métricas ativas, selecione
etcd_network_client_grpc_sent_bytes_total .
- Clique em Aplicar.
|
Upgrades e atualizações |
1.10, 1.11, 1.12, 1.13 e 1.14 |
O serviço de identidade do GKE pode causar latências do plano de controle
Nas reinicializações ou upgrades do cluster, o serviço de identidade do GKE pode ficar sobrecarregado com tráfego que consiste em tokens JWT expirados encaminhados do
kube-apiserver para o serviço de identidade do GKE pelo
webhook de autenticação. Embora o serviço de identidade do GKE não
faça um loop de falhas, ele não responde e não exibe mais solicitações.
Esse problema acaba gerando latências maiores no plano de controle.
Esse problema foi corrigido nas seguintes versões do GKE on VMware:
Para determinar se esse problema está afetando você, execute as seguintes etapas:
- Verifique se o endpoint do serviço de identidade do GKE pode ser acessado externamente:
curl -s -o /dev/null -w "%{http_code}" \
-X POST https://CLUSTER_ENDPOINT/api/v1/namespaces/anthos-identity-service/services/https:ais:https/proxy/authenticate -d '{}'
Substitua CLUSTER_ENDPOINT pela porta do balanceador de carga e VIP do plano de controle para o cluster (por exemplo, 172.16.20.50:443 ).
Se esse problema estiver afetando você, o comando retornará um código de status 400 . Se a solicitação expirar, reinicie o pod ais e execute novamente o comando curl para ver se isso resolve o problema. Se você receber um código de status 000 , o problema foi resolvido e está tudo pronto. Se você ainda receber um código de status 400 , o
servidor HTTP do serviço de identidade do GKE não está sendo iniciado. Nesse caso, continue.
- Verifique o serviço de identidade do GKE e os registros do kube-apiserver:
- Verifique o registro do serviço de identidade do GKE:
kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
--kubeconfig KUBECONFIG
Quando esse problema está afetando você, o registro contém uma entrada como esta:
I0811 22:32:03.583448 32 authentication_plugin.cc:295] Stopping OIDC authentication for ???. Unable to verify the OIDC ID token: JWT verification failed: The JWT does not appear to be from this identity provider. To match this provider, the 'aud' claim must contain one of the following audiences:
- Verifique os registros
kube-apiserver dos clusters:
Nos comandos a seguir, KUBE_APISERVER_POD é o nome do pod kube-apiserver no cluster especificado.
Cluster de administrador:
kubectl --kubeconfig ADMIN_KUBECONFIG logs \
-n kube-system KUBE_APISERVER_POD kube-apiserver
Cluster de usuário:
kubectl --kubeconfig ADMIN_KUBECONFIG logs \
-n USER_CLUSTER_NAME KUBE_APISERVER_POD kube-apiserver
Quando esse problema está afetando você, os registros kube-apiserver contêm entradas como estas:
E0811 22:30:22.656085 1 webhook.go:127] Failed to make webhook authenticator request: error trying to reach service: net/http: TLS handshake timeout
E0811 22:30:22.656266 1 authentication.go:63] "Unable to authenticate the request" err="[invalid bearer token, error trying to reach service: net/http: TLS handshake timeout]"
Alternativa
Se não for possível fazer upgrade dos clusters imediatamente para efetuar a correção, identifique e reinicie os pods ofensivos como uma solução alternativa:
- Aumente o nível de detalhamento do serviço de identidade do GKE para 9:
kubectl patch deployment ais -n anthos-identity-service --type=json \
-p='[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", \
"value":"--vmodule=cloud/identity/hybrid/charon/*=9"}]' \
--kubeconfig KUBECONFIG
- Verifique se o contexto do token inválido no registro do serviço de identidade do GKE é:
kubectl logs -f -l k8s-app=ais -n anthos-identity-service \
--kubeconfig KUBECONFIG
- Para conseguir o payload do token associado a cada contexto de token inválido, analise cada chave secreta da conta de serviço relacionada com o seguinte comando:
kubectl -n kube-system get secret SA_SECRET \
--kubeconfig KUBECONFIG \
-o jsonpath='{.data.token}' | base64 --decode
- Para decodificar o token e ver o nome e o namespace do pod de origem, copie o token para o depurador em jwt.io.
- Reinicie os pods identificados nos tokens.
|
Operação |
1.8, 1.9, 1.10 |
Problema de aumento no uso de memória dos pods de manutenção do etcd
Os pods de manutenção do etcd que usam a imagem etcddefrag:gke_master_etcddefrag_20210211.00_p0 são afetados. O contêiner "etcddefrag" abre uma nova conexão com o servidor etcd durante cada ciclo de infraestrutura e as conexões antigas não são limpas.
Alternativa:
Opção 1: fazer upgrade para a versão mais recente do patch da versão 1.8 para a 1.11 com a correção
Opção 2: se você estiver usando uma versão de patch anterior à 1.9.6 e 1.10.3, será preciso reduzir a escala vertical do pod de manutenção do etcd para o cluster de administrador e de usuário:
kubectl scale --replicas 0 deployment/gke-master-etcd-maintenance -n USER_CLUSTER_NAME --kubeconfig ADMIN_CLUSTER_KUBECONFIG
kubectl scale --replicas 0 deployment/gke-master-etcd-maintenance -n kube-system --kubeconfig ADMIN_CLUSTER_KUBECONFIG
|
Operação |
1.9, 1.10, 1.11, 1.12, 1.13 |
Perda das verificações de integridade dos pods do plano de controle do cluster de usuário
O controlador de integridade do cluster e o comando gkectl diagnose cluster executam um conjunto de verificações de integridade, incluindo as verificações de integridade dos pods nos namespaces. No entanto, elas começam a pular os pods do plano de controle do usuário por engano. Se você usar o modo de plano de controle v2, isso não afetará seu cluster.
Alternativa:
Isso não afeta o gerenciamento de clusters ou cargas de trabalho. Se você quiser verificar a integridade dos pods do plano de controle, execute os seguintes comandos:
kubectl get pods -owide -n USER_CLUSTER_NAME --kubeconfig ADMIN_CLUSTER_KUBECONFIG
|
Upgrades e atualizações |
1.6+, 1.7+ |
Os upgrades do cluster de administrador 1.6 e 1.7 podem ser afetados pelo redirecionamento k8s.gcr.io -> registry.k8s.io .
O Kubernetes redirecionou o tráfego de k8s.gcr.io para registry.k8s.io em 20/03/2023. No GKE no VMware 1.6.x e 1.7.x, os upgrades do cluster de administrador usam a imagem de contêiner k8s.gcr.io/pause:3.2 . Se você usar um proxy na estação de trabalho do administrador e o proxy não permitir registry.k8s.io , e a imagem do contêiner k8s.gcr.io/pause:3.2 não estiver armazenada em cache localmente, os upgrades do cluster de administrador falharão ao extrair a imagem do contêiner.
Alternativa:
Adicione registry.k8s.io à lista de permissões do proxy para sua estação de trabalho do administrador.
|
Rede |
1.10, 1.11, 1.12.0-1.12.6, 1.13.0-1.13.6, 1.14.0-1.14.2 |
Falha na validação do Seesaw na criação do balanceador de carga
gkectl create loadbalancer falha com a seguinte mensagem de erro:
- Validation Category: Seesaw LB - [FAILURE] Seesaw validation: xxx cluster lb health check failed: LB"xxx.xxx.xxx.xxx" is not healthy: Get "http://xxx.xxx.xxx.xxx:xxx/healthz": dial tcpxxx.xxx.xxx.xxx:xxx: connect: no route to host
Isso ocorreu devido ao arquivo do grupo do Seesaw. E a verificação de simulação
tenta validar um balanceador de carga de gangorra inexistente.
Alternativa:
Remova o arquivo do grupo do Seesaw atual do cluster. O nome do arquivo
é seesaw-for-gke-admin.yaml para o cluster de administrador e
seesaw-for-{CLUSTER_NAME}.yaml para um cluster de usuário.
|
Rede |
1.14 |
Tempo limite do aplicativo causado por falhas de inserção da tabela de conexão
A versão 1.14 do GKE no VMware é suscetível a falhas na inserção
de tabelas de rastreamento de conexão do netfilter (conntrack) ao usar
imagens dos sistemas operacionais Ubuntu ou COS. As falhas de inserção levam a um tempo limite
aleatório do aplicativo e podem ocorrer mesmo quando a tabela de conntrack tiver espaço
para novas entradas. As falhas são causadas por alterações no
kernel 5.15 e mais recentes que restringem as inserções de tabelas com base no comprimento
da cadeia.
Para saber se esse problema te afeta, verifique as estatísticas do sistema de rastreamento de conexão no kernel em cada nó com o seguinte comando:
sudo conntrack -S
A resposta será assim:
cpu=0 found=0 invalid=4 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=1 found=0 invalid=0 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=2 found=0 invalid=16 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=3 found=0 invalid=13 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=4 found=0 invalid=9 insert=0 insert_failed=0 drop=0 early_drop=0 error=0 search_restart=0 clash_resolve=0 chaintoolong=0
cpu=5 found=0 invalid=1 insert=0 insert_failed=0 drop=0 early_drop=0 error=519 search_restart=0 clash_resolve=126 chaintoolong=0
...
Se o valor chaintoolong na resposta for um número diferente de zero, esse problema afeta você.
Alternativa
A mitigação de curto prazo aumenta o tamanho da tabela de hash
netfiler (nf_conntrack_buckets ) e da tabela de
rastreamento de conexão do netfilter (nf_conntrack_max ). Use os
seguintes comandos em cada nó de cluster para aumentar o tamanho das
tabelas:
sysctl -w net.netfilter.nf_conntrack_buckets=TABLE_SIZE
sysctl -w net.netfilter.nf_conntrack_max=TABLE_SIZE
Substitua TABLE_SIZE pelo novo tamanho em bytes. O
valor padrão de tamanho da tabela é 262144 . Sugerimos definir um valor igual a 65.536 vezes o número de núcleos no nó. Por exemplo,
se o nó tiver oito núcleos, defina o tamanho da tabela como 524288 .
|
Rede |
1.13.0-1.13.2 |
loop de falha calico-typha ou anetd-operator nos nós do Windows com o Controlplane v2
Com o Controlplane v2 ou um novo modelo de instalação, é possível programar calico-typha ou anetd-operator para nós do Windows e entrar em loop de falhas.
O motivo é que as duas implantações toleram todos os taints, incluindo o taint de nó do Windows.
Alternativa:
Faça upgrade para a versão 1.13.3 ou posterior ou execute os seguintes comandos para editar a implantação "calico-typha" ou "anetd-operator":
# If dataplane v2 is not used.
kubectl edit deployment -n kube-system calico-typha --kubeconfig USER_CLUSTER_KUBECONFIG
# If dataplane v2 is used.
kubectl edit deployment -n kube-system anetd-operator --kubeconfig USER_CLUSTER_KUBECONFIG
Remova os seguintes spec.template.spec.tolerations :
- effect: NoSchedule
operator: Exists
- effect: NoExecute
operator: Exists
E adicione a seguinte tolerância:
- key: node-role.kubernetes.io/master
operator: Exists
|
Configuração |
1.14.0-1.14.2 |
Não é possível carregar o arquivo da credencial de registro particular do cluster de usuário
Talvez não seja possível criar um cluster de usuário se você especificar a
seção privateRegistry com a credencial fileRef .
A simulação pode falhar com a seguinte mensagem:
[FAILURE] Docker registry access: Failed to login.
Alternativa:
|
Operações |
1.10+ |
O Anthos Service Mesh e outras malhas de serviço não são compatíveis com o Dataplane v2
O Dataplane V2 assume o balanceamento de carga e cria um soquete kernel em vez de um DNAT baseado em pacote. Isso significa que o Anthos Service Mesh
não pode fazer a inspeção de pacotes porque o pod é ignorado e nunca usa IPTables.
Isso se manifesta no modo gratuito do kube-proxy pela perda de conectividade ou pelo roteamento de tráfego incorreto para serviços com o Anthos Service Mesh, porque o arquivo secundário não pode inspecionar pacotes.
Esse problema está presente em todas as versões do GKE em Bare Metal 1.10, mas algumas versões mais recentes da 1.10 (1.10.2+) têm uma solução alternativa.
Alternativa:
Faça upgrade para a versão 1.11 para ter compatibilidade total ou, se a versão for 1.10.2 ou posterior, execute:
kubectl edit cm -n kube-system cilium-config --kubeconfig USER_CLUSTER_KUBECONFIG
Adicione bpf-lb-sock-hostns-only: true ao configmap e reinicie o daemonset anetd:
kubectl rollout restart ds anetd -n kube-system --kubeconfig USER_CLUSTER_KUBECONFIG
|
Armazenamento |
1.12+, 1.13.3 |
kube-controller-manager pode remover os volumes permanentes
à força após seis minutos
kube-controller-manager pode expirar ao remover
PV/PVCs após seis minutos e remover à força esses PV/PVCs. Os registros detalhados
de kube-controller-manager mostram eventos semelhantes aos
seguintes:
$ cat kubectl_logs_kube-controller-manager-xxxx | grep "DetachVolume started" | grep expired
kubectl_logs_kube-controller-manager-gke-admin-master-4mgvr_--container_kube-controller-manager_--kubeconfig_kubeconfig_--request-timeout_30s_--namespace_kube-system_--timestamps:2023-01-05T16:29:25.883577880Z W0105 16:29:25.883446 1 reconciler.go:224] attacherDetacher.DetachVolume started for volume "pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16" (UniqueName: "kubernetes.io/csi/csi.vsphere.vmware.com^126f913b-4029-4055-91f7-beee75d5d34a") on node "sandbox-corp-ant-antho-0223092-03-u-tm04-ml5m8-7d66645cf-t5q8f"
This volume is not safe to detach, but maxWaitForUnmountDuration 6m0s expired, force detaching
Para verificar o problema, faça login no nó e execute os seguintes comandos:
# See all the mounting points with disks
lsblk -f
# See some ext4 errors
sudo dmesg -T
No registro do kubelet, são exibidos erros como estes:
Error: GetDeviceMountRefs check failed for volume "pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16" (UniqueName: "kubernetes.io/csi/csi.vsphere.vmware.com^126f913b-4029-4055-91f7-beee75d5d34a") on node "sandbox-corp-ant-antho-0223092-03-u-tm04-ml5m8-7d66645cf-t5q8f" :
the device mount path "/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16/globalmount" is still mounted by other references [/var/lib/kubelet/plugins/kubernetes.io/csi/pv/pvc-8bb4780b-ba8e-45f4-a95b-19397a66ce16/globalmount
Alternativa:
Conecte-se ao nó afetado usando SSH e reinicie o nó.
|
Upgrades e atualizações |
1.12+, 1.13+, 1.14+ |
O upgrade do cluster ficará travado se um driver CSI de terceiros for usado
Talvez não seja possível fazer upgrade de um cluster se você usar um driver CSI de
terceiros. O comando gkectl cluster diagnose pode retornar o
seguinte erro:
"virtual disk "kubernetes.io/csi/csi.netapp.io^pvc-27a1625f-29e3-4e4f-9cd1-a45237cc472c" IS NOT attached to machine "cluster-pool-855f694cc-cjk5c" but IS listed in the Node.Status"
Alternativa:
Faça o upgrade usando a opção --skip-validation-all .
|
Operação |
1.10+, 1.11+, 1.12+, 1.13+, 1.14+ |
gkectl repair admin-master cria a VM mestre do administrador
sem fazer upgrade da versão do hardware da vm
O nó mestre do administrador criado via gkectl repair admin-master
pode usar uma versão de hardware de VM inferior à esperada. Quando o problema acontecer, você verá o erro do relatório gkectl diagnose cluster .
CSIPrerequisites [VM Hardware]: The current VM hardware versions are lower than vmx-15 which is unexpected. Please contact Anthos support to resolve this issue.
Alternativa:
Encerre o nó mestre do administrador. Siga
https://kb.vmware.com/s/article/1003746
para fazer upgrade do nó para a versão esperada descrita no erro
e inicie o nó.
|
Sistema operacional |
1.10+, 1.11+, 1.12+, 1.13+, 1.14+, 1.15+, 1.16+ |
A VM libera o lease de DHCP no encerramento/reinicialização inesperado, o que pode
resultar em alterações no IP
No systemd v244, o systemd-networkd tem uma
mudança de comportamento padrão
na configuração do KeepConfiguration . Antes dessa mudança,
as VMs não enviavam uma mensagem de lançamento da lease de DHCP para o servidor DHCP no
encerramento ou reinicialização. Após essa alteração, as VMs enviam essa mensagem e
retornam os IPs ao servidor DHCP. Como resultado, o IP liberado pode ser
realocado para uma VM diferente e/ou outro IP pode ser atribuído à
VM, resultando em conflito de IP (no nível do Kubernetes, não no vSphere)
/ou alteração de IP nas VMs, o que pode interromper os clusters de várias maneiras.
Por exemplo, você pode ver os sintomas a seguir.
- A IU do vCenter mostra que nenhuma VM usa o mesmo IP, mas
kubectl get
nodes -o wide retorna nós com IPs duplicados.
NAME STATUS AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
node1 Ready 28h v1.22.8-gke.204 10.180.85.130 10.180.85.130 Ubuntu 20.04.4 LTS 5.4.0-1049-gkeop containerd://1.5.13
node2 NotReady 71d v1.22.8-gke.204 10.180.85.130 10.180.85.130 Ubuntu 20.04.4 LTS 5.4.0-1049-gkeop containerd://1.5.13
- Novos nós falham ao iniciar devido ao erro
calico-node
2023-01-19T22:07:08.817410035Z 2023-01-19 22:07:08.817 [WARNING][9] startup/startup.go 1135: Calico node 'node1' is already using the IPv4 address 10.180.85.130.
2023-01-19T22:07:08.817514332Z 2023-01-19 22:07:08.817 [INFO][9] startup/startup.go 354: Clearing out-of-date IPv4 address from this node IP="10.180.85.130/24"
2023-01-19T22:07:08.825614667Z 2023-01-19 22:07:08.825 [WARNING][9] startup/startup.go 1347: Terminating
2023-01-19T22:07:08.828218856Z Calico node failed to start
Alternativa:
Implante o DaemonSet a seguir no cluster para reverter a
mudança de comportamento padrão systemd-networkd . As VMs que executam esse DaemonSet não liberarão os IPs ao servidor DHCP no encerramento/reinicialização. Os IPs serão liberados automaticamente pelo servidor DHCP
quando as leases expirarem.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: set-dhcp-on-stop
spec:
selector:
matchLabels:
name: set-dhcp-on-stop
template:
metadata:
labels:
name: set-dhcp-on-stop
spec:
hostIPC: true
hostPID: true
hostNetwork: true
containers:
- name: set-dhcp-on-stop
image: ubuntu
tty: true
command:
- /bin/bash
- -c
- |
set -x
date
while true; do
export CONFIG=/host/run/systemd/network/10-netplan-ens192.network;
grep KeepConfiguration=dhcp-on-stop "${CONFIG}" > /dev/null
if (( $? != 0 )) ; then
echo "Setting KeepConfiguration=dhcp-on-stop"
sed -i '/\[Network\]/a KeepConfiguration=dhcp-on-stop' "${CONFIG}"
cat "${CONFIG}"
chroot /host systemctl restart systemd-networkd
else
echo "KeepConfiguration=dhcp-on-stop has already been set"
fi;
sleep 3600
done
volumeMounts:
- name: host
mountPath: /host
resources:
requests:
memory: "10Mi"
cpu: "5m"
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
tolerations:
- operator: Exists
effect: NoExecute
- operator: Exists
effect: NoSchedule
|
Operação, upgrades e atualizações |
1.12.0-1.12.5, 1.13.0-1.13.5, 1.14.0-1.14.1 |
A chave da conta de serviço de acesso ao componente foi apagada após o upgrade do cluster de administrador
da versão 1.11.x
Esse problema afetará apenas os clusters de administrador que receberam upgrade
da versão 1.11.x, e não os recém-criados após a
versão 1.12.
Depois de fazer upgrade de um cluster 1.11.x para 1.12.x, o
campo component-access-sa-key no
secret admin-cluster-creds ficará vazio.
Para verificar isso, execute o seguinte comando:
kubectl --kubeconfig ADMIN_KUBECONFIG -n kube-system get secret admin-cluster-creds -o yaml | grep 'component-access-sa-key'
Se você achar que a saída está vazia, isso significa que a chave foi apagada.
Depois que a chave da conta de serviço de acesso ao componente for excluída,
a instalação de novos clusters de usuário ou o upgrade de clusters de usuário atuais
falhará. Confira a seguir algumas mensagens de erro que você pode encontrar:
- Falha de simulação da validação lenta com a mensagem de erro
"Failed
to create the test VMs: failed to get service account key: service
account is not configured."
- Falha na preparação de
gkectl prepare com a mensagem de erro:
"Failed to prepare OS images: dialing: unexpected end of JSON
input"
- Se você estiver fazendo upgrade de um cluster de usuário 1.13 usando o Console do Google Cloud
ou a CLI gcloud, quando você executar
gkectl update admin --enable-preview-user-cluster-central-upgrade
para implantar o controlador da plataforma de upgrade, o comando falhará
com a mensagem: "failed to download bundle to disk: dialing:
unexpected end of JSON input" . É possível ver essa mensagem
no campo status na
saída de kubectl --kubeconfig
ADMIN_KUBECONFIG -n kube-system get onprembundle -oyaml .
Alternativa:
Adicione a chave da conta de serviço de acesso ao componente de volta ao secret
manualmente executando o seguinte comando:
kubectl --kubeconfig ADMIN_KUBECONFIG -n kube-system get secret admin-cluster-creds -ojson | jq --arg casa "$(cat COMPONENT_ACESS_SERVICE_ACOOUNT_KEY_PATH | base64 -w 0)" '.data["component-access-sa-key"]=$casa' | kubectl --kubeconfig ADMIN_KUBECONFIG apply -f -
|
Operação |
1.13.0+, 1.14.0+ |
O escalonador automático de clusters não funciona quando o Controlplane V2 está ativado
Para clusters de usuários criados com o Controlplane V2 ouum novo modelo de instalação, pools de nós comescalonamento automático sempre usam oautoscaling.minReplicas no arquivo user-cluster.yaml. O registro do pod de escalonador automático de clusters também mostra que eles não estão íntegros.
> kubectl --kubeconfig $USER_CLUSTER_KUBECONFIG -n kube-system \
logs $CLUSTER_AUTOSCALER_POD --container_cluster-autoscaler
TIMESTAMP 1 gkeonprem_provider.go:73] error getting onpremusercluster ready status: Expected to get a onpremusercluster with id foo-user-cluster-gke-onprem-mgmt/foo-user-cluster
TIMESTAMP 1 static_autoscaler.go:298] Failed to get node infos for groups: Expected to get a onpremusercluster with id foo-user-cluster-gke-onprem-mgmt/foo-user-cluster
O pod do escalonador automático de clusters pode ser encontrado executando os comandos a seguir.
> kubectl --kubeconfig $USER_CLUSTER_KUBECONFIG -n kube-system \
get pods | grep cluster-autoscaler
cluster-autoscaler-5857c74586-txx2c 4648017n 48076Ki 30s
Alternativa:
Desative o escalonamento automático em todos os pools de nós com "gkectl update cluster" até fazer upgrade para uma versão com a correção.
|
Instalação |
1.12.0-1.12.4, 1.13.0-1.13.3, 1.14.0 |
CIDR não é permitido no arquivo de bloco de IP
Quando os usuários utilizam CIDR no arquivo de bloco de IP, a validação da configuração falhará com o seguinte erro:
- Validation Category: Config Check
- [FAILURE] Config: AddressBlock for admin cluster spec is invalid: invalid IP:
172.16.20.12/30
Alternativa:
Inclua IPs individuais no arquivo de bloco de IPs até fazer upgrade para uma versão com a correção: 1.12.5, 1.13.4, 1.14.1+.
|
Upgrades e atualizações |
1.14.0-1.14.1 |
A atualização do tipo de imagem do SO no admin-cluster.yaml não aguarda a recriação das máquinas do plano de controle do usuário
Ao atualizar o tipo de imagem do SO do plano de controle em admin-cluster.yaml e se o cluster de usuário correspondente tiver sido criado pelo Controlplane V2, as máquinas do plano de controle do usuário não poderão concluir a recriação quando o comando gkectl for concluído.
Alternativa:
Depois que a atualização for concluída, aguarde até que as máquinas do plano de controle do usuário também concluam a recriação ao monitorar os tipos de imagem do SO do nó usando kubectl --kubeconfig USER_KUBECONFIG get nodes -owide . Por exemplo, se atualizar do Ubuntu para o COS, devemos esperar que todas as máquinas do plano de controle mudem completamente do Ubuntu para o COS mesmo após a conclusão do comando de atualização.
|
Operação |
1.10, 1.11, 1.12, 1.13, 1.14.0 |
Erros de criação ou exclusão de pods devido a um problema no token de autenticação da conta de serviço
da CNI do Calico
Um problema com o Calico no GKE on VMware 1.14.0
faz com que a criação e a exclusão do pod falhem com a seguinte mensagem de erro
na saída de kubectl describe pods :
error getting ClusterInformation: connection is unauthorized: Unauthorized
Esse problema só é observado 24 horas após a criação ou
o upgrade do cluster para a versão 1.14 usando o Calico.
Os clusters de administrador estão sempre usando o Calico. Já para o cluster de usuário, há
um campo de configuração "enableDataPlaneV2" em user-cluster.yaml. Se esse campo estiver
definido como "falso" ou não for especificado, você estará usando o Calico no cluster de
usuário.
O contêiner install-cni dos nós cria um kubeconfig com um
token válido por 24 horas. Esse token precisa ser renovado
periodicamente pelo pod calico-node . O pod
calico-node não pode renovar o token porque não tem acesso ao diretório
que contém o arquivo kubeconfig no nó.
Alternativa:
Esse problema foi corrigido no GKE on VMware versão 1.14.1. Faça upgrade para
esta versão ou uma mais recente.
Se não for possível fazer upgrade imediatamente, aplique o seguinte patch no
DaemonSet calico-node no cluster de administrador e de usuário:
kubectl -n kube-system get daemonset calico-node \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG -o json \
| jq '.spec.template.spec.containers[0].volumeMounts += [{"name":"cni-net-dir","mountPath":"/host/etc/cni/net.d"}]' \
| kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f -
kubectl -n kube-system get daemonset calico-node \
--kubeconfig USER_CLUSTER_KUBECONFIG -o json \
| jq '.spec.template.spec.containers[0].volumeMounts += [{"name":"cni-net-dir","mountPath":"/host/etc/cni/net.d"}]' \
| kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f -
Substitua o seguinte:
ADMIN_CLUSTER_KUBECONFIG : o caminho
do arquivo kubeconfig do cluster de administrador.
USER_CLUSTER_CONFIG_FILE : o caminho
do arquivo de configuração do cluster de usuário.
|
Instalação |
1.12.0-1.12.4, 1.13.0-1.13.3, 1.14.0 |
A validação do bloco de IP falha ao usar CIDR
A criação do cluster falha, mesmo quando o usuário tem a configuração correta. O usuário recebe uma falha na criação porque o cluster não tem IPs suficientes.
Alternativa:
Dividir CIDRs em vários blocos CIDR menores, como 10.0.0.0/30 , se torna 10.0.0.0/31, 10.0.0.2/31 . Desde que haja CIDRs N+1, em que N é o número de nós no cluster, isso vai ser suficiente.
|
Operação, upgrades e atualizações |
1.11.0 - 1.11.1, 1.10.0 - 1.10.4, 1.9.0 - 1.9.6 |
O backup do cluster de administrador não inclui as chaves de criptografia de secrets e a configuração sempre ativadas
Quando o atributo de criptografia de secrets sempre ativado for ativado com o backup de cluster, o backup do cluster de administrador não incluirá as chaves de criptografia e a configuração exigidas pelo atributo de criptografia de secrets sempre ativado. Como resultado, reparar o mestre administrador com esse backup usando gkectl repair admin-master --restore-from-backup causa o seguinte erro:
Validating admin master VM xxx ...
Waiting for kube-apiserver to be accessible via LB VIP (timeout "8m0s")... ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Waiting for kube-apiserver to be accessible via LB VIP (timeout "13m0s")... ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Waiting for kube-apiserver to be accessible via LB VIP (timeout "18m0s")... ERROR
Failed to access kube-apiserver via LB VIP. Trying to fix the problem by rebooting the admin master
Alternativa:
- Use o binário gkectl da versão de patch mais recente disponível para a versão secundária correspondente a fim de fazer o backup do cluster de administrador após operações críticas do cluster. Por exemplo, se o cluster estiver executando uma versão 1.10.2, use o binário gkectl 1.10.5 para fazer um backup manual do cluster de administrador, conforme descrito em Fazer backup e restaurar um cluster de administrador com gkectl.
|
Operação, upgrades e atualizações |
1.10+ |
Recriar a VM mestre do administrador com um novo disco de inicialização (por exemplo, gkectl repair admin-master ) falhará se o atributo de criptografia de secrets sempre ativado estiver ativado usando o comando "gkectl update".
Se o atributo de criptografia de secrets sempre ativado não estiver ativado na criação do cluster, mas for ativado depois usando a operação gkectl update , o gkectl repair admin-master não vai reparar o nó do plano de controle do cluster de administrador. É recomendável ativar o atributo de criptografia de secrets sempre ativado durante a criação do cluster. Não há mitigação atual.
|
Upgrades e atualizações |
1.10 |
Fazer upgrade do primeiro cluster de usuário de 1.9 para 1.10 recria nós em outros clusters de usuário
O upgrade do primeiro cluster de usuário de 1.9 para 1.10 pode recriar nós em outros clusters de usuário no mesmo cluster de administrador. A recriação é feita de modo contínuo.
O disk_label foi removido de MachineTemplate.spec.template.spec.providerSpec.machineVariables , o que acionou uma atualização em todos os MachineDeployment s inesperadamente.
Alternativa:
Ver etapas de solução alternativa
- Reduza a réplica de
clusterapi-controllers para 0 em todos os clusters de usuários.
kubectl scale --replicas=0 -n=USER_CLUSTER_NAME deployment/clusterapi-controllers --kubeconfig ADMIN_CLUSTER_KUBECONFIG
Faça upgrade de cada cluster de usuário um por um.
|
Upgrades e atualizações |
1.10.0 |
O Docker é reiniciado com frequência após o upgrade do cluster
Fazer upgrade do cluster de usuário para 1.10.0 pode causar a reinicialização do Docker com frequência.
Execute kubectl describe node NODE_NAME --kubeconfig USER_CLUSTER_KUBECONFIG para detectar esse problema
Uma condição de nó mostrará se o Docker é reiniciado com frequência. Este um exemplo de saída:
Normal FrequentDockerRestart 41m (x2 over 141m) systemd-monitor Node condition FrequentDockerRestart is now: True, reason: FrequentDockerRestart
Para entender a causa raiz, é preciso executar o SSH no nó que tem o sintoma e executar comandos como sudo journalctl --utc -u docker ou sudo journalctl -x .
Alternativa:
|
Upgrades e atualizações |
1.11, 1.12 |
Os componentes do GMP autoimplantados não são preservados após o upgrade para a versão 1.12
Se você estiver usando uma versão do GKE no VMware anterior à 1.12 e tiver configurado manualmente os componentes do Prometheus gerenciados pelo Google (GMP) no namespace gmp-system
do seu cluster, os componentes não serão preservados quando você
fizer upgrade para a versão 1.12.x.
A partir da versão 1.12, os componentes do GMP no namespace gmp-system e nos CRDs são gerenciados pelo objeto
stackdriver , com a flag enableGMPForApplications definida como false por padrão. Se você implantar manualmente os componentes do GMP no namespace antes do upgrade para a versão 1.12, os recursos serão excluídos por stackdriver .
Alternativa:
|
Operação |
1.11, 1.12, 1.13.0 - 1.13.1 |
Objetos ClusterAPI ausentes no snapshot do cluster cenário system
No cenário system , o snapshot do cluster não inclui recursos no namespace default .
No entanto, alguns recursos do Kubernetes, como objetos da API Cluster que estão nesse namespace, contêm informações úteis de depuração. O snapshot do cluster precisa incluí-las.
Alternativa:
Execute os comandos a seguir para coletar as informações de depuração.
export KUBECONFIG=USER_CLUSTER_KUBECONFIG
kubectl get clusters.cluster.k8s.io -o yaml
kubectl get controlplanes.cluster.k8s.io -o yaml
kubectl get machineclasses.cluster.k8s.io -o yaml
kubectl get machinedeployments.cluster.k8s.io -o yaml
kubectl get machines.cluster.k8s.io -o yaml
kubectl get machinesets.cluster.k8s.io -o yaml
kubectl get services -o yaml
kubectl describe clusters.cluster.k8s.io
kubectl describe controlplanes.cluster.k8s.io
kubectl describe machineclasses.cluster.k8s.io
kubectl describe machinedeployments.cluster.k8s.io
kubectl describe machines.cluster.k8s.io
kubectl describe machinesets.cluster.k8s.io
kubectl describe services
em que:
USER_CLUSTER_KUBECONFIG é o arquivo kubeconfig do cluster de
usuário.
|
Upgrades e atualizações |
1.11.0-1.11.4, 1.12.0-1.12.3, 1.13.0-1.13.1 |
Exclusão de cluster de usuário travada na drenagem do nó para configuração do vSAN
Ao excluir, atualizar ou fazer upgrade de um cluster de usuário, a drenagem do nó pode ficar travada nos seguintes cenários:
- O cluster de administrador usa o driver CSI do vSphere na vSAN desde a versão 1.12.x e
- Não há objetos PVC/PV criados por plug-ins vSphere em árvore no cluster de administrador e de usuário.
Para identificar o sintoma, execute o comando abaixo:
kubectl logs clusterapi-controllers-POD_NAME_SUFFIX --kubeconfig ADMIN_KUBECONFIG -n USER_CLUSTER_NAMESPACE
Confira um exemplo de mensagem de erro do comando acima:
E0920 20:27:43.086567 1 machine_controller.go:250] Error deleting machine object [MACHINE]; Failed to delete machine [MACHINE]: failed to detach disks from VM "[MACHINE]": failed to convert disk path "kubevols" to UUID path: failed to convert full path "ds:///vmfs/volumes/vsan:[UUID]/kubevols": ServerFaultCode: A general system error occurred: Invalid fault
kubevols é o diretório padrão para o driver em árvore do vSphere. Quando não houver objetos PVC/PV criados, pode ocorrer um bug em que a drenagem de nós vai ficar travada ao encontrar kubevols , já que a implementação atual supõe que kubevols sempre existe.
Alternativa:
Crie o diretório kubevols no repositório de dados em que o nó foi criado. Isso é definido no campo vCenter.datastore nos arquivos user-cluster.yaml ou admin-cluster.yaml .
|
Configuração |
1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13, 1.14 |
O clusterrolebinding e o clusterrole do Cluster Autoscaler são excluídos após a exclusão de um cluster de usuário.
Na exclusão do cluster de usuário, os clusterrole e clusterrolebinding correspondentes do escalonador automático de cluster também são excluídos. Isso afeta todos os outros clusters de usuário no mesmo cluster de administrador com o escalonador automático de cluster ativado. Isso ocorre porque os mesmos clusterrole e clusterrolebinding são usados para todos os pods do escalonador automático de cluster no mesmo cluster de administrador.
Os sintomas são os seguintes:
- Registros
cluster-autoscaler
kubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-autoscaler
,
em que ADMIN_CLUSTER_KUBECONFIG é o arquivo kubeconfig do cluster de
administrador.
Este é um exemplo de mensagens de erro que podem ser exibidas:
2023-03-26T10:45:44.866600973Z W0326 10:45:44.866463 1 reflector.go:424] k8s.io/client-go/dynamic/dynamicinformer/informer.go:91: failed to list *unstructured.Unstructured: onpremuserclusters.onprem.cluster.gke.io is forbidden: User "..." cannot list resource "onpremuserclusters" in API group "onprem.cluster.gke.io" at the cluster scope
2023-03-26T10:45:44.866646815Z E0326 10:45:44.866494 1 reflector.go:140] k8s.io/client-go/dynamic/dynamicinformer/informer.go:91: Failed to watch *unstructured.Unstructured: failed to list *unstructured.Unstructured: onpremuserclusters.onprem.cluster.gke.io is forbidden: User "..." cannot list resource "onpremuserclusters" in API group "onprem.cluster.gke.io" at the cluster scope
Alternativa:
Ver etapas de solução alternativa
Verificar se o clusterrole e o clusterrolebinding estão ausentes no cluster de administrador
-
kubectl get clusterrolebindings --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system | grep cluster-autoscaler
-
kubectl get clusterrole --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system | grep cluster-autoscaler
Se estiverem ausentes, aplique o clusterrole e o clusterrolebinding a seguir ao cluster de administrador. Adicione os assuntos da conta de serviço ao clusterrolebinding para cada cluster de usuário.
-
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-autoscaler
rules:
- apiGroups: ["cluster.k8s.io"]
resources: ["clusters"]
verbs: ["get", "list", "watch"]
- apiGroups: ["cluster.k8s.io"]
resources: ["machinesets","machinedeployments", "machinedeployments/scale","machines"]
verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups: ["onprem.cluster.gke.io"]
resources: ["onpremuserclusters"]
verbs: ["get", "list", "watch"]
- apiGroups:
- coordination.k8s.io
resources:
- leases
resourceNames: ["cluster-autoscaler"]
verbs:
- get
- list
- watch
- create
- update
- patch
- apiGroups:
- ""
resources:
- nodes
verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups:
- ""
resources:
- pods
verbs: ["get", "list", "watch"]
- apiGroups:
- ""
resources:
- pods/eviction
verbs: ["create"]
# read-only access to cluster state
- apiGroups: [""]
resources: ["services", "replicationcontrollers", "persistentvolumes", "persistentvolumeclaims"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["daemonsets", "replicasets"]
verbs: ["get", "list", "watch"]
- apiGroups: ["apps"]
resources: ["statefulsets"]
verbs: ["get", "list", "watch"]
- apiGroups: ["batch"]
resources: ["jobs"]
verbs: ["get", "list", "watch"]
- apiGroups: ["policy"]
resources: ["poddisruptionbudgets"]
verbs: ["get", "list", "watch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses", "csinodes"]
verbs: ["get", "list", "watch"]
# misc access
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["create"]
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["cluster-autoscaler-status"]
verbs: ["get", "update", "patch", "delete"]
-
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
k8s-app: cluster-autoscaler
name: cluster-autoscaler
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-autoscaler
subjects:
- kind: ServiceAccount
name: cluster-autoscaler
namespace: NAMESPACE_OF_USER_CLUSTER_1
- kind: ServiceAccount
name: cluster-autoscaler
namespace: NAMESPACE_OF_USER_CLUSTER_2
...
|
Configuração |
1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13 |
O cluster de administrador cluster-health-controller e vsphere-metrics-exporter não funcionam depois de excluir o cluster de usuário
Na exclusão do cluster de usuário, o clusterrole correspondente também é excluído, o que faz com que o reparo automático e o exportador de métricas do vsphere não funcionem
Os sintomas são os seguintes:
- Registros
cluster-health-controller
kubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
cluster-health-controller
,
em que ADMIN_CLUSTER_KUBECONFIG é o arquivo kubeconfig do cluster de
administrador.
Veja um exemplo de mensagens de erro que podem ser exibidas:
error retrieving resource lock default/onprem-cluster-health-leader-election: configmaps "onprem-cluster-health-leader-election" is forbidden: User "system:serviceaccount:kube-system:cluster-health-controller" cannot get resource "configmaps" in API group "" in the namespace "default": RBAC: clusterrole.rbac.authorization.k8s.io "cluster-health-controller-role" not found
Registros vsphere-metrics-exporter
kubectl logs --kubeconfig ADMIN_CLUSTER_KUBECONFIG -n kube-system \
vsphere-metrics-exporter
,
em que ADMIN_CLUSTER_KUBECONFIG é o arquivo kubeconfig do cluster de
administrador.
Este é um exemplo de mensagens de erro que podem ser exibidas:
vsphere-metrics-exporter/cmd/vsphere-metrics-exporter/main.go:68: Failed to watch *v1alpha1.Cluster: failed to list *v1alpha1.Cluster: clusters.cluster.k8s.io is forbidden: User "system:serviceaccount:kube-system:vsphere-metrics-exporter" cannot list resource "clusters" in API group "cluster.k8s.io" in the namespace "default"
Alternativa:
Ver etapas de solução alternativa
Aplique o seguinte yaml ao cluster de administrador
- Para vsphere-metrics-exporter
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: vsphere-metrics-exporter
rules:
- apiGroups:
- cluster.k8s.io
resources:
- clusters
verbs: [get, list, watch]
- apiGroups:
- ""
resources:
- nodes
verbs: [get, list, watch]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
k8s-app: vsphere-metrics-exporter
name: vsphere-metrics-exporter
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: vsphere-metrics-exporter
subjects:
- kind: ServiceAccount
name: vsphere-metrics-exporter
namespace: kube-system
Para cluster-health-controller
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cluster-health-controller-role
rules:
- apiGroups:
- "*"
resources:
- "*"
verbs:
- "*"
|
Configuração |
1.12.1-1.12.3, 1.13.0-1.13.2 |
gkectl check-config falha na validação da imagem do SO
Um problema conhecido que poderia falhar o gkectl check-config sem executar gkectl prepare . Isso é confuso porque sugerimos executar o comando antes de executar gkectl prepare .
O sintoma é que o comando gkectl check-config falha com a
seguinte mensagem de erro:
Validator result: {Status:FAILURE Reason:os images [OS_IMAGE_NAME] don't exist, please run `gkectl prepare` to upload os images. UnhealthyResources:[]}
Alternativa:
Opção 1: execute gkectl prepare para fazer upload das imagens ausentes do SO.
Opção 2: use gkectl check-config --skip-validation-os-images para pular a validação de imagens do SO.
|
Upgrades e atualizações |
1.11, 1.12, 1.13 |
gkectl update admin/cluster não consegue atualizar grupos antiafinidade
Um problema conhecido que poderia falhar o gkectl update admin/cluster ao atualizar o anti affinity groups .
O sintoma é que o comando gkectl update falha com a
seguinte mensagem de erro:
Waiting for machines to be re-deployed... ERROR
Exit with error:
Failed to update the cluster: timed out waiting for the condition
Alternativa:
Ver etapas de solução alternativa
Para que a atualização entre em vigor, as máquinas precisam ser recriadas after a atualização com falha.
Para a atualização do cluster de administrador, os nós mestres e de complementos do administrador precisam ser recriados
Para a atualização do cluster de usuário, os nós de trabalho do usuário precisam ser recriados
Para recriar nós de trabalho do usuário
Opção 1 Siga atualizar um pool de nós e altere a CPU ou a memória para acionar uma recriação contínua dos nós.
Opção 2 Usar kubectl delete para recriar uma máquina de cada vez
kubectl delete machines MACHINE_NAME --kubeconfig USER_KUBECONFIG
Para recriar nós mestres de usuários
Opção 1 Siga o plano de controle de redimensionamento e altere a CPU ou a memória para acionar uma recriação contínua dos nós.
Opção 2 Usar kubectl delete para recriar uma máquina de cada vez
kubectl delete machines MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG
Para recriar nós de complementos do administrador
Usar o kubectl delete para recriar uma máquina de cada vez
kubectl delete machines MACHINE_NAME --kubeconfig ADMIN_KUBECONFIG
|
Instalação, upgrades e atualizações |
1.13.0-1.13.8, 1.14.0-1.14.4, 1.15.0 |
O registro do nó falha durante a criação, o upgrade, a atualização do cluster e
o reparo automático do nó, quando ipMode.type é static e
o nome do host configurado no
arquivo de bloco de IP contém um
ou mais pontos finais. Nesse caso, as solicitações de assinatura de certificado (CSR, na sigla em inglês) de um nó não serão aprovadas automaticamente.
Para acessar CSRs pendentes de um nó, execute o comando a seguir:
kubectl get csr -A -o wide
Verifique se há mensagens de erro nos seguintes registros:
- Visualize os registros no cluster de administrador do contêiner
clusterapi-controller-manager no pod
clusterapi-controllers :
kubectl logs clusterapi-controllers-POD_NAME \
-c clusterapi-controller-manager -n kube-system \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG
- Para ver os mesmos registros no cluster de usuário, execute o seguinte
comando:
kubectl logs clusterapi-controllers-POD_NAME \
-c clusterapi-controller-manager -n USER_CLUSTER_NAME \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG
,
em que:
- ADMIN_CLUSTER_KUBECONFIG é o arquivo kubeconfig do cluster
de administrador.
- USER_CLUSTER_NAME é o nome do cluster de usuário.
Confira um exemplo de mensagens de erro: "msg"="failed
to validate token id" "error"="failed to find machine for node
node-worker-vm-1" "validate"="csr-5jpx9"
- Visualize os registros
kubelet do nó problemático:
journalctl --u kubelet
Confira um exemplo de mensagens de erro que podem ser exibidas: "Error getting
node" err="node \"node-worker-vm-1\" not found"
Se você especificar um nome de domínio no campo do nome do host de um arquivo de bloco de IP,
todos os caracteres após o primeiro ponto final serão ignorados. Por exemplo, se
você especificar o nome do host como bob-vm-1.bank.plc , o nome do host
da VM e o nome do nó serão definidos como bob-vm-1 .
Quando a verificação do ID do nó está ativada, o aprovador da CSR compara o
nome do nó com o nome do host na especificação da máquina e não reconcilia
o nome. O aprovador rejeita a CSR, e o nó falha ao
inicializar.
Alternativa:
Cluster de usuário
Para desativar a verificação do ID do nó, siga estas etapas:
- Adicione os seguintes campos no arquivo de configuração do cluster de usuário:
disableNodeIDVerification: true
disableNodeIDVerificationCSRSigning: true
- Salve o arquivo e atualize o cluster de usuário executando o seguinte
comando:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--config USER_CLUSTER_CONFIG_FILE
Substitua o seguinte:
ADMIN_CLUSTER_KUBECONFIG : o caminho
do arquivo kubeconfig do cluster de administrador
USER_CLUSTER_CONFIG_FILE : o caminho
do arquivo de configuração do cluster de usuário.
Cluster de administrador
- Abra o recurso personalizado
OnPremAdminCluster para
edição:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
edit onpremadmincluster -n kube-system
- Adicione a seguinte anotação ao recurso personalizado:
features.onprem.cluster.gke.io/disable-node-id-verification: enabled
- Edite o manifesto
kube-controller-manager no plano de controle
do cluster de administrador:
- Estabeleça uma conexão SSH com o
nó do plano de controle do cluster de administrador.
- Abra o manifesto
kube-controller-manager para
edição:
sudo vi /etc/kubernetes/manifests/kube-controller-manager.yaml
- Encontre a lista de
controllers :
--controllers=*,bootstrapsigner,tokencleaner,-csrapproving,-csrsigning
- Atualize a seção conforme mostrado abaixo:
--controllers=*,bootstrapsigner,tokencleaner
- Abra o controlador da API Deployment Cluster para editar:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
edit deployment clusterapi-controllers -n kube-system
- Altere os valores de
node-id-verification-enabled e node-id-verification-csr-signing-enabled para false :
--node-id-verification-enabled=false
--node-id-verification-csr-signing-enabled=false
|
Instalação, upgrades e atualizações |
1.11.0-1.11.4 |
Falha de inicialização da máquina do plano de controle do administrador causada pelo pacote de certificado
de registro particular
A criação/upgrade do cluster de administrador é interrompida no registro a seguir
para sempre e, por fim, expira:
Waiting for Machine gke-admin-master-xxxx to become ready...
O registro do controlador da API Cluster no
snapshot de cluster externo inclui o seguinte registro:
Invalid value 'XXXX' specified for property startup-data
Confira um exemplo de caminho de arquivo para o registro do controlador da API Cluster:
kubectlCommands/kubectl_logs_clusterapi-controllers-c4fbb45f-6q6g6_--container_vsphere-controller-manager_--kubeconfig_.home.ubuntu..kube.kind-config-gkectl_--request-timeout_30s_--namespace_kube-system_--timestamps
VMware has a 64k vApp property size limit. In the identified versions,
the data passed via vApp property is close to the limit. When the private
registry certificate contains a certificate bundle, it may cause the final
data to exceed the 64k limit.
Workaround:
Only include the required certificates in the private registry
certificate file configured in privateRegistry.caCertPath in
the admin cluster config file.
Or upgrade to a version with the fix when available.
|
Networking |
1.10, 1.11.0-1.11.3, 1.12.0-1.12.2, 1.13.0 |
NetworkGatewayNodes marked unhealthy from concurrent
status update conflict
In networkgatewaygroups.status.nodes , some nodes switch
between NotHealthy and Up .
Logs for the ang-daemon Pod running on that node reveal
repeated errors:
2022-09-16T21:50:59.696Z ERROR ANGd Failed to report status {"angNode": "kube-system/my-node", "error": "updating Node CR status: sending Node CR update: Operation cannot be fulfilled on networkgatewaynodes.networking.gke.io \"my-node\": the object has been modified; please apply your changes to the latest version and try again"}
O status NotHealthy impede que o controlador
atribua outros IPs flutuantes ao nó. Isso pode resultar em mais
carga para outros nós ou falta de redundância para alta disponibilidade.
A atividade do plano de dados não será afetada.
A contenção no objeto networkgatewaygroup faz algumas
atualizações de status falharem devido a um erro no processamento de novas tentativas. Se muitas
atualizações de status falharem, ang-controller-manager vê o nó como
tendo passado do limite de tempo do sinal de funcionamento e marca esse nó como NotHealthy .
O erro no processamento de novas tentativas foi corrigido em versões mais recentes.
Alternativa:
Fazer upgrade para uma versão fixa, quando disponível.
|
Upgrades e atualizações |
1.12.0-1.12.2, 1.13.0 |
A disputa bloqueia a exclusão de objetos da máquina durante uma atualização ou
upgrade
Um problema conhecido que poderia fazer com que o upgrade ou a atualização do cluster ficassem
esperando para que o objeto da máquina antigo fosse excluído. Isso acontece porque
não é possível remover o finalizador do objeto da máquina. Isso afeta qualquer
operação de atualização gradual para pools de nós.
O sintoma é que o comando gkectl expira com a
seguinte mensagem de erro:
E0821 18:28:02.546121 61942 console.go:87] Exit with error:
E0821 18:28:02.546184 61942 console.go:87] error: timed out waiting for the condition, message: Node pool "pool-1" is not ready: ready condition is not true: CreateOrUpdateNodePool: 1/3 replicas are updated
Check the status of OnPremUserCluster 'cluster-1-gke-onprem-mgmt/cluster-1' and the logs of pod 'kube-system/onprem-user-cluster-controller' for more detailed debugging information.
Nos registros de pod clusterapi-controller , os erros são
assim:
$ kubectl logs clusterapi-controllers-[POD_NAME_SUFFIX] -n cluster-1
-c vsphere-controller-manager --kubeconfig [ADMIN_KUBECONFIG]
| grep "Error removing finalizer from machine object"
[...]
E0821 23:19:45.114993 1 machine_controller.go:269] Error removing finalizer from machine object cluster-1-pool-7cbc496597-t5d5p; Operation cannot be fulfilled on machines.cluster.k8s.io "cluster-1-pool-7cbc496597-t5d5p": the object has been modified; please apply your changes to the latest version and try again
O erro se repete para a mesma máquina por vários minutos para execuções bem-sucedidas, mesmo sem esse problema, na maior parte do tempo, pode passar rapidamente. No entanto, em alguns casos raros, ele pode ficar preso nessa disputa por várias horas.
O problema é que a VM já foi excluída no vCenter, mas
o objeto da máquina correspondente não pode ser removido e fica preso na
remoção do finalizador devido a atualizações muito frequentes de outros controladores.
Isso pode fazer com que o comando gkectl atinja o tempo limite, mas o
controlador continua reconciliando o cluster para que o processo de upgrade ou atualização
seja concluído.
Alternativa:
Preparamos várias opções diferentes de mitigação para esse problema,
que depende do seu ambiente e dos seus requisitos.
Se você encontrar esse problema e o upgrade ou a atualização ainda não
forem concluídos após um longo período,
entre em contato
com nossa equipe de suporte para mitigação.
|
Instalação, upgrades e atualizações |
1.10.2, 1.11, 1.12, 1.13 |
Falha na simulação da validação da imagem do SO gkectl prepare
Falha no comando gkectl prepare com:
- Validation Category: OS Images
- [FAILURE] Admin cluster OS images exist: os images [os_image_name] don't exist, please run `gkectl prepare` to upload os images.
As verificações de simulação de gkectl prepare incluíram uma
validação incorreta.
Alternativa:
Execute o mesmo comando com uma flag adicional
--skip-validation-os-images .
|
Instalação |
1.7, 1.8, 1.9, 1.10, 1.11, 1.12, 1.13 |
O URL do vCenter com prefixo https:// ou http://
pode causar falha na inicialização do cluster
Falha na criação do cluster de administrador com:
Exit with error:
Failed to create root cluster: unable to apply admin base bundle to external cluster: error: timed out waiting for the condition, message:
Failed to apply external bundle components: failed to apply bundle objects from admin-vsphere-credentials-secret 1.x.y-gke.z to cluster external: Secret "vsphere-dynamic-credentials" is invalid:
[data[https://xxx.xxx.xxx.username]: Invalid value: "https://xxx.xxx.xxx.username": a valid config key must consist of alphanumeric characters, '-', '_' or '.'
(e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+'), data[https://xxx.xxx.xxx.password]:
Invalid value: "https://xxx.xxx.xxx.password": a valid config key must consist of alphanumeric characters, '-', '_' or '.'
(e.g. 'key.name', or 'KEY_NAME', or 'key-name', regex used for validation is '[-._a-zA-Z0-9]+')]
O URL é usado como parte de uma chave de Secret, que não
é compatível com "/" ou ":".
Alternativa:
Remova o prefixo https:// ou http:// do
campo vCenter.Address no yaml de configuração do cluster de
usuário ou no cluster de administrador.
|
Instalação, upgrades e atualizações |
1.10, 1.11, 1.12, 1.13 |
gkectl prepare com falha em util.CheckFileExists
gkectl prepare pode gerar falhas com o stacktrace
a seguir:
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0xde0dfa]
goroutine 1 [running]:
gke-internal.googlesource.com/syllogi/cluster-management/pkg/util.CheckFileExists(0xc001602210, 0x2b, 0xc001602210, 0x2b) pkg/util/util.go:226 +0x9a
gke-internal.googlesource.com/syllogi/cluster-management/gkectl/pkg/config/util.SetCertsForPrivateRegistry(0xc000053d70, 0x10, 0xc000f06f00, 0x4b4, 0x1, 0xc00015b400)gkectl/pkg/config/util/utils.go:75 +0x85
...
O problema é que gkectl prepare criava o diretório de certificado de
registro particular com uma permissão incorreta.
Alternativa:
Para corrigir esse problema, execute os comandos a seguir na estação de trabalho
do administrador:
sudo mkdir -p /etc/docker/certs.d/PRIVATE_REGISTRY_ADDRESS
sudo chmod 0755 /etc/docker/certs.d/PRIVATE_REGISTRY_ADDRESS
|
Upgrades e atualizações |
1.10, 1.11, 1.12, 1.13 |
gkectl repair admin-master e o upgrade de administrador retomável não
funcionam juntos
Após uma falha na tentativa de upgrade do cluster de administrador, não execute gkectl
repair admin-master . Isso pode causar falhas nas próximas tentativas de upgrade do administrador
com problemas como falha da alimentação mestre do administrador ou a
VM inacessível.
Alternativa:
Se você já encontrou esse cenário de falha,
entre em contato com o suporte.
|
Upgrades e atualizações |
1.10, 1.11 |
O upgrade do cluster de administrador retomado pode levar à ausência do modelo de VM do plano de controle do
administrador
Se a máquina do plano de controle do administrador não for recriada após uma tentativa de upgrade do cluster
de administrador retomado, o modelo de VM do plano de controle do administrador vai ser
excluído. O modelo de VM do plano de controle do administrador é o modelo mestre de
administração usado para recuperar a máquina do plano de controle com
gkectl
repair admin-master .
Alternativa:
O modelo de VM do plano de controle do administrador vai ser gerado novamente durante o próximo
upgrade de cluster de administrador.
|
Sistema operacional |
1.12, 1.13 |
O cgroup v2 pode afetar as cargas de trabalho
Na versão 1.12.0, o cgroup v2 (unificado) é ativado por padrão para
nós do Container Optimized OS (COS). Isso pode causar
instabilidade nas cargas de trabalho em um cluster do COS.
Alternativa:
Voltamos ao cgroup v1 (híbrido) na versão 1.12.1. Se você estiver
usando nós do COS, recomendamos fazer upgrade para a versão 1.12.1
assim que ela for lançada.
|
Identidade |
1.10, 1.11, 1.12, 1.13 |
Recurso personalizado ClientConfig
gkectl update reverte todas as alterações manuais
feitas para o recurso personalizado ClientConfig.
Alternativa:
É altamente recomendável que você faça backup do recurso ClientConfig após
cada alteração manual.
|
Instalação |
1.10, 1.11, 1.12, 1.13 |
Falha na validação de gkectl check-config : não é possível encontrar
partições de F5 BIG-IP
A validação falha porque não são encontradas partições de F5 BIG-IP, embora
elas existam.
Um problema com a API F5 BIG-IP pode causar falha na validação.
Alternativa:
Tente executar gkectl check-config novamente.
|
Instalação |
1.12 |
Falha na instalação do cluster de usuário devido ao problema de eleição do líder do
cert-manager/ca-injector
Pode haver uma falha na instalação devido a
cert-manager-cainjector no loop de falhas, quando o apiserver/etcd
está lento:
# These are logs from `cert-manager-cainjector`, from the command
# `kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system
cert-manager-cainjector-xxx`
I0923 16:19:27.911174 1 leaderelection.go:278] failed to renew lease kube-system/cert-manager-cainjector-leader-election: timed out waiting for the condition
E0923 16:19:27.911110 1 leaderelection.go:321] error retrieving resource lock kube-system/cert-manager-cainjector-leader-election-core:
Get "https://10.96.0.1:443/api/v1/namespaces/kube-system/configmaps/cert-manager-cainjector-leader-election-core": context deadline exceeded
I0923 16:19:27.911593 1 leaderelection.go:278] failed to renew lease kube-system/cert-manager-cainjector-leader-election-core: timed out waiting for the condition
E0923 16:19:27.911629 1 start.go:163] cert-manager/ca-injector "msg"="error running core-only manager" "error"="leader election lost"
Alternativa:
Ver etapas de solução alternativa
Execute os comandos a seguir para atenuar o problema.
Primeiro reduza a escala vertical no monitoring-operator para não
reverter as alterações na implantação do cert-manager :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
scale deployment monitoring-operator --replicas=0
Edite a implantação cert-manager-cainjector para desativar
a eleição do líder, porque temos apenas uma réplica em execução. Ela não
é necessária para uma única réplica:
# Add a command line flag for cainjector: `--leader-elect=false`
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit \
-n kube-system deployment cert-manager-cainjector
O snippet YAML relevante para a implantação
cert-manager-cainjector será semelhante ao exemplo a seguir:
...
apiVersion: apps/v1
kind: Deployment
metadata:
name: cert-manager-cainjector
namespace: kube-system
...
spec:
...
template:
...
spec:
...
containers:
- name: cert-manager
image: "gcr.io/gke-on-prem-staging/cert-manager-cainjector:v1.0.3-gke.0"
args:
...
- --leader-elect=false
...
Mantenha as réplicas de monitoring-operator em 0 como uma mitigação
até que a instalação seja concluída. Caso contrário, a alteração será revertida.
Depois que a instalação for concluída e o cluster estiver em execução,
ative o monitoring-operator para as operações do segundo dia:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG -n kube-system \
scale deployment monitoring-operator --replicas=1
Após cada upgrade, as alterações são revertidas. Siga as mesmas
etapas novamente para atenuar o problema até que isso seja corrigido em uma
versão futura.
|
VMware |
1.10, 1.11, 1.12, 1.13 |
Como reiniciar ou fazer upgrade do vCenter em versões anteriores à 7.0U2
Se o vCenter, para versões anteriores à 7.0U2, for reiniciado, após um
upgrade ou de outra forma, o nome da rede nas informações da VM do vCenter estará
incorreto e resultará na máquina em um estado
Unavailable . Isso leva os nós a serem reparados automaticamente para criar
outros.
Bug govmomi
relacionado.
Alternativa:
Esta solução alternativa é fornecida pelo suporte da VMware:
- O problema foi corrigido na versão 7.0U2 e mais recentes do vCenter.
- Para versões anteriores, clique com o botão direito do mouse no host e selecione
Conexão > Desconectar. Em seguida, reconecte-se, o que força uma atualização
do grupo de portas da VM.
|
Sistema operacional |
1.10, 1.11, 1.12, 1.13 |
Conexão SSH fechada pelo host remoto
Para a versão 1.7.2 e mais recentes do GKE no VMware, as imagens do SO Ubuntu
são reforçadas com o
CIS L1 Server Benchmark (em inglês).
Para atender à regra do CIS "5.2.16 Verificar se o intervalo de tempo limite de inatividade SSH está
configurado", o /etc/ssh/sshd_config tem as seguintes
configurações:
ClientAliveInterval 300
ClientAliveCountMax 0
O objetivo dessas configurações é encerrar a sessão de um cliente após cinco
minutos de inatividade. No entanto, o valor ClientAliveCountMax 0
causa um comportamento inesperado. Quando você usa a sessão SSH na
estação de trabalho de administrador ou em um nó de cluster, a conexão SSH pode ser
desconectada mesmo que o cliente SSH não esteja inativo, como ao executar um
comando demorado e seu comando pode ser encerrado com a
seguinte mensagem:
Connection to [IP] closed by remote host.
Connection to [IP] closed.
Alternativa:
Você pode fazer o seguinte:
Reconecte sua sessão SSH.
|
Instalação |
1.10, 1.11, 1.12, 1.13 |
Instalação conflitante do cert-manager
Nas versões 1.13, o monitoring-operator vai instalar
o gerenciador de certificados no namespace cert-manager . Se por algum
motivo você precisar instalar seu próprio gerenciador de certificados, siga as
instruções a seguir para evitar conflitos:
Basta aplicar essa solução uma vez para cada cluster, e as
alterações serão preservadas no upgrade do cluster.
Observação: um sintoma comum de instalação do gerenciador de certificados
é que a versão cert-manager ou a imagem (por exemplo,
v1.7.2) pode reverter para a versão anterior. Isso é causado por
monitoring-operator ao tentar reconciliar o
cert-manager e reverter a versão no processo.
Alternativa:
<pEvite conflitos durante o upgrade
- Desinstale sua versão de
cert-manager . Se você definiu
seus próprios recursos, recomendamos
fazer backup
deles.
- Faça upgrade.
- Siga as instruções a seguir para restaurar seu próprio
cert-manager .
Restaurar o próprio gerenciador de certificados em clusters de usuário
- Escalone a implantação
monitoring-operator para 0:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n USER_CLUSTER_NAME \
scale deployment monitoring-operator --replicas=0
- Escalone as implantações
cert-manager gerenciadas por
monitoring-operator para 0:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager --replicas=0
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager-cainjector\
--replicas=0
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager-webhook --replicas=0
- Reinstale a versão do
cert-manager .
Restaure
os recursos personalizados se você os tiver.
- Pule esta etapa se você estiver usando a instalação do gerenciador de certificados padrão upstream ou se tiver certeza de que o gerenciador de certificados está instalado no namespace
cert-manager .
Caso contrário, copie o certificado cert-manager.io/v1
metrics-ca e os recursos de emissor metrics-pki.cluster.local
de cert-manager para o namespace de recursos
do cluster do cert-manager instalado.
relevant_fields='
{
apiVersion: .apiVersion,
kind: .kind,
metadata: {
name: .metadata.name,
namespace: "YOUR_INSTALLED_CERT_MANAGER_NAMESPACE"
},
spec: .spec
}
'
f1=$(mktemp)
f2=$(mktemp)
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
get issuer -n cert-manager metrics-pki.cluster.local -o json \
| jq "${relevant_fields}" > $f1
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
get certificate -n cert-manager metrics-ca -o json \
| jq "${relevant_fields}" > $f2
kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f $f1
kubectl apply --kubeconfig USER_CLUSTER_KUBECONFIG -f $f2
Restaurar o próprio gerenciador de certificados em clusters de administrador
Em geral, não é necessário reinstalar o cert-manager nos clusters
de administrador porque os clusters de administrador só executam cargas de trabalho do plano de controle
do GKE no VMware. Nos raros casos em que você também precisa instalar seu próprio gerenciador de certificados em clusters de administrador, siga as instruções a seguir para evitar conflitos. Se você é cliente da Apigee e precisa apenas de um gerenciador de certificados para a Apigee, não é necessário executar os comandos de cluster de administrador.
- Escalone a implantação de
monitoring-operator para 0.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n kube-system scale deployment monitoring-operator --replicas=0
- Escalone as implantações de
cert-manager gerenciadas por
monitoring-operator para zero.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager \
--replicas=0
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager-cainjector \
--replicas=0
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
-n cert-manager scale deployment cert-manager-webhook \
--replicas=0
- Reinstale a versão do
cert-manager .
Restaure
os recursos personalizados se você os tiver.
- Pule esta etapa se você estiver usando a instalação do gerenciador de certificados padrão upstream ou se tiver certeza de que o gerenciador de certificados está instalado no namespace
cert-manager .
Caso contrário, copie o certificado cert-manager.io/v1
metrics-ca e os recursos de emissor metrics-pki.cluster.local
de cert-manager para o namespace de recursos
do cluster do cert-manager instalado.
relevant_fields='
{
apiVersion: .apiVersion,
kind: .kind,
metadata: {
name: .metadata.name,
namespace: "YOUR_INSTALLED_CERT_MANAGER_NAMESPACE"
},
spec: .spec
}
'
f3=$(mktemp)
f4=$(mktemp)
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \n
get issuer -n cert-manager metrics-pki.cluster.local -o json \
| jq "${relevant_fields}" > $f3
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
get certificate -n cert-manager metrics-ca -o json \
| jq "${relevant_fields}" > $f4
kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f3
kubectl apply --kubeconfig ADMIN_CLUSTER_KUBECONFIG -f $f4
</p |
Sistema operacional |
1.10, 1.11, 1.12, 1.13 |
Falsos positivos na verificação de vulnerabilidades do Docker, containerd e runc
O Docker, o containerd e o Runc nas imagens do SO Ubuntu enviadas com o GKE no VMware são fixados em versões especiais usando o Ubuntu PPA (em inglês). Isso garante que
todas as alterações no ambiente de execução do contêiner sejam qualificadas pelo
GKE no VMware antes de cada versão.
No entanto, as versões especiais são desconhecidas para o
Ubuntu CVE
Tracker, que é usado como os feeds de vulnerabilidade por várias
ferramentas de verificação da CVE. Portanto, você terá falsos positivos nos resultados do Docker,
do containerd e de verificação de vulnerabilidade do runc.
Por exemplo, os falsos positivos a seguir podem ser exibidos nos resultados da verificação
da CVE. Essas CVEs já foram corrigidas nas versões de patch mais recentes do GKE no VMware.
Consulte as notas da versão
para conferir correções da CVE.
Alternativa:
A Canonical está ciente desse problema, e a correção é
rastreada em
https://github.com/canonical/sec-cvescan/issues/73.
|
Upgrades e atualizações |
1.10, 1.11, 1.12, 1.13 |
A conexão de rede entre o cluster de administrador e de usuário pode ficar indisponível
por um curto período durante o upgrade de um cluster que não seja de alta disponibilidade
Se você estiver fazendo upgrade dos clusters que não são de alta disponibilidade da versão 1.9 para a 1.10, talvez
perceba que kubectl exec , kubectl log e o webhook
nos clusters de usuários podem ficar indisponíveis por um curto período. Essa inatividade
pode ser de até um minuto. Isso acontece porque a solicitação de entrada
(kubectl exec, kubectl log e webhook) é processada pelo kube-apiserver para o
cluster de usuário. O usuário kube-apiserver é um
Statefulset. Em um cluster que não seja de alta disponibilidade, há apenas
uma réplica para o Statefulset. Portanto, durante o upgrade, é possível que o kube-apiserver
antigo fique indisponível enquanto o novo kube-apiserver ainda não estiver
pronto.
Alternativa:
Esse tempo de inatividade ocorre apenas durante o processo de upgrade. Se você quiser uma
inatividade mais curta durante o upgrade, recomendamos que mude para
clusters de
alta disponibilidade.
|
Instalação, upgrades e atualizações |
1.10, 1.11, 1.12, 1.13 |
Falha na verificação de prontidão conectividade no diagnóstico do cluster de alta disponibilidade após
a criação ou upgrade do cluster
Se você estiver criando ou atualizando um cluster de alta disponibilidade e perceber que a verificação de prontidão
de disponibilidade falhou no diagnóstico do cluster, na maioria dos casos, isso não
afetará a funcionalidade do GKE no VMware (kubectl exec, kubectl
log e webhook). Isso acontece porque, às vezes, uma ou duas
réplicas de konnectivity podem ficar inativas por um período devido a
instabilidade da rede ou outros problemas.
Alternativa:
O konnectivity será recuperada por conta própria. Aguarde 30 minutos a uma hora
e execute novamente o diagnóstico do cluster.
|
Sistema operacional |
1.7, 1.8, 1.9, 1.10, 1.11 |
Problema de CPU e pico de memória /etc/cron.daily/aide
A partir da versão 1.7.2 do GKE no VMware, as imagens do SO Ubuntu
são reforçadas com o
Comparativo de mercado CIS L1 do
servidor.
Como resultado, o script cron /etc/cron.daily/aide foi
instalado para que uma verificação aide seja programada para garantir
que a regra do CIS L1 Server "1.4.2 Garanta que a integridade do sistema de arquivos seja
verificada regularmente" seja seguida.
O cron job é executado diariamente às 6h 25m UTC. Dependendo do número de arquivos no sistema de arquivos,
você talvez tenha picos de uso de CPU e memória em torno desse horário, causados por esse processo aide .
Alternativa:
Se os picos estiverem afetando sua carga de trabalho, desative o cron job diário:
sudo chmod -x /etc/cron.daily/aide
|
Rede |
1.10, 1.11, 1.12, 1.13 |
Os balanceadores de carga e as regras de firewall distribuídas de estado NSX-T interagem de maneira imprevisível
Ao implantar o GKE no VMware versão 1.9 ou mais recente, quando a
implantação tiver o balanceador de carga em pacote Seesaw em um ambiente que
usa regras de firewall distribuídas com estado NSX-T,
stackdriver-operator poderá não criar o
ConfigMap gke-metrics-agent-conf e fazer com que os
pods gke-connect-agent fiquem em um loop de falha.
O problema é que as regras de firewall distribuídas com estado NSX-T encerram a conexão de um cliente com o servidor da API do cluster de usuário pelo balanceador de carga Seesaw porque o Seesaw usa fluxos de conexão assimétricos. Os problemas de integração com as regras de firewall
distribuídas NSX-T afetam todas as versões do GKE no VMware que usam o Seesaw. Você pode encontrar problemas de conexão semelhantes nos seus aplicativos ao criar objetos grandes do Kubernetes com tamanhos maiores que 32 K.
Alternativa:
Siga estas instruções para desativar as regras de firewall distribuídas NSX-T ou para usar regras de firewall distribuídas sem estado para VMs do Seesaw.
Se os clusters usarem um balanceador de carga manual, siga estas instruções para configurar o balanceador de carga para redefinir as conexões do cliente quando detectar uma falha no nó de back-end. Sem essa configuração, os clientes do servidor da API Kubernetes poderão ficar minutos sem responder quando uma instância do servidor ficar inativa.
|
Geração de registros e monitoramento |
1.10, 1.11, 1.12, 1.13, 1.14, 1.15 |
Faturamento inesperado de monitoramento
Para as versões 1.10 a 1.15 do GKE no VMware, alguns clientes
perceberam um aumento inesperado no faturamento do Metrics volume na página
Faturamento. Esse problema afeta você apenas quando ambas as circunstâncias a seguir se aplicarem:
- A geração de registros e o monitoramento de aplicativos estão ativados (
enableStackdriverForApplications=true )
- Os pods do aplicativo têm a anotação
prometheus.io/scrap=true . A instalação do Anthos Service Mesh também pode adicionar essa anotação.
Para confirmar se você foi afetado por esse problema,
liste as métricas definidas pelo usuário. Se aparecer faturamento para métricas indesejadas com o prefixo de nome external.googleapis.com/prometheus e se enableStackdriverForApplications definido como verdadeiro na resposta de kubectl -n kube-system get stackdriver stackdriver -o yaml , esse problema se aplicará a você.
Alternativa
Se você for afetado por esse problema, recomendamos fazer upgrade dos
clusters para a versão 1.12 ou mais recente, parar de usar a sinalização enableStackdriverForApplications e mudar para a nova solução de monitoramento de aplicativos managed-service-for-prometheus, que não depende mais da anotação prometheus.io/scrap=true . Com a nova solução, também é possível controlar a coleta de registros e métricas separadamente nos seus aplicativos usando as flags enableCloudLoggingForApplications e enableGMPForApplications , respectivamente.
Para parar de usar a sinalização enableStackdriverForApplications , abra o objeto "stackdriver" para edição:
kubectl --kubeconfig=USER_CLUSTER_KUBECONFIG --namespace kube-system edit stackdriver stackdriver
Remova a linha enableStackdriverForApplications: true , salve e feche o editor.
Se não for possível mudar da coleta de métricas com base em anotações, siga estas etapas:
- Encontre os pods e serviços de origem que têm as métricas faturadas indesejadas.
kubectl --kubeconfig KUBECONFIG \
get pods -A -o yaml | grep 'prometheus.io/scrape: "true"'
kubectl --kubeconfig KUBECONFIG get \
services -A -o yaml | grep 'prometheus.io/scrape: "true"'
- Remova a anotação
prometheus.io/scrap=true do pod ou do serviço. Se a anotação for adicionada pelo Anthos Service Mesh, considere configurar o Anthos Service Mesh sem a opção Prometheus ou desativar o recurso de mesclagem de métricas do Istio.
|
Instalação |
1.11, 1.12, 1.13 |
O instalador falha ao criar um disco de dados do vSphere
O instalador do GKE no VMware pode falhar se os papéis personalizados estiverem vinculados
ao nível de permissões errado.
Quando a vinculação de papel está incorreta, a criação de um disco de dados do vSphere com
govc trava e o disco é criado com um tamanho igual a 0. Para
corrigir o problema, você precisa vincular o papel personalizado no
nível do vSphere vCenter (raiz).
Alternativa:
Se você quiser vincular o papel personalizado no nível do DC
(ou inferior à raiz), também é necessário vincular o papel
somente leitura ao usuário no nível raiz do vCenter.
Para mais informações sobre a criação de papéis, consulte
Privilégios de conta de usuário do vCenter.
|
Geração de registros e monitoramento |
1.9.0-1.9.4, 1.10.0-1.10.1 |
Tráfego de rede alto para monitoring.googleapis.com
É possível que você veja um tráfego de rede alto para
monitoring.googleapis.com , mesmo em um novo cluster que não tenha
cargas de trabalho de usuários.
Esse problema afeta as versões 1.10.0-1.10.1 e 1.9.0-1.9.4. Esse problema foi corrigido nas
versões 1.10.2 e 1.9.5.
Alternativa:
Ver etapas de solução alternativa
Faça upgrade para a versão 1.10.2/1.9.5 ou posterior.
Para atenuar esse problema em uma versão anterior, siga estas etapas:
- Reduza a escala de "stackdriver-operator":
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system \
scale deployment stackdriver-operator --replicas=0
Substitua USER_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig do cluster de usuário.
- Abra o ConfigMap
gke-metrics-agent-conf para edição:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system \
edit configmap gke-metrics-agent-conf
- Aumente o intervalo da sondagem de 0,1 segundo para 13 segundos:
processors:
disk_buffer/metrics:
backend_endpoint: https://monitoring.googleapis.com:443
buffer_dir: /metrics-data/nsq-metrics-metrics
probe_interval: 13s
retention_size_mib: 6144
disk_buffer/self:
backend_endpoint: https://monitoring.googleapis.com:443
buffer_dir: /metrics-data/nsq-metrics-self
probe_interval: 13s
retention_size_mib: 200
disk_buffer/uptime:
backend_endpoint: https://monitoring.googleapis.com:443
buffer_dir: /metrics-data/nsq-metrics-uptime
probe_interval: 13s
retention_size_mib: 200
- Fechar a sessão de edição.
- Altere a versão do DaemonSet
gke-metrics-agent para 1.1.0-anthos.8:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system set image daemonset/gke-metrics-agent \
gke-metrics-agent=gcr.io/gke-on-prem-release/gke-metrics-agent:1.1.0-anthos.8
|
Geração de registros e monitoramento |
1.10, 1.11 |
gke-metrics-agent tem erros CrashLoopBackOff frequentes
Para o GKE on VMware versão 1.10 e mais recentes, o DaemonSet "gke-metrics-agent"
tem erros CrashLoopBackOff frequentes quando
"enable StackdriverForApplications" está definido como "true" no objeto "stackdriver"
.
Alternativa:
Para minimizar esse problema, desative a coleta de métricas do aplicativo executando os comandos a seguir. Esses comandos não desativam a coleta de registros de aplicativos.
- Para evitar que as mudanças a seguir sejam revertidas, reduzir escala vertical
stackdriver-operator :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system scale deploy stackdriver-operator \
--replicas=0
Substitua USER_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig do
cluster de usuário.
- Abra o ConfigMap
gke-metrics-agent-conf para edição:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system edit configmap gke-metrics-agent-conf
- Em
services.pipelines , comente toda a
seção metrics/app-metrics :
services:
pipelines:
#metrics/app-metrics:
# exporters:
# - googlecloud/app-metrics
# processors:
# - resource
# - metric_to_resource
# - infer_resource
# - disk_buffer/app-metrics
# receivers:
# - prometheus/app-metrics
metrics/metrics:
exporters:
- googlecloud/metrics
processors:
- resource
- metric_to_resource
- infer_resource
- disk_buffer/metrics
receivers:
- prometheus/metrics
- Fechar a sessão de edição.
- Reinicie o DaemonSet
gke-metrics-agent :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system rollout restart daemonset gke-metrics-agent
|
Geração de registros e monitoramento |
1.11, 1.12, 1.13 |
Substituir métricas com uso descontinuado no painel
Se as métricas descontinuadas forem usadas nos painéis de OOTB, alguns gráficos vazios serão exibidos. Para encontrar métricas descontinuadas nos painéis do Monitoring, execute os seguintes comandos:
gcloud monitoring dashboards list > all-dashboard.json
# find deprecated metrics
cat all-dashboard.json | grep -E \
'kube_daemonset_updated_number_scheduled\
|kube_node_status_allocatable_cpu_cores\
|kube_node_status_allocatable_pods\
|kube_node_status_capacity_cpu_cores'
As métricas descontinuadas a seguir precisam ser migradas para as substituições.
Descontinuado | Substituição |
kube_daemonset_updated_number_scheduled |
kube_daemonset_status_updated_number_scheduled |
kube_node_status_allocatable_cpu_cores
kube_node_status_allocatable_memory_bytes
kube_node_status_allocatable_pods |
kube_node_status_allocatable |
kube_node_status_capacity_cpu_cores
kube_node_status_capacity_memory_bytes
kube_node_status_capacity_pods |
kube_node_status_capacity |
kube_hpa_status_current_replicas |
kube_horizontalpodautoscaler_status_current_replicas |
Alternativa:
Para substituir as métricas descontinuadas:
- Exclua o "Status do nó do GKE On-Prem" no painel do Google Cloud Monitoring. Reinstale o "Status do nó do GKE On-Prem" seguindo estas instruções.
- Exclua "Utilização do nó do GKE On-Prem" no painel do Google Cloud Monitoring. Reinstale a "Utilização de nós do GKE On-Prem" seguindo estas instruções.
- Exclua "Integridade de VM do vSphere do GKE On-Prem" no painel do Google Cloud Monitoring. Reinstale "Integridade de VM do vSphere do GKE On-Prem" seguindo estas instruções.
Essa descontinuação ocorre devido ao upgrade do agente kube-state-metrics da v1.9 para a v2.4, que é necessário para o Kubernetes 1.22. É possível substituir todas as métricas kube-state-metrics descontinuadas, que têm o prefixo kube_ , nos painéis personalizados ou nas políticas de alertas.
|
Geração de registros e monitoramento |
1.10, 1.11, 1.12, 1.13 |
Dados de métrica desconhecidos no Cloud Monitoring
Para a versão 1.10 e mais recentes do GKE no VMware, os dados dos
clusters no Cloud Monitoring podem conter entradas de métricas resumidas irrelevantes,
como as seguintes:
Unknown metric: kubernetes.io/anthos/go_gc_duration_seconds_summary_percentile
Outros tipos de métricas que podem ter métricas de resumo irrelevantes incluem: :
apiserver_admission_step_admission_duration_seconds_summary
go_gc_duration_seconds
scheduler_scheduling_duration_seconds
gkeconnect_http_request_duration_seconds_summary
alertmanager_nflog_snapshot_duration_seconds_summary
Embora essas métricas de tipo de resumo estejam na lista de métricas, elas não são compatíveis com gke-metrics-agent no momento.
|
Geração de registros e monitoramento |
1.10, 1.11, 1.12, 1.13 |
Métricas ausentes em alguns nós
Talvez você se depare com as seguintes métricas ausentes em alguns nós, mas não em todos:
kubernetes.io/anthos/container_memory_working_set_bytes
kubernetes.io/anthos/container_cpu_usage_seconds_total
kubernetes.io/anthos/container_network_receive_bytes_total
Alternativa:
Para corrigir esse problema, siga as seguintes etapas como uma solução alternativa. Para
[versão 1.9.5+, 1.10.2+, 1.11.0]: aumente a CPU do gke-metrics-agent seguindo as etapas de 1 a 4
- Abra seu recurso
stackdriver para edição:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system edit stackdriver stackdriver
- Para aumentar a solicitação de CPU para
gke-metrics-agent de
10m para 50m , o limite de CPU de 100m
para 200m adiciona a seguinte seção resourceAttrOverride
ao manifesto stackdriver :
spec:
resourceAttrOverride:
gke-metrics-agent/gke-metrics-agent:
limits:
cpu: 100m
memory: 4608Mi
requests:
cpu: 10m
memory: 200Mi
O recurso editado vai ficar assim:
spec:
anthosDistribution: on-prem
clusterLocation: us-west1-a
clusterName: my-cluster
enableStackdriverForApplications: true
gcpServiceAccountSecretName: ...
optimizedMetrics: true
portable: true
projectID: my-project-191923
proxyConfigSecretName: ...
resourceAttrOverride:
gke-metrics-agent/gke-metrics-agent:
limits:
cpu: 200m
memory: 4608Mi
requests:
cpu: 50m
memory: 200Mi
- Salve as alterações e feche o editor de texto.
- Para verificar se as mudanças entraram em vigor, execute o seguinte comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system get daemonset gke-metrics-agent -o yaml \
| grep "cpu: 50m"
.
Ele encontra cpu: 50m se as edições entraram em vigor.
|
Geração de registros e monitoramento |
1.11.0-1.11.2, 1.12.0 |
Não há métricas do programador e do gerenciador de controladores no cluster de administrador
Se o cluster de administrador for afetado por esse problema, as métricas do programador e do gerenciador de controladores estão ausentes. Por exemplo, essas duas métricas estão ausentes
# scheduler metric example
scheduler_pending_pods
# controller-manager metric example
replicaset_controller_rate_limiter_use
Alternativa:
Faça upgrade para a v1.11.3+, v1.12.1+ ou v1.13+.
|
|
1.11.0-1.11.2, 1.12.0 |
Não há métricas do programador e do gerenciador de controladores no cluster de usuário
Se o cluster de usuário for afetado por esse problema, as métricas do programador e do gerenciador de controladores estão ausentes. Por exemplo, essas duas métricas estão ausentes:
# scheduler metric example
scheduler_pending_pods
# controller-manager metric example
replicaset_controller_rate_limiter_use
Alternativa:
Esse problema foi corrigido no GKE on VMware versão 1.13.0 e posterior.
Faça upgrade do cluster para uma versão com a correção.
|
Instalação, upgrades e atualizações |
1.10, 1.11, 1.12, 1.13 |
Falha ao registrar o cluster de administrador durante a criação
Se você criar um cluster de administrador para a versão 1.9.x ou 1.10.0 e se o cluster de administrador não for registrado com a especificação gkeConnect fornecida durante a criação, você vai receber o seguinte erro.
Failed to create root cluster: failed to register admin cluster: failed to register cluster: failed to apply Hub Membership: Membership API request failed: rpc error: ode = PermissionDenied desc = Permission 'gkehub.memberships.get' denied on PROJECT_PATH
Você ainda vai poder usar esse cluster de administrador, mas receberá o seguinte erro se tentar fazer upgrade do cluster de administrador para a versão 1.10.y.
failed to migrate to first admin trust chain: failed to parse current version "": invalid version: "" failed to migrate to first admin trust chain: failed to parse current version "": invalid version: ""
Alternativa:
Ver etapas de solução alternativa
Se esse erro ocorrer, siga estas etapas para corrigir o problema de registro do cluster. Depois de fazer essa correção, você pode fazer upgrade do cluster de administrador.
- Execute
gkectl update admin para registrar o cluster de administrador com a chave de conta de serviço correta.
- Crie uma conta de serviço dedicada para corrigir o
recurso personalizado
OnPremAdminCluster .
export KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
# Create Service Account modify-admin
kubectl apply -f - <<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: modify-admin
namespace: kube-system
EOF
# Create ClusterRole
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: modify-admin-role
rules:
- apiGroups:
- "onprem.cluster.gke.io"
resources:
- "onpremadminclusters/status"
verbs:
- "patch"
EOF
# Create ClusterRoleBinding for binding the permissions to the modify-admin SA
kubectl apply -f - <<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
creationTimestamp: null
name: modify-admin-rolebinding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: modify-admin-role
subjects:
- kind: ServiceAccount
name: modify-admin
namespace: kube-system
EOF
Substitua ADMIN_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig do cluster
de administrador.
- Execute estes comandos para atualizar o recurso personalizado
OnPremAdminCluster .
export KUBECONFIG=ADMIN_CLUSTER_KUBECONFIG
SERVICE_ACCOUNT=modify-admin
SECRET=$(kubectl get serviceaccount ${SERVICE_ACCOUNT} \
-n kube-system -o json \
| jq -Mr '.secrets[].name | select(contains("token"))')
TOKEN=$(kubectl get secret ${SECRET} -n kube-system -o json \
| jq -Mr '.data.token' | base64 -d)
kubectl get secret ${SECRET} -n kube-system -o json \
| jq -Mr '.data["ca.crt"]' \
| base64 -d > /tmp/ca.crt
APISERVER=https://$(kubectl -n default get endpoints kubernetes \
--no-headers | awk '{ print $2 }')
# Find out the admin cluster name and gkeOnPremVersion from the OnPremAdminCluster CR
ADMIN_CLUSTER_NAME=$(kubectl get onpremadmincluster -n kube-system \
--no-headers | awk '{ print $1 }')
GKE_ON_PREM_VERSION=$(kubectl get onpremadmincluster \
-n kube-system $ADMIN_CLUSTER_NAME \
-o=jsonpath='{.spec.gkeOnPremVersion}')
# Create the Status field and set the gkeOnPremVersion in OnPremAdminCluster CR
curl -H "Accept: application/json" \
--header "Authorization: Bearer $TOKEN" -XPATCH \
-H "Content-Type: application/merge-patch+json" \
--cacert /tmp/ca.crt \
--data '{"status": {"gkeOnPremVersion": "'$GKE_ON_PREM_VERSION'"}}' \
$APISERVER/apis/onprem.cluster.gke.io/v1alpha1/namespaces/kube-system/onpremadminclusters/$ADMIN_CLUSTER_NAME/status
- Tente fazer upgrade do cluster de administrador novamente com a
sinalização
--disable-upgrade-from-checkpoint .
gkectl upgrade admin --config ADMIN_CLUSTER_CONFIG \
--kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--disable-upgrade-from-checkpoint
Substitua ADMIN_CLUSTER_CONFIG pelo caminho do arquivo de configuração do cluster de administrador.
|
Identidade |
1.10, 1.11, 1.12, 1.13 |
O uso do serviço de identidade do GKE pode fazer com que o
agente do Connect seja reiniciado de forma imprevisível
Se você estiver usando o recurso
Serviço de identidade do GKE
para gerenciar o
ClientConfig do serviço de identidade do GKE, o
Connect Agent poderá ser reiniciado inesperadamente.
Alternativa:
Se você tiver esse problema com um cluster existente, siga um destes procedimentos:
|
Rede |
1.10, 1.11, 1.12, 1.13 |
Cisco ACI não funciona com o retorno direto de servidor (DSR, na sigla em inglês)
O Seesaw é executado no modo DSR. Por padrão, ele não funciona na Cisco ACI devido ao aprendizado de IP de plano de dados.
Alternativa:
Uma possível solução alternativa é desativar o aprendizado de IP adicionando o endereço IP Seesaw como um IP virtual L4-L7 no Controlador de infraestrutura de política de aplicativo (APIC) da Cisco.
Para configurar a opção de IP virtual L4-L7, acesse Locatário > Perfis de aplicativo > EPGs de aplicativo ou EPGs uSeg. Se o aprendizado de IP não for desativado, o endpoint de IP vai oscilar entre diferentes locais na estrutura da API Cisco.
|
VMware |
1.10, 1.11, 1.12, 1.13 |
Problemas da atualização 3 do vSphere 7.0
A VMWare identificou recentemente problemas críticos nas seguintes versões da atualização 3 do vSphere 7.0:
- Atualização 3 do vSphere ESXi 7.0 (versão 18644231)
- Atualização 3a do vSphere ESXi 7.0 (versão 18825058)
- Atualização 3b do vSphere ESXi 7.0 (versão 18905247)
- Atualização 3b do vSphere vCenter 7.0 (versão 18901211)
Alternativa:
A VMWare removeu essas versões. Faça upgrade dos servidores de ESXi e vCenter para uma versão mais recente.
|
Sistema operacional |
1.10, 1.11, 1.12, 1.13 |
Falha ao montar o volume emptyDir como exec no pod em execução nos nós do COS
Para pods em execução em nós que usam imagens do Container-Optimized OS (COS), não é possível montar o volume emptyDir como exec . Ele é montado como noexec , e você receberá este erro: exec user
process caused: permission denied . Por exemplo, você receberá essa mensagem de erro se implantar o pod de teste a seguir:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: test
name: test
spec:
containers:
- args:
- sleep
- "5000"
image: gcr.io/google-containers/busybox:latest
name: test
volumeMounts:
- name: test-volume
mountPath: /test-volume
resources:
limits:
cpu: 200m
memory: 512Mi
dnsPolicy: ClusterFirst
restartPolicy: Always
volumes:
- emptyDir: {}
name: test-volume
No pod de teste, se você executar mount | grep test-volume , ele vai mostrar a opção noexec:
/dev/sda1 on /test-volume type ext4 (rw,nosuid,nodev,noexec,relatime,commit=30)
Alternativa:
Ver etapas de solução alternativa
Aplique um recurso de DaemonSet, por exemplo:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fix-cos-noexec
namespace: kube-system
spec:
selector:
matchLabels:
app: fix-cos-noexec
template:
metadata:
labels:
app: fix-cos-noexec
spec:
hostIPC: true
hostPID: true
containers:
- name: fix-cos-noexec
image: ubuntu
command: ["chroot", "/host", "bash", "-c"]
args:
- |
set -ex
while true; do
if ! $(nsenter -a -t 1 findmnt -l | grep -qe "^/var/lib/kubelet\s"); then
echo "remounting /var/lib/kubelet with exec"
nsenter -a -t 1 mount --bind /var/lib/kubelet /var/lib/kubelet
nsenter -a -t 1 mount -o remount,exec /var/lib/kubelet
fi
sleep 3600
done
volumeMounts:
- name: host
mountPath: /host
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
|
Upgrades e atualizações |
1.10, 1.11, 1.12, 1.13 |
A atualização da réplica do pool de nós de clusters não funciona depois que o escalonamento automático é desativado no pool de nós
As réplicas do pool de nós não são atualizadas depois que o escalonamento automático é ativado e desativado em um pool de nós.
Alternativa:
Remoção das anotações cluster.x-k8s.io/cluster-api-autoscaler-node-group-max-size e cluster.x-k8s.io/cluster-api-autoscaler-node-group-min-size da implantação da máquina do pool de nós correspondente.
|
Geração de registros e monitoramento |
1.11, 1.12, 1.13 |
Os painéis de monitoramento do Windows mostram dados de clusters do Linux
A partir da versão 1.11, nos painéis de monitoramento prontos para uso, o
painel de status do pod do Windows e o painel de status do nó do Windows também mostram
dados de clusters do Linux. Isso porque as métricas de nós e pods do Windows também
são expostas nos clusters do Linux.
|
Geração de registros e monitoramento |
1.10, 1.11, 1.12 |
stackdriver-log-forwarder na constante CrashLoopBackOff
Para o GKE on VMware versão 1.10, 1.11 e 1.12, stackdriver-log-forwarder
o DaemonSet pode ter erros CrashLoopBackOff quando há
registros em buffer corrompidos no disco.
Alternativa:
Para atenuar esse problema, precisaremos limpar os registros armazenados em buffer
no nó.
- Para evitar um comportamento inesperado, reduzir escala vertical
stackdriver-log-forwarder :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system patch daemonset stackdriver-log-forwarder -p '{"spec": {"template": {"spec": {"nodeSelector": {"non-existing": "true"}}}}}'
.
Substitua USER_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig do cluster de usuário.
- Implante o DaemonSet de limpeza para limpar os fragmentos corrompidos:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system -f - << EOF
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluent-bit-cleanup
namespace: kube-system
spec:
selector:
matchLabels:
app: fluent-bit-cleanup
template:
metadata:
labels:
app: fluent-bit-cleanup
spec:
containers:
- name: fluent-bit-cleanup
image: debian:10-slim
command: ["bash", "-c"]
args:
- |
rm -rf /var/log/fluent-bit-buffers/
echo "Fluent Bit local buffer is cleaned up."
sleep 3600
volumeMounts:
- name: varlog
mountPath: /var/log
securityContext:
privileged: true
tolerations:
- key: "CriticalAddonsOnly"
operator: "Exists"
- key: node-role.kubernetes.io/master
effect: NoSchedule
- key: node-role.gke.io/observability
effect: NoSchedule
volumes:
- name: varlog
hostPath:
path: /var/log
EOF
- Para garantir que o DaemonSet de limpeza limpou todos os blocos,
execute os seguintes comandos. A saída dos dois comandos
precisa ser igual ao número do nó no cluster:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
logs -n kube-system -l app=fluent-bit-cleanup | grep "cleaned up" | wc -l
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system get pods -l app=fluent-bit-cleanup --no-headers | wc -l
- Exclua o DaemonSet de limpeza:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system delete ds fluent-bit-cleanup
- Retomar
stackdriver-log-forwarder :
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
-n kube-system patch daemonset stackdriver-log-forwarder --type json -p='[{"op": "remove", "path": "/spec/template/spec/nodeSelector/non-existing"}]'
|
Geração de registros e monitoramento |
1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16 |
stackdriver-log-forwarder não envia registros para o Cloud Logging
Se você não vir registros dos clusters no Cloud Logging e
perceber o seguinte erro nos registros:
2023-06-02T10:53:40.444017427Z [2023/06/02 10:53:40] [error] [input chunk] chunk 1-1685703077.747168499.flb would exceed total limit size in plugin stackdriver.0
2023-06-02T10:53:40.444028047Z [2023/06/02 10:53:40] [error] [input chunk] no available chunk
É provável que a taxa de entrada de registros exceda o limite do agente do Logging,
o que faz com que stackdriver-log-forwarder não envie registros.
Esse problema ocorre em todas as versões do GKE no VMware.
Alternativa:
Para atenuar esse problema, é preciso aumentar o limite de recursos no agente de geração de registros.
- Abra seu recurso
stackdriver para edição:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system edit stackdriver stackdriver
- Para aumentar a solicitação de CPU para
stackdriver-log-forwarder ,
adicione a seguinte seção resourceAttrOverride
ao manifesto stackdriver :
spec:
resourceAttrOverride:
stackdriver-log-forwarder/stackdriver-log-forwarder:
limits:
cpu: 1200m
memory: 600Mi
requests:
cpu: 600m
memory: 600Mi
O recurso editado vai ficar parecido com este:
spec:
anthosDistribution: on-prem
clusterLocation: us-west1-a
clusterName: my-cluster
enableStackdriverForApplications: true
gcpServiceAccountSecretName: ...
optimizedMetrics: true
portable: true
projectID: my-project-191923
proxyConfigSecretName: ...
resourceAttrOverride:
stackdriver-log-forwarder/stackdriver-log-forwarder:
limits:
cpu: 1200m
memory: 600Mi
requests:
cpu: 600m
memory: 600Mi
- Salve as alterações e feche o editor de texto.
- Para verificar se as mudanças entraram em vigor, execute o seguinte comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \
--namespace kube-system get daemonset stackdriver-log-forwarder -o yaml \
| grep "cpu: 1200m"
.
Ele encontra cpu: 1200m se as edições entraram em vigor.
|
Segurança |
1.13 |
O serviço do Kubelet ficará temporariamente indisponível após o NodeReady
há um curto período em que o nó está pronto, mas o certificado do servidor do kubelet não está. kubectl exec e kubectl logs ficam indisponíveis durante esse período.
Isso ocorre porque leva tempo para o novo aprovador de certificado do servidor ver os IPs válidos atualizados do nó.
Esse problema afeta apenas o certificado do servidor kubelet. Ele não afeta a
programação do pod.
|
Upgrades e atualizações |
1.12 |
O upgrade parcial do cluster de administrador não bloqueia o upgrade posterior do cluster de usuário
Falha no upgrade do cluster de usuário com:
.LBKind in body is required (Check the status of OnPremUserCluster 'cl-stg-gdl-gke-onprem-mgmt/cl-stg-gdl' and the logs of pod 'kube-system/onprem-user-cluster-controller' for more detailed debugging information.
O cluster de administrador não recebeu upgrade completo, e a versão do status ainda é 1.10. O upgrade do cluster de usuário para 1.12 não será bloqueado por nenhuma verificação de simulação e falha com o problema de desvio de versão.
Alternativa:
Conclua o upgrade do cluster de administrador para a versão 1.11 e depois atualize o cluster de usuário para a 1.12.
|
Armazenamento |
1.10.0-1.10.5, 1.11.0-1.11.2, 1.12.0 |
O Datastore informa incorretamente que há espaço livre insuficiente
Falha do comando gkectl diagnose cluster com:
Checking VSphere Datastore FreeSpace...FAILURE
Reason: vCenter datastore: [DATASTORE_NAME] insufficient FreeSpace, requires at least [NUMBER] GB
A validação do espaço livre do repositório de dados não pode ser usada para pools de nós de clusters atuais e foi adicionada em gkectl diagnose cluster por engano.
Alternativa:
É possível ignorar a mensagem de erro ou pular a validação usando --skip-validation-infra .
|
Operação, rede |
1.11, 1.12.0-1.12.1 |
Talvez não seja possível adicionar um novo cluster de usuário se o cluster de administrador estiver definido com uma configuração do balanceador de carga MetalLB.
O processo de exclusão do cluster de usuário pode ficar travado por algum motivo, o que resulta em uma invalidação do ConfigMap MetalLB. Não será possível adicionar um novo cluster de usuário nesse estado.
Alternativa:
É possível forçar a exclusão do cluster de usuário.
|
Instalação, sistema operacional |
1.10, 1.11, 1.12, 1.13 |
Falha ao usar o Container-Optimized OS (COS) no cluster de usuário
Se osImageType estiver usando cos para o cluster
de administrador e quando gkectl check-config for executado após a criação
do cluster de administrador e antes da criação do cluster de usuário, ele falhará em:
Failed to create the test VMs: VM failed to get IP addresses on the network.
Por padrão, a VM de teste criada para o cluster de usuário check-config usa o mesmo osImageType do cluster de administrador. No momento, a VM de teste ainda não é compatível com o COS.
Alternativa:
Para evitar a verificação lenta de simulação, que cria a VM de teste, usando gkectl check-config --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config
USER_CLUSTER_CONFIG --fast .
|
Geração de registros e monitoramento |
1.12.0-1.12.1 |
O Grafana no cluster de administrador não consegue alcançar os clusters de usuário
Esse problema afeta os clientes que usam o Grafana no cluster de administrador para
monitorar clusters de usuário no GKE nas versões 1.12.0 e
1.12.1 do GKE no VMware. Ele é originado de uma incompatibilidade de certificados pushprox-client em clusters de usuário e a lista de permissões no pushprox-server no cluster de administrador.
O sintoma é o pushprox-client em registros de erro de impressão de clusters de usuários, como o seguinte:
level=error ts=2022-08-02T13:34:49.41999813Z caller=client.go:166 msg="Error reading request:" err="invalid method \"RBAC:\""
Alternativa:
Ver etapas de solução alternativa
Siga as etapas abaixo:
- Reduza a escala da implantação de operador de monitoramento no namespace
kube-system do cluster de administrador.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--namespace kube-system scale deploy monitoring-operator \
--replicas=0
- Edite o ConfigMap
pushprox-server-rbac-proxy-config no namespace kube-system do cluster de administrador.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
--namespace kube-system edit cm pushprox-server-rbac-proxy-config
Localize a linha principals do listener
external-pushprox-server-auth-proxy e corrija
o principal_name de todos os clusters de usuário removendo a substring
kube-system de
pushprox-client.metrics-consumers.kube-system.cluster. .
A nova configuração terá esta aparência:
permissions:
- or_rules:
rules:
- header: { name: ":path", exact_match: "/poll" }
- header: { name: ":path", exact_match: "/push" }
principals: [{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.kube-system.cluster.local"}}},{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.kube-system.cluster."}}},{"authenticated":{"principal_name":{"exact":"pushprox-client.metrics-consumers.cluster."}}}]
- Reinicie a implantação
pushprox-server no cluster
de administrador e a implantação pushprox-client nos clusters
de usuário afetados:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system rollout restart deploy pushprox-server
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG --namespace kube-system rollout restart deploy pushprox-client
- As etapas anteriores devem resolver o problema. Depois que o cluster for
atualizado para a versão 1.12.2 e posterior, quando o problema for corrigido, escalonar verticalmente o
cluster de administrador kube-system monitoring-operator para que ele possa gerenciar o
pipeline novamente.
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG --namespace kube-system scale deploy monitoring-operator --replicas=1
|
Outro |
1.11.3 |
gkectl repair admin-master não fornece o modelo de VM a ser usado para recuperação
Falha do comando gkectl repair admin-master com:
Failed to repair: failed to select the template: no VM templates is available for repairing the admin master (check if the admin cluster version >= 1.4.0 or contact support
gkectl repair admin-master não poderá buscar o modelo de VM a ser usado para
reparar a VM do plano de controle do administrador se o nome da VM do plano de controle do administrador
terminar com os caracteres t , m , p ou l .
Alternativa:
Execute o comando novamente com --skip-validation .
|
Geração de registros e monitoramento |
1,11, 1,12, 1,13, 1,14, 1,15, 1,16 |
Falha na geração de registros de auditoria do Cloud devido a permissão negada
Os registros de auditoria do Cloud precisam de uma configuração de permissão especial que,
no momento, só é executada automaticamente para clusters de usuários pelo GKE Hub.
É recomendável ter pelo menos um cluster de usuário que use o mesmo
ID do projeto e a mesma conta de serviço com o cluster de administrador para
os Registros de auditoria do Cloud. Assim, o cluster de administrador terá a permissão
necessária.
No entanto, nos casos em que o cluster de administrador usa um ID do projeto ou
conta de serviço diferente de qualquer cluster de usuário, os registros de auditoria do cluster
de administrador não são injetados no Google Cloud. O sintoma é uma
série de erros Permission Denied no pod
audit-proxy no cluster de administrador.
Alternativa:
Ver etapas de solução alternativa
Para resolver esse problema, interaja com o atributo do cloudauditlogging Hub para configurar
a permissão:
- Primeiro, verifique se as contas de serviço atuais estão na lista de permissões dos
Registros de auditoria do Cloud no seu projeto:
curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging
- Dependendo da resposta, siga um destes procedimentos:
- Se você recebeu um erro
404 Not_found , isso significa que
não há uma conta de serviço na lista de permissões para esse ID de projeto. É possível
adicionar uma conta de serviço à lista de permissões ativando o
recurso Hub cloudauditlogging :
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features?feature_id=cloudauditlogging -d \
'{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":["SERVICE_ACCOUNT_EMAIL"]}}}'
- Se você recebeu uma especificação de recurso que contém
"lifecycleState": "ENABLED" com "code":
"OK" e uma lista de contas de serviço em
allowlistedServiceAccounts , isso significa que há contas de serviço
permitidas para este projeto. É possível usar uma
conta de serviço dessa lista no seu cluster ou adicionar uma nova conta
de serviço à lista de permissões:
curl -X PATCH -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging?update_mask=spec.cloudauditlogging.allowlistedServiceAccounts -d \
'{"spec":{"cloudauditlogging":{"allowlistedServiceAccounts":["SERVICE_ACCOUNT_EMAIL"]}}}'
- Se você recebeu uma especificação de atributos que contém
"lifecycleState": "ENABLED" com "code":
"FAILED" , a configuração de permissão não foi bem-sucedida.
Resolva os problemas no campo description
da resposta ou faça backup da lista de permissões atual, exclua o
atributo do hub cloudauditlogging e reative-o seguindo a etapa 1
desta seção. Você pode excluir o recurso Hub
cloudauditlogging da seguinte maneira:
curl -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://gkehub.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/features/cloudauditlogging
Nos comandos acima:
|
Operação, segurança |
1.11 |
Falha de certificados de verificação de gkectl diagnose
Se a estação de trabalho não tiver acesso aos nós de trabalho do cluster de usuário,
ela vai receber as seguintes falhas ao executar
gkectl diagnose :
Checking user cluster certificates...FAILURE
Reason: 3 user cluster certificates error(s).
Unhealthy Resources:
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Se a estação de trabalho não tiver acesso aos nós de trabalho do cluster de administrador
ou aos nós de trabalho do cluster de usuário, ela receberá as seguintes falhas ao
executar gkectl diagnose :
Checking admin cluster certificates...FAILURE
Reason: 3 admin cluster certificates error(s).
Unhealthy Resources:
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Node kubelet CA and certificate on node xxx: failed to verify kubelet certificate on node xxx: dial tcp xxx.xxx.xxx.xxx:10250: connect: connection timed out
Alternativa:
Se for seguro ignorar essas mensagens.
|
Sistema operacional |
1.8, 1.9, 1.10, 1.11, 1.12, 1.13 |
/var/log/audit/ ocupando espaço em disco nas VMs
O /var/log/audit/ está repleto de registros de auditoria. Verifique
o uso do disco executando sudo du -h -d 1 /var/log/audit .
Certos comandos gkectl na estação de trabalho do administrador, por exemplo, gkectl diagnose snapshot contribuem para o uso
do espaço em disco.
Desde o GKE no VMware v1.8, a imagem do Ubuntu é reforçada com o comparativo de mercado CIS nível 2. E uma das regras de compliance, "4.1.2.2 Garanta que os registros de auditoria não sejam
excluídos automaticamente", garante a configuração auditada
max_log_file_action = keep_logs . Isso resulta em todas as
regras de auditoria mantidas no disco.
Alternativa:
Ver etapas de solução alternativa
Estação de trabalho do administrador
Na estação de trabalho do administrador, é possível alterar manualmente as configurações
auditadas para alternar os registros automaticamente e reiniciar o serviço
auditado:
sed -i 's/max_log_file_action = keep_logs/max_log_file_action = rotate/g' /etc/audit/auditd.conf
sed -i 's/num_logs = .*/num_logs = 250/g' /etc/audit/auditd.conf
systemctl restart auditd
A configuração acima faria com que os registros auditados fossem automaticamente gerados
quando mais de 250 arquivos fossem gerados (cada um com 8 milhões de tamanho).
Nós do cluster
Para nós de cluster, faça upgrade para 1.11.5+, 1.12.4+, 1.13.2+ ou 1.14+. Se
ainda não for possível fazer upgrade para essas versões, aplique o seguinte DaemonSet ao seu cluster:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: change-auditd-log-action
namespace: kube-system
spec:
selector:
matchLabels:
app: change-auditd-log-action
template:
metadata:
labels:
app: change-auditd-log-action
spec:
hostIPC: true
hostPID: true
containers:
- name: update-audit-rule
image: ubuntu
command: ["chroot", "/host", "bash", "-c"]
args:
- |
while true; do
if $(grep -q "max_log_file_action = keep_logs" /etc/audit/auditd.conf); then
echo "updating auditd max_log_file_action to rotate with a max of 250 files"
sed -i 's/max_log_file_action = keep_logs/max_log_file_action = rotate/g' /etc/audit/auditd.conf
sed -i 's/num_logs = .*/num_logs = 250/g' /etc/audit/auditd.conf
echo "restarting auditd"
systemctl restart auditd
else
echo "auditd setting is expected, skip update"
fi
sleep 600
done
volumeMounts:
- name: host
mountPath: /host
securityContext:
privileged: true
volumes:
- name: host
hostPath:
path: /
Essa alteração na configuração auditada violaria a regra de nível 2 do CIS "4.1.2.2 Garantir que os registros de auditoria não sejam excluídos automaticamente".
|
Rede |
1.10, 1.11.0-1.11.3, 1.12.0-1.12.2, 1.13.0 |
O IP flutuante do NetworkGatewayGroup entra em conflito com o endereço do
nó
Os usuários não podem criar ou atualizar objetos NetworkGatewayGroup
devido ao seguinte erro de webhook de validação:
[1] admission webhook "vnetworkgatewaygroup.kb.io" denied the request: NetworkGatewayGroup.networking.gke.io "default" is invalid: [Spec.FloatingIPs: Invalid value: "10.0.0.100": IP address conflicts with node address with name: "my-node-name"
Nas versões afetadas, o kubelet pode se vincular por engano a um endereço IP flutuante atribuído ao nó e informá-lo como um endereço de nó em
node.status.addresses . O webhook de validação verifica
endereços IP flutuantes NetworkGatewayGroup em todos os
node.status.addresses no cluster e vê isso como um
conflito.
Alternativa:
No mesmo cluster em que a criação ou a atualização de
objetos NetworkGatewayGroup está falhando, desative temporariamente
o webhook de validação do ANG e envie sua alteração:
- Salve a configuração do webhook para que ela possa ser restaurada no final:
kubectl -n kube-system get validatingwebhookconfiguration \
ang-validating-webhook-configuration -o yaml > webhook-config.yaml
- Edite a configuração do webhook:
kubectl -n kube-system edit validatingwebhookconfiguration \
ang-validating-webhook-configuration
- Remova o item
vnetworkgatewaygroup.kb.io da
lista de configuração do webhook e feche para aplicar as alterações.
- Crie ou edite o objeto
NetworkGatewayGroup .
- Reaplique a configuração original do webhook:
kubectl -n kube-system apply -f webhook-config.yaml
|
Instalação, upgrades e atualizações |
1.10.0-1.10.2 |
Como criar ou fazer upgrade do tempo limite do cluster de administrador
Durante uma tentativa de upgrade do cluster de administrador, a VM do plano de controle do administrador
pode ficar travada durante a criação. A VM do plano de controle do administrador entra em um
loop de espera infinita durante a inicialização, e você receberá o seguinte
erro de loop infinito no arquivo
/var/log/cloud-init-output.log :
+ echo 'waiting network configuration is applied'
waiting network configuration is applied
++ get-public-ip
+++ ip addr show dev ens192 scope global
+++ head -n 1
+++ grep -v 192.168.231.1
+++ grep -Eo 'inet ([0-9]{1,3}\.){3}[0-9]{1,3}'
+++ awk '{print $2}'
++ echo
+ '[' -n '' ']'
+ sleep 1
+ echo 'waiting network configuration is applied'
waiting network configuration is applied
++ get-public-ip
+++ ip addr show dev ens192 scope global
+++ grep -Eo 'inet ([0-9]{1,3}\.){3}[0-9]{1,3}'
+++ awk '{print $2}'
+++ grep -v 192.168.231.1
+++ head -n 1
++ echo
+ '[' -n '' ']'
+ sleep 1
Isso ocorre porque, quando o GKE no VMware tenta conseguir o endereço IP
do nó no script de inicialização, ele usa grep -v
ADMIN_CONTROL_PLANE_VIP para ignorar o VIP do plano de controle do cluster de administrador,
que também pode ser atribuído à NIC. Porém, o comando também pula
qualquer endereço IP que tenha um prefixo do VIP do plano de controle, o que faz com que
o script de inicialização trave.
Por exemplo, suponha que o VIP do plano de controle do cluster de administrador seja
192.168.1.25. Se o endereço IP da VM do plano de controle do cluster de administrador tiver
o mesmo prefixo, por exemplo,192.168.1.254, a VM do plano de controle vai
ficar travada durante a criação. Esse problema também poderá ser acionado se o
endereço de transmissão tiver o mesmo prefixo que o VIP do plano de controle, por
exemplo, 192.168.1.255 .
Alternativa:
|
Sistema operacional, upgrades e atualizações |
1.10.0-1.10.2 |
O estado do cluster de administrador que usa a imagem do COS será perdido após
o upgrade do cluster de administrador ou o reparo mestre do administrador
Não é possível montar o DataDisk corretamente no nó mestre do cluster de administrador ao
usar a imagem do COS. Além disso, o estado do cluster de administrador que usa a imagem do COS será
perdido após o upgrade do cluster de administrador ou reparo mestre do administrador. O cluster de administrador
que usa a imagem do COS é um recurso em fase de pré-lançamento.
Alternativa:
Recriar cluster de administrador com osImageTypeType definido como ubuntu_containerd
Depois de criar o cluster de administrador com osImageType definido como cos, use
a chave SSH do cluster de administrador e o SSH no nó mestre do administrador.
O resultado de df -h contém /dev/sdb1 98G 209M 93G
1% /opt/data . E o resultado de lsblk contém -sdb1
8:17 0 100G 0 part /opt/data .
|
Sistema operacional |
1.10 |
Busca de DNS com falha resolvida pelo systemd em domínios .local
Na versão 1.10.0 do GKE no VMware, as resoluções de nome no Ubuntu
são roteadas para a detecção local resolvida pelo systemd em 127.0.0.53
por padrão. O motivo é que, na imagem do Ubuntu 20.04 usada na versão
1.10.0, /etc/resolv.conf tem um link simbólico para
/run/systemd/resolve/stub-resolv.conf , que aponta para o
stub de DNS 127.0.0.53 do localhost.
Como resultado, a resolução de nome DNS do localhost se recusa a verificar os
servidores DNS upstream (especificados em
/run/systemd/resolve/resolv.conf ) para nomes com um
sufixo .local , a menos que os nomes sejam especificados como
domínios de pesquisa.
Isso causa falhas nas pesquisas de nomes de .local . Por
exemplo, durante a inicialização do nó, o kubelet falha ao extrair imagens
de um registro particular com um sufixo .local . A especificação de um
endereço do vCenter com um sufixo .local não funcionará em uma
estação de trabalho de administrador.
Alternativa:
Para evitar esse problema em nós de cluster, especifique o
campo searchDomainsForDNS no arquivo de configuração do cluster de administrador e o arquivo de configuração do cluster de usuário para incluir os domínios.
No momento, o gkectl update ainda não é compatível com a
atualização do campo searchDomainsForDNS .
Portanto, se você não configurou esse campo antes da criação do cluster, será preciso usar SSH nos nós e ignorar o stub local resolvido pelo sistema mudando o link simbólico de /etc/resolv.conf de /run/systemd/resolve/stub-resolv.conf (que contém o stub local 127.0.0.53 ) para /run/systemd/resolve/resolv.conf (que aponta para o DNS upstream real):
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Como na estação de trabalho de administrador, o gkeadm não é compatível
com a especificação de domínios de pesquisa. Por isso, é necessário contornar esse problema nesta etapa manual.
Esta solução não permanece nas recriações de VM. Aplique
a solução novamente sempre que as VMs forem recriadas.
|
Instalação, sistema operacional |
1.10 |
O IP da ponte do Docker usa 172.17.0.1/16 em vez de
169.254.123.1/24
O GKE no VMware especifica uma sub-rede dedicada para o endereço IP
da ponte do Docker que usa --bip=169.254.123.1/24 , para que
ele não reserve a sub-rede 172.17.0.1/16 padrão. No entanto,
na versão 1.10.0, um bug na imagem do SO Ubuntu fez com que a
configuração personalizada do Docker fosse ignorada.
Como resultado, o Docker escolhe o 172.17.0.1/16 padrão como a
sub-rede de endereço IP da ponte. Isso poderá causar um conflito de endereços IP se a
carga de trabalho já estiver em execução nesse intervalo de endereços IP.
Alternativa:
Para contornar esse problema, você precisa renomear o seguinte arquivo de configuração systemd do dockerd e reiniciar o serviço:
sudo mv /etc/systemd/system/docker.service.d/50-cloudimg-settings.cfg \
/etc/systemd/system/docker.service.d/50-cloudimg-settings.conf
sudo systemctl daemon-reload
sudo systemctl restart docker
Verifique se o Docker escolhe o endereço IP da ponte correto:
ip a | grep docker0
Esta solução não permanece nas recriações de VM. Aplique
a solução novamente sempre que as VMs forem recriadas.
|
Upgrades e atualizações |
1.11 |
Upgrade para a versão 1.11 bloqueada pela prontidão do Stackdriver
Na versão 1.11.0 do GKE on VMware, há mudanças na definição de recursos personalizados relacionados à geração de registros e monitoramento:
- O nome do grupo do recurso personalizado
stackdriver foi alterado de addons.sigs.k8s.io para addons.gke.io .
- O nome do grupo dos recursos personalizados
monitoring e metricsserver foi alterado de addons.k8s.io para addons.gke.io .
- As especificações dos recursos acima começam a ser validadas em relação ao esquema. Em particular, as especificações resourceAttrOverride e storageSizeOverride no recurso personalizado
stackdriver precisam ter um tipo de string nos valores das solicitações e limites de CPU, memória e tamanho de armazenamento.
As mudanças no nome do grupo foram feitas para obedecer às atualizações da CustomResourceDefinition no Kubernetes 1.22.
Nenhuma ação será necessária caso você não tenha outra lógica que aplique ou edite os recursos personalizados afetados. O processo de upgrade do GKE no VMware vai cuidar da migração dos recursos afetados e manter as especificações atuais após a mudança do nome do grupo.
No entanto, se você executar qualquer lógica que aplique ou edite os recursos afetados, será necessário atenção especial. Primeiro, eles precisam estar referenciados com o novo nome de grupo no arquivo de manifesto. Exemplo:
apiVersion: addons.gke.io/v1alpha1 ## instead of `addons.sigs.k8s.io/v1alpha1`
kind: Stackdriver
Depois, verifique se os valores de especificação resourceAttrOverride e storageSizeOverride são do tipo string. Exemplo:
spec:
resourceAttrOverride:
stackdriver-log-forwarder/stackdriver-log-forwarder
limits:
cpu: 1000m # or "1"
# cpu: 1 # integer value like this would not work
memory: 3000Mi
Caso contrário, as aplicações e edições não terão efeito e poderão levar a um status inesperado nos componentes de registro e monitoramento. Os possíveis sintomas podem incluir:
- Registros de erros de reconciliação em
onprem-user-cluster-controller , por exemplo: potential reconciliation error: Apply bundle components failed, requeue after 10s, error: failed to apply addon components: failed to apply bundle objects from stackdriver-operator-addon 1.11.2-gke.53 to cluster my-cluster: failed to create typed live object: .spec.resourceAttrOverride.stackdriver-log-forwarder/stackdriver-log-forwarder.limits.cpu: expected string, got &value.valueUnstructured{Value:1}
- Falha em
kubectl edit stackdriver stackdriver , por exemplo: Error from server (NotFound): stackdrivers.addons.gke.io "stackdriver" not found
Se você encontrar os erros acima, isso significa que um tipo incompatível na especificação da CR do Stackdriver já estava presente antes do upgrade. Como solução alternativa, é possível editar manualmente a resposta automática do Stackdriver com o nome antigo do grupo kubectl edit stackdrivers.addons.sigs.k8s.io stackdriver e fazer o seguinte:
- Alterar as solicitações e os limites dos recursos para o tipo de string;
- Remova qualquer anotação
addons.gke.io/migrated-and-deprecated: true , se houver.
Em seguida, retome ou reinicie o processo de upgrade.
|
Sistema operacional |
1,7, 1,8, 1,9, 1,10, 1,11, 1,12, 1,13, 1,14, 1,15, 1,16 |
As VMs do COS não mostram IPs quando são movidas por desligamento irregular do host
Sempre que houver uma falha em um servidor ESXi e a função de alta disponibilidade do vCenter estiver ativada no servidor, todas as VMs no servidor ESXi com falha acionarão o mecanismo vMotion e serão movidas para outro servidor ESXi normal. As VMs do COS migradas perderiam os IPs.
Alternativa:
Reinicialize a VM
|
Rede |
todas as versões anteriores a 1.14.7, 1.15.0-1.15.3, 1.16.0 |
A resposta do GARP enviada pelo Seesaw não define o IP de destino
O ARP periódico (ARRP gratuito) enviado pelo Seesaw a cada 20 segundos não define
o IP de destino no cabeçalho ARP. Algumas redes podem não aceitar esses pacotes (como Cisco ACI). Eles podem causar um tempo de inatividade mais longo após a recuperação de um cérebro dividido (devido à queda do pacote VRRP).
Alternativa:
Acione um failover do Seeaw com a execução de sudo seesaw -c failover em qualquer uma das VMs do Seesaw. Isso deve restaurar o tráfego.
|
Sistema operacional |
1.16, 1.28.0-1.28.200 |
O Kubelet está cheio de registros informando que "/etc/kubernetes/manifests" não existe nos nós de trabalho.
"staticPodPath" foi definido por engano para nós de trabalho
Alternativa:
Crie manualmente a pasta "/etc/kubernetes/manifests"
|