Esta página apresenta as operações do dia 2 do fluxo de trabalho de infraestrutura como código (IaC).
Pré-requisitos
- Conclua a configuração da IaC.
- Opcional: faça o download e instale a ferramenta de linha de comando
nomos para depuração:
acesse https://cloud.google.com/anthos-config-management/docs/how-to/nomos-command quando estiver fora do ambiente isolado e puder acessar esse URL.
Faça login no GitLab.
Abra o console da Web do GitLab em
https://iac.GDC_URL.Substitua
GDC_URLpelo URL base do projeto do GDC.Na interface do GitLab, clique no botão Login SAML para ser redirecionado à página de login dos Serviços de federação do Active Directory (ADFS) da TI do Centro de operações (OC IT).
Faça login com suas credenciais do OC IT ADFS para acessar a página inicial do GitLab.
O acesso à CLI exige um token de acesso pessoal (PAT, na sigla em inglês). Crie um PAT para seu usuário com o nível de acesso necessário seguindo estas etapas do artigo do GitLab, Criar um token de acesso pessoal:
https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token.Depois de criar um PAT, é possível fazer a autenticação usando a ferramenta de CLI.
Fluxo de trabalho de infraestrutura como código
Em geral, um fluxo de trabalho de IaC consiste nas seguintes etapas:
Gere as mudanças correspondentes em YAML no repositório
iacdo GitLab da seguinte maneira:- Se o arquivo não existir, selecione o ícone Novo arquivo na barra lateral.

- Na janela pop-up Criar novo arquivo, insira o nome do novo arquivo com o caminho completo e selecione Criar arquivo.

Se o arquivo existir, selecione-o na barra lateral para abrir em um novo painel.
Faça as mudanças necessárias no arquivo.
Faça upload da mudança como uma confirmação do Git e envie para uma revisão de código obrigatória da seguinte forma:
Selecione a opção Commit na barra lateral para abrir mais opções.

Escreva uma mensagem de commit na área de texto. Inclua informações úteis na mensagem.
Selecione a opção Criar uma nova ramificação.
Marque a caixa de seleção Iniciar uma nova solicitação de mesclagem.
Clique em Confirmar para abrir a prévia do formulário de solicitação de mesclagem.
Crie uma solicitação de fusão e faça as mudanças necessárias, como:
- No campo Título, insira um nome para a solicitação de fusão.
- No campo Descrição, insira uma descrição.
- Na seção Opções de mesclagem, marque a caixa de seleção Excluir ramificação de origem quando a origem da mesclagem for aceita.
- Clique em Criar solicitação de mesclagem. O pedido de mesclagem é enviado automaticamente ao revisor.

