Ignorar campos não especificados
Esta página explica o comportamento de preenchimento padrão dos campos spec
e como
mudar o comportamento padrão de Merge
para o comportamento recomendado
Absent
. Esta página pode não ser aplicável se você estiver usando um CRD adicionado na
versão 1.114.0 e mais recentes, porque esses CRDs usam apenas o comportamento Absent
. Para
uma lista de CRDs com suporte a Merge
, consulte a seção CRDs com suporte a
Merge
desta página.
Comportamentos de preenchimento de campos spec
Quando o Config Connector cria um recurso, os campos não especificados na
especificação de recursos do Kubernetes podem ter dois comportamentos de preenchimento padrão diferentes:
Absent
e Merge
.
Ausente
Absent
é o comportamento recomendado. O Config Connector não preenche campos
não especificados na especificação.
Para CRDs adicionados na versão 1.114.0 e
mais recentes,
o comportamento de preenchimento padrão é Absent
. Esse também é o único comportamento de preenchimento
com suporte a esses CRDs. O valor da
anotação cnrm.cloud.google.com/state-into-spec
é absent
nessas CRs
de recursos.
Mesclar
Merge
é um comportamento sem suporte em CRDs adicionados na versão 1.114.0 e mais recentes. Os
campos spec
assumem valores da API após uma reconciliação bem-sucedida,
a menos que não sejam legíveis. Confira mais detalhes em Gerenciar campos
externamente.
Para CRDs com suporte na versão
1.113.0
e anteriores do Config Connector, o comportamento de preenchimento padrão é Merge
. Para conferir uma lista de CRDs que
oferecem suporte a Merge
, consulte a seção CRDs com suporte a Merge
desta página. O valor padrão da
anotação cnrm.cloud.google.com/state-into-spec
é merge
nesses CRs
de recursos. Também é possível configurar o comportamento de preenchimento para ser Absent
seguindo as
instruções em Ignorar o preenchimento de campos não especificados na
especificação.
Por padrão, nesses CRs de recursos, os campos que não foram especificados no YAML original sempre aparecem na especificação do CR. Isso significa que, quando você executa kubectl get <resource kind> <resource name> -oyaml
, muitos campos na especificação não estão no YAML aplicado.
Por exemplo, suponha que o esquema CRD permita especificar dois campos chamados foo
e
bar
na especificação, enquanto o arquivo YAML aplicado tem apenas foo
especificado:
spec:
foo: "foo"
Outro campo chamado bar
vai aparecer no CR se o YAML for aplicado
com sucesso e o recurso estiver
UpToDate:
spec:
foo: "foo"
bar: "bar"
Devido à complexidade da interação entre o conector de configuração e as APIsGoogle Cloud , talvez seja necessário mudar esse comportamento padrão e pular o preenchimento da especificação de recursos do Kubernetes com campos não especificados.
Ignorar o preenchimento de campos não especificados na especificação
É possível pular o preenchimento de campos não especificados na especificação para CRDs com suporte no Config Connector versão 1.113.0 e anteriores de duas maneiras:
- Configure a substituição de
stateIntoSpec
no nível do cluster ou do namespace para serAbsent
. - Especifique o valor da anotação
cnrm.cloud.google.com/state-into-spec
comoabsent
para o recurso.
Configurar a substituição de stateIntoSpec
no nível do cluster ou do namespace
Ao instalar o Config Connector ou atualizar a instalação dele,
é possível configurar a substituição de stateIntoSpec
no nível do cluster ou do namespace
para ser Absent
no CR ConfigConnector ou ConfigConnectorContext.
spec:
stateIntoSpec: Absent
Isso faz com que Absent
seja o comportamento de preenchimento de campos spec
padrão para todos os novos
recursos criados no cluster ou no namespace quando você não especifica
a anotação cnrm.cloud.google.com/state-into-spec
nos novos YAMLs
de recursos. Isso significa que o Config Connector vai pular o preenchimento de campos não especificados na
especificação de recursos do Kubernetes para esses recursos.
O campo stateIntoSpec
não tem um valor padrão. O Config Connector vai
determinar o comportamento de preenchimento dos campos spec
com base no valor da
anotação cnrm.cloud.google.com/state-into-spec
e seguir a lógica
abaixo para determinar o valor da anotação:
- Use o valor da anotação
cnrm.cloud.google.com/state-into-spec
diretamente se ela for especificada e válida. - Se a anotação não for especificada, use o valor correspondente do
campo
stateIntoSpec
no ConfigConnectorContext CR. - Se o ConfigConnectorContext CR não existir ou se o campo
stateIntoSpec
não for especificado, use o valor correspondente do campostateIntoSpec
no ConfigConnector CR. - Se o CR do ConfigConnector não existir ou o campo
stateIntoSpec
não estiver especificado, use o comportamento padrão com base no CRD descrito em camposspec
preenchendo comportamentos.
As CRDs de comportamento de preenchimento adicionadas na versão 1.114.0 e
posterior
são Absent
, independentemente da anotação cnrm.cloud.google.com/state-into-spec
ou dos campos stateIntoSpec
no CR do ConfigConnector ou
no CR do ConfigConnectorContext.
Se você já tiver criado o recurso, mas quiser mudar o comportamento de preenchimento dos campos spec
para Absent
, faça o seguinte:
Verifique se a substituição de
stateIntoSpec
no nível do cluster ou do namespace éAbsent
no CR do ConfigConnector ou do ConfigConnectorContext.Abandonar e adquirir o recurso. Verifique se a configuração YAML usada para aquisição não tem a anotação
cnrm.cloud.google.com/state-into-spec
.
Especificar a anotação cnrm.cloud.google.com/state-into-spec
no nível do recurso
Ao criar o arquivo YAML, você pode especificar o valor da
anotação cnrm.cloud.google.com/state-into-spec
como absent
. Isso pula
o preenchimento de campos não especificados na especificação de recursos do Kubernetes:
metadata:
annotations:
cnrm.cloud.google.com/state-into-spec: absent
Essa anotação tem um valor padrão de merge
se não for especificado, o que significa que
o Config Connector preenche todos os campos não especificados na especificação. Essa anotação é
imutável, o que significa que não é possível atualizar o valor da anotação de um recurso
do Config Connector.
Se você já criou o recurso, mas quer mudar o valor dessa anotação para um comportamento de preenchimento diferente, siga estas etapas:
Edite e adicione a anotação
cnrm.cloud.google.com/deletion-policy: abandon
ao recurso do Kubernetes para garantir que a exclusão na próxima etapa não exclua o recurso Google Cloud .Exclua o recurso do cluster do Kubernetes.
Adicione a anotação
cnrm.cloud.google.com/state-into-spec: absent
ao YAML do recurso.(Opcional) Remova
cnrm.cloud.google.com/deletion-policy: abandon
do YAML.Aplique o YAML atualizado.
Para explicar melhor a diferença introduzida por essa anotação, suponha que haja uma especificação com o seguinte esquema:
foo1: string
foo2: string
bars:
- bar:
br1: string
br2: string
barz:
bz1: string
bz2: string
Suponha também que você tenha especificado a especificação no YAML como:
spec:
foo1: "foo1"
bars:
- br1: "1_br1"
- br1: "2_br1"
barz:
bz1: "bz1"
Por padrão, a especificação preenchida no recurso Kubernetes criado pode ser:
spec:
foo1: "foo1"
foo2: "foo2"
bars:
- br1: "1_br1"
br2: "1_br2"
- br1: "2_br1"
br2: "2_br2"
barz:
bz1: "bz1"
bz2: "bz2"
Se você definir cnrm.cloud.google.com/state-into-spec: absent
, a especificação final
no recurso Kubernetes criado será:
spec:
foo1: "foo1"
bars:
- br1: "1_br1"
- br1: "2_br1"
barz:
bz1: "bz1"
Quando usar cnrm.cloud.google.com/state-into-spec: absent
Na maioria dos casos, defina
cnrm.cloud.google.com/state-into-spec: absent
para receber o comportamento de preenchimento
Absent
para campos spec
. Confira os cenários mais comuns que vão se beneficiar
do comportamento de preenchimento de Absent
.
Gerenciar campos não especificados em uma lista externamente
O Config Connector trata todos os campos de lista na especificação de recursos do Kubernetes como campos atômicos. Como resultado, por padrão, a mudança feita em um subcampo na lista fora do Config Connector será revertida por ele. No entanto, você pode usar essa anotação para permitir que o Config Connector desgerencie subcampos na lista. Para mais informações, consulte Comportamento de campos de lista na especificação de recursos.
Resolver conflitos entre ferramentas de gerenciamento de configuração e o Config Connector
Se você estiver usando ferramentas de gerenciamento de configuração, como o Config Sync ou o Argo CD, poderá notar uma disputa entre a ferramenta de gerenciamento de configuração e o conector de configuração. Um exemplo é o erro KNV2005 explicado no guia de solução de problemas. A causa raiz desses tipos de problemas é porque:
- O Config Connector vai preencher e definir valores padrão não especificados na lista na
especificação.
spec.bars[0].br2
é um exemplo. - As ferramentas de gerenciamento de configuração e o Config Connector tratam os campos de lista como
atômico, portanto, o
spec.bars[0].br2
adicionado é tratado como um deslocamento pelas ferramentas de gerenciamento de configuração e será removido para corrigir odrift
.
Para resolver esses problemas, defina cnrm.cloud.google.com/state-into-spec:
absent
para que o conector de configuração não adicione o campo
spec.bars[0].br2
não especificado à especificação.
Resolver problemas de simetria GET/PUT
A simetria GET/PUT se refere a um princípio de design na API REST. Especificamente, significa que, quando uma resposta GET é enviada como uma solicitação PUT para o mesmo URL, o resultado esperado é uma resposta HTTP 200 OK sem nenhuma mudança no estado do recurso REST.
Os campos não especificados preenchidos pelo Config Connector na especificação de recursos do Kubernetes
são o resultado de uma solicitação GET. Isso significa que, em reconciliações futuras,
o Config Connector poderá enviar uma solicitação PUT/PATCH para a API
Google Cloud , com esses valores de campo não especificados aprendidos da solicitação
GET. Isso geralmente não é um problema, mas é possível que algumas
APIsGoogle Cloud rejeitem a solicitação PUT/PATCH devido a esses
valores de campo não especificados. No mesmo exemplo, o spec.barz.bz2
preenchido
com o valor "bz2" pode resultar em um erro HTTP 400 do cliente ou outras respostas
inesperadas se a implementação da API violar o princípio de simetria GET/PUT.
Para evitar essa categoria de problemas, experimente definir
cnrm.cloud.google.com/state-into-spec: absent
e verificar se os erros durante a
reconciliação desaparecem.
Estado observado
Se você precisar definir cnrm.cloud.google.com/state-into-spec: absent
, mas sua
solução depender dos valores preenchidos de campos não especificados, verifique se esses
campos existem em status.observedState
no esquema do CRD. Se eles forem
representados em status.observedState
, defina
cnrm.cloud.google.com/state-into-spec: absent
e ainda acesse os valores dos
campos não especificados após uma reconciliação bem-sucedida.
O campo status.observedState
contém o estado em tempo real dos campos selecionados e
observados do recurso que o Config Connector observou na última
reconciliação bem-sucedida. Os campos observados são selecionados se forem
dependências de casos de uso comuns e forem campos spec
calculados. É possível encontrar
os campos observados nos esquemas de CRD.
Se você não encontrar os campos observados que quer, verifique se há um problema atual ou abra um novo problema nos Issue Trackers públicos.
Tipos com suporte a Merge
Confira a seguir todos os tipos de Config Connector que oferecem suporte ao comportamento de preenchimento
de Merge
:
- AccessContextManagerAccessLevel
- AccessContextManagerAccessPolicy
- AccessContextManagerServicePerimeter
- AlloyDBBackup
- AlloyDBCluster
- AlloyDBUser
- ApigeeEnvironment
- ApigeeOrganization
- ArtifactRegistryRepository
- BigQueryDataset
- BigQueryJob
- BigQueryTable
- BigtableAppProfile
- BigtableGCPolicy
- BigtableInstance
- BigtableTable
- BillingBudgetsBudget
- BinaryAuthorizationAttestor
- BinaryAuthorizationPolicy
- CertificateManagerCertificate
- CertificateManagerCertificateMap
- CertificateManagerCertificateMapEntry
- CloudBuildTrigger
- CloudFunctionsFunction
- CloudIdentityGroup
- CloudIdentityMembership
- CloudSchedulerJob
- ComputeAddress
- ComputeBackendBucket
- ComputeBackendService
- ComputeDisk
- ComputeExternalVPNGateway
- ComputeFirewall
- ComputeFirewallPolicy
- ComputeFirewallPolicyAssociation
- ComputeForwardingRule
- ComputeHTTPHealthCheck
- ComputeHTTPSHealthCheck
- ComputeHealthCheck
- ComputeImage
- ComputeInstance
- ComputeInstanceGroup
- ComputeInstanceGroupManager
- ComputeInstanceTemplate
- ComputeInterconnectAttachment
- ComputeNetwork
- ComputeNetworkEndpointGroup
- ComputeNetworkFirewallPolicy
- ComputeNetworkPeering
- ComputeNodeGroup
- ComputeNodeTemplate
- ComputePacketMirroring
- ComputeProjectMetadata
- ComputeRegionNetworkEndpointGroup
- ComputeReservation
- ComputeResourcePolicy
- ComputeRoute
- ComputeRouter
- ComputeRouterInterface
- ComputeRouterNAT
- ComputeRouterPeer
- ComputeSSLCertificate
- ComputeSSLPolicy
- ComputeSecurityPolicy
- ComputeServiceAttachment
- ComputeSharedVPCHostProject
- ComputeSharedVPCServiceProject
- ComputeSnapshot
- ComputeSubnetwork
- ComputeTargetGRPCProxy
- ComputeTargetHTTPProxy
- ComputeTargetHTTPSProxy
- ComputeTargetInstance
- ComputeTargetPool
- ComputeTargetSSLProxy
- ComputeTargetTCPProxy
- ComputeTargetVPNGateway
- ComputeURLMap
- ComputeVPNGateway
- ComputeVPNTunnel
- ConfigControllerInstance
- ContainerAnalysisNote
- ContainerAttachedCluster
- ContainerCluster
- ContainerNodePool
- DLPDeidentifyTemplate
- DLPInspectTemplate
- DLPJobTrigger
- DLPStoredInfoType
- DNSManagedZone
- DNSPolicy
- DNSRecordSet
- DataFusionInstance
- DataflowFlexTemplateJob
- DataflowJob
- DataprocAutoscalingPolicy
- DataprocCluster
- DataprocWorkflowTemplate
- EdgeContainerCluster
- EdgeContainerNodePool
- EdgeContainerVpnConnection
- EdgeNetworkNetwork
- EdgeNetworkSubnet
- EventarcTrigger
- FilestoreBackup
- FilestoreInstance
- FirestoreIndex
- Pasta
- GKEHubFeature
- GKEHubMembership
- IAMAccessBoundaryPolicy
- IAMAuditConfig
- IAMCustomRole
- IAMPartialPolicy
- IAMPolicy
- IAMPolicyMember
- IAMServiceAccount
- IAMServiceAccountKey
- IAMWorkforcePool
- IAMWorkforcePoolProvider
- IAMWorkloadIdentityPool
- IAMWorkloadIdentityPoolProvider
- IAPBrand
- IAPIdentityAwareProxyClient
- IdentityPlatformConfig
- IdentityPlatformOAuthIDPConfig
- IdentityPlatformTenant
- IdentityPlatformTenantOAuthIDPConfig
- KMSCryptoKey
- KMSKeyRing
- LoggingLogBucket
- LoggingLogExclusion
- LoggingLogSink
- LoggingLogView
- MemcacheInstance
- MonitoringAlertPolicy
- MonitoringGroup
- MonitoringMetricDescriptor
- MonitoringMonitoredProject
- MonitoringNotificationChannel
- MonitoringService
- MonitoringServiceLevelObjective
- MonitoringUptimeCheckConfig
- NetworkConnectivityHub
- NetworkConnectivitySpoke
- NetworkSecurityAuthorizationPolicy
- NetworkSecurityClientTLSPolicy
- NetworkSecurityServerTLSPolicy
- NetworkServicesEndpointPolicy
- NetworkServicesGRPCRoute
- NetworkServicesGateway
- NetworkServicesHTTPRoute
- NetworkServicesMesh
- NetworkServicesTCPRoute
- NetworkServicesTLSRoute
- OSConfigGuestPolicy
- OSConfigOSPolicyAssignment
- PrivateCACAPool
- PrivateCACertificate
- PrivateCACertificateAuthority
- PrivateCACertificateTemplate
- Projeto
- PubSubLiteReservation
- PubSubSchema
- PubSubSubscription
- PubSubTopic
- RecaptchaEnterpriseKey
- RedisInstance
- ResourceManagerLien
- ResourceManagerPolicy
- RunJob
- RunService
- SQLDatabase
- SQLSSLCert
- SQLUser
- SecretManagerSecret
- SecretManagerSecretVersion
- Serviço
- ServiceDirectoryEndpoint
- ServiceDirectoryNamespace
- ServiceDirectoryService
- ServiceIdentity
- ServiceNetworkingConnection
- SourceRepoRepository
- SpannerDatabase
- SpannerInstance
- StorageBucket
- StorageBucketAccessControl
- StorageDefaultObjectAccessControl
- StorageNotification
- StorageTransferJob
- VPCAccessConnector
Os tipos a seguir não oferecem suporte ao comportamento de preenchimento Merge
a partir da
versão correspondente:
Nome do tipo | Versão |
---|---|
LoggingLogMetric | 1.118.1 |