Peça ao proprietário adequado para revisar e aprovar o commit como o processo de aprovação de várias partes.
Envie o commit.
Verifique o resultado no cluster correspondente.
Dicas de depuração
Esta seção descreve dicas opcionais de depuração para IaC. Para verificar se as configurações estão corretas, é necessário ter a ferramenta de linha de comando nomos instalada.
Visualizar e validar configurações renderizadas
Antes de o Config Sync renderizar os configs e sincronizá-los com o cluster, verifique se os configs estão corretos. Para isso, execute nomos hydrate para visualizar a configuração renderizada e execute nomos vet para confirmar que o formato está correto.
Mude para o diretório raiz do Git local.
Execute o seguinte
nomos hydratecom as seguintes sinalizações:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORYNesse comando:
--source-format=unstructuredpermite quenomos hydratetrabalhe em um repositório não estruturado. Como você está usando configurações do Kustomize e gráficos do Helm, use um repositório não estruturado e adicione essa sinalização.--output=OUTPUT_DIRECTORYpermite definir um caminho para os configs renderizados. Substitua OUTPUT_DIRECTORY pelo local em que você quer que a saída seja salva.
Verifique a sintaxe e a validade das configurações executando
nomos vetcom as sinalizações a seguir:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORYNesse comando:
--source-format=unstructuredpermite quenomos vetfuncione em um repositório não estruturado.--keep-output=truesalva as configurações renderizadas.--output=OUTPUT_DIRECTORYé o caminho para as configurações renderizadas.
Verificar o processo
Para verificar o estado da sincronização, siga estas etapas:
Use o alias do shell
ka:$ alias ka='kubectl --kubeconfig $HOME/root-admin-kubeconfig'
O alias
kaconfigura okubectlpara se comunicar com o clusterroot-admin.Verifique se a sincronização funciona:
$ ka get rootsync/root-sync -n config-management-systemVocê vê o commit usado pelo Config Sync e qualquer erro, se houver.
Depois de verificar o estado da sincronização, use uma das seguintes opções:
Verifique se você aplicou a confirmação mais recente no repositório Git:
Verifique o campo
.status.syncno objeto RootSync ou RepoSync. É possível acessar o campo.status.syncpelo seguinte comando:# get .status.sync of a RootSync object ka get rootsync ROOT_SYNC -n config-management-system -o jsonpath='{.status.sync}' # get .status.sync of a RepoSync object ka get reposync REPO_SYNC -n REPO_SYNC_NAMESPACE -o jsonpath='{.status.sync}'Substitua
ROOT_SYNCpelo nome do objeto RootSync que você quer pesquisar.Substitua
REPO_SYNCpelo nome do objeto RepoSync que você quer pesquisar.Substitua
REPO_SYNC_NAMESPACEpelo nome do objeto RepoSync que você quer pesquisar.- O valor do campo
.status.sync.commitprecisa ser igual à confirmação mais recente. - O campo
.status.syncnão tem nenhum "erro".
- O valor do campo
Verifique se os recursos da confirmação mais recente estão todos reconciliados. Para cada objeto RootSync ou RepoSync, há um objeto ResourceGroup exclusivo que captura o status de reconciliação dos recursos gerenciados declarados no repositório Git. O objeto ResourceGroup tem o mesmo namespace e nome do objeto RootSync ou RepoSync.
Por exemplo, para o objeto RootSync com o nome
root-syncno namespaceconfig-management- system, o objeto ResourceGroup correspondente também éroot-syncno namespaceconfig-management-system. Quando a confirmação mais recente é aplicada com sucesso, o objeto ResourceGroup contém o grupo, o tipo, o namespace e o nome dos recursos gerenciados da confirmação mais recente.Execute o seguinte comando para receber um objeto ResourceGroup:
# get the ResourceGroup object for a RootSync object ka get resourcegroup ROOT_SYNC -n config-management-system -o yaml # get the ResourceGroup object for a RepoSync object ka get resourcegroup REPO_SYNC -n REPO_SYNC_NAMESPACE -o yamlSubstitua
ROOT_SYNCpelo nome do objeto ResourceGroup que você quer pesquisar.Substitua
REPO_SYNCpelo nome do objeto ResourceGroup que você quer pesquisar.Substitua
REPO_SYNC_NAMESPACEpelo nome do objeto ResourceGroup que você quer pesquisar.- Verifique se o
.status.observedGenerationé igual ao valor do campo.metadata.generationno objeto ResourceGroup. - Verifique se as condições
StalledeReconcilingtêmstatuscomo"False". - Verifique se cada item no campo
.status.resourceStatusestem o status comoCurrent.
- Verifique se o
Verifique se você faz um commit usando um arquivo YAML:
Opcional: use o comando
nomosse você configurar seuskubectlcontextos:$ nomos status Connecting to clusters... *root-admin-admin@root-admin -------------------- <root>:root-sync https://iac.zone1.google.gdch.test/gdch/iac.git/infrastructure/zonal/zones/ZONE_NAME/root-admin@main SYNCED 4a276fb67d17471f1ba812c725b75a76a1715009 Managed resources: NAMESPACE NAME STATUS default service/hello UnknownSe você confirmar um exemplo de arquivo YAML, execute:
$ ka get svc/helloUm serviço criado com o exemplo de YAML vai aparecer.
Execute este comando:
ka describe svc/helloVocê vai ver o seguinte objeto:
Name: myrole Labels: app.kubernetes.io/managed-by=configmanagement.gke.io configsync.gke.io/declared-version=v1 Annotations: config.k8s.io/owning-inventory: config-management-system_root-sync configmanagement.gke.io/cluster-name: my-cluster configmanagement.gke.io/managed: enabled configmanagement.gke.io/source-path: config-sync-quickstart/multirepo/root/gamestore-myrole.yaml configmanagement.gke.io/token: 747b843a7ddbd945c0616034a935cf648b58e7b5 configsync.gke.io/declared-fields: {"f:rules":{}} configsync.gke.io/git-context: {"repo":"https://github.com/GoogleCloudPlatform/anthos-config-management-samples","branch":"main","rev":"HEAD"} configsync.gke.io/manager: :root configsync.gke.io/resource-id: rbac.authorization.k8s.io_role_gamestore_myrole PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- pods [] [] [get list]Adicione uma nova anotação ao serviço:
$ ka annotate --overwrite svc/hello google.com/test=aaaExecute
describemais uma vez, confirme se a anotação existe e verifique se o Config Sync não a substituiu.Substituir uma anotação gerenciada pela IaC:
$ ka annotate --overwrite svc/hello google.com/annotation-in-iac=value-from-kubectlA mudança será negada na seguinte mensagem de erro:
$ ka annotate --overwrite svc/hello google.com/annotation-in-iac=asfas Error from server (Forbidden): admission webhook "v1.admission-webhook.configsync.gke.io" denied the request: kubernetes-admin cannot modify fields of object "_service_default_hello" managed by Config Sync: .metadata.annotations.google.com/annotation-in-iac
Resolver problemas na instalação
Se você receber erros de renderização, como o Kustomize não renderizar as configurações, use:
$ ka logs -n config-management-system deployment/root-reconciler -c hydration-controller -f
Os contêineres em root-reconciler são os seguintes:
git-sync: clona o repositório Git remoto.Hydration-controller:renderiza configurações do Kustomize e gráficos do Helm se o arquivo de configuração do Kustomization existir no diretório raiz.reconciler:Nivela a hierarquia do repositório, a reconcilia com o servidor da API e verifica se há erros.
Para mais informações, siga o guia oficial "Solucionar problemas do Config Sync"
Gerenciamento de configurações Google Cloud:
https://cloud.google.com/anthos-config-management/docs/how-to/troubleshooting-config-sync.
Solução de problemas
Reverter o login somente com o ADFS
Para fins de depuração, pode ser útil fazer login como o usuário inicial do
ioadmin usando o login com senha padrão. Para adicionar novamente
o login com senha no GitLab, execute os seguintes comandos kubectl.
export TOOLBOX=$(kubectl get pods --no-headers=true -n gitlab-system -lapp=toolbox,release=gitlab -o name | cut -c 5-)
# Wait for pod to be ready.
kubectl wait pods -n gitlab-system -lapp=toolbox,release=gitlab --for condition=Ready
kubectl exec $TOOLBOX -n gitlab-system -- /srv/gitlab/bin/rails runner "Gitlab::CurrentSettings.update!(password_authentication_enabled_for_web: true)"
Quando terminar de usar o usuário local, reative a autenticação somente do ADFS usando:
export TOOLBOX=$(kubectl get pods --no-headers=true -n gitlab-system -lapp=toolbox,release=gitlab -o name | cut -c 5-)
# Wait for pod to be ready.
kubectl wait pods -n gitlab-system -lapp=toolbox,release=gitlab --for condition=Ready
kubectl exec $TOOLBOX -n gitlab-system -- /srv/gitlab/bin/rails runner "Gitlab::CurrentSettings.update!(password_authentication_enabled_for_web: false)"
Integrar um novo usuário do ADFS
Um usuário faz login no Distributed Cloud com o ADFS. Isso cria uma conta de usuário no GitLab com a conta do AD.
Como administrador, siga estas etapas para adicionar manualmente um usuário recém-criado ao grupo do GitLab:
Faça login no GitLab como administrador do GitLab ou administrador do grupo do Distributed Cloud no GitLab.
Navegue até o grupo Distributed Cloud no GitLab ou
https://iac.GDC_URL/gdch.Clique em Ver grupo na Área de administração em
https://iac.GDC_URL/admin/groups/gdch.Adicione uma conta de um usuário recém-criado ao grupo do Distributed Cloud como desenvolvedor.
Confirmar o status da conciliação
Para mais etapas de solução de problemas, verifique se o subcomponent foi reconciliado:
root@count-bootstrapper:~/adfs# kr get subcomponent -n root iac-gitlab
NAME AGE STATUS
iac-gitlab 10d ReconciliationCompleted
Verifique se o CR gitlab está no estado Running:
root@count-bootstrapper:~/adfs# kr get gitlab -n gitlab-system gitlab
NAME STATUS VERSION
gitlab Running 7.11.10
Por fim, se um job de migração parecer travado, verifique o gráfico do Helm do subcomponente e confira se não há segredos ausentes.