A ferramenta de linha de comandos nomos
é uma ferramenta opcional para o Config Sync que pode usar para obter o estado do Config Sync e o estado de sincronização da sua fonte de informações fidedignas. A ferramenta nomos
oferece-lhe os seguintes comandos:
Comando | Utilização |
---|---|
nomos status |
Verifique o estado do Config Sync |
nomos vet |
Verifique se existem erros na fonte de dados fidedigna |
nomos hydrate |
Veja todas as configurações na fonte de confiança |
nomos bugreport |
Crie um relatório de erro |
nomos migrate |
Migre do objeto ConfigManagement para o RootSync |
nomos init |
Inicialize uma fonte hierárquica de informações fidedignas |
Pré-requisitos
Antes de poder usar a ferramenta nomos
para interagir com um cluster, o Config Sync tem de estar instalado no cluster de destino. Também tem de instalar e configurar a kubectl
ferramenta de linha de comandos.
Se estiver a interagir com clusters do Google Kubernetes Engine, certifique-se de que também
instala o
gke-gcloud-auth-plugin
.
A ferramenta nomos
suporta a pré-visualização e a validação de configurações do Kustomize e gráficos do Helm. Antes de poder usar esta funcionalidade, instale o Kustomize e o Helm na sua estação de trabalho local. Se a sua fonte de dados fidedignos contiver apenas configurações totalmente renderizadas, o Kustomize e o Helm são opcionais.
Instale a ferramenta nomos
A ferramenta nomos
é um ficheiro binário compilado a partir de código Go e pode instalá-lo localmente, por exemplo, numa estação de trabalho ou num portátil.
A ferramenta nomos
não está incluída quando instala o Config Sync. Pode instalar a ferramenta nomos
instalando a CLI do Google Cloud. Se usar o Cloud Shell, a CLI do Google Cloud é pré-instalada.
Se não tiver a CLI do Google Cloud, recomendamos que use
gcloud components install nomos
para
instalar a ferramenta nomos
. A instalação da ferramenta nomos
com a CLI Google Cloud
permite-lhe usar
gcloud components update
para
atualizar a ferramenta nomos
para a versão mais recente.
Para obter informações sobre formas alternativas de instalar a ferramenta nomos
, consulte a secção
Transferências.
Utilização básica
Para a sintaxe de comando básica, use o argumento --help
:
nomos --help
A ferramenta nomos
lê a partir do clone local da sua fonte de informação fidedigna. Use a flag --path
para especificar a localização do nível superior da fonte de dados fidedignos. Por predefinição,
--path
está definido como .
ou o diretório atual. Por exemplo:
nomos vet --path=PATH_TO_SOURCE --source-format unstructured
Verifique o estado da sincronização de configuração
Pode monitorizar o estado do Config Sync em todos os clusters inscritos através do comando nomos status
. Para cada cluster, nomos status
comunica o hash da confirmação que foi aplicada mais recentemente ao cluster e quaisquer erros que ocorreram ao tentar aplicar alterações recentes.
Também pode usar o comando nomos status
para verificar se os recursos geridos pela
sincronização de configuração estão prontos. nomos status
comunica o estado de cada recurso individual na coluna STATUS
da secção Managed resources
da saída.
O exemplo seguinte mostra algumas das diferentes condições que o comando nomos status
pode comunicar:
nomos status
Exemplo de saída:
MANAGED_CLUSTER_1
--------------------
<root> git@github.com:foo-corp/acme@main
SYNCED f52a11e4
Managed resources:
NAMESPACE NAME STATUS
k8snoexternalservices.constraints.gatekeeper.sh/no-internet-services Current
namespace/hello Current
MANAGED_CLUSTER_2
--------------------
<root> git@github.com:foo-corp/acme@main
PENDING 9edf8444
MANAGED_CLUSTER_3
--------------------
<root> git@github.com:foo-corp/acme@main
ERROR f52a11e4
Error: KNV1021: No CustomResourceDefinition is defined for the resource in the cluster.
MANGED_CLUSTER_4
--------------------
NOT INSTALLED
MANAGED_CLUSTER_5
--------------------
<root> git@github.com:foo-corp/acme/admin@main
SYNCED f52a11e4
Managed resources:
NAMESPACE NAME STATUS
namespace/gamestore Current
namespace/monitoring Current
gamestore reposync.configsync.gke.io/repo-sync Current
gamestore rolebinding.rbac.authorization.k8s.io/gamestore-admin Current
gamestore rolebinding.rbac.authorization.k8s.io/gamestore-webstore-admin Current
monitoring deployment.apps/prometheus-operator Current
monitoring prometheus.monitoring.coreos.com/acm Current
monitoring service/prometheus-acm Current
monitoring service/prometheus-operator Current
monitoring serviceaccount/prometheus-acm Current
monitoring serviceaccount/prometheus-operator Current
monitoring servicemonitor.monitoring.coreos.com/acm-service Current
--------------------
bookstore git@github.com:foo-corp/acme/bookstore@v1
SYNCED 34d1a8c8
Managed resources:
NAMESPACE NAME STATUS
gamestore configmap/store-inventory Current
gamestore webstore.marketplace.com/gameplace Current
Neste resultado:
MANAGED_CLUSTER_1
sincronizou a alteração mais recente à fonte prioritária e todos os recursos geridos têm o estadoCurrent
. Um estado deCurrent
significa que o estado do recurso corresponde ao estado pretendido.MANAGED_CLUSTER_2
ainda está a sincronizar.MANAGED_CLUSTER_3
tem um erro que impediu a aplicação da alteração. Neste exemplo,MANAGED_CLUSTER_3
tem o erro KNV1021 porque lhe falta uma CustomResourceDefinition (CRD) que os outros clusters têm instalada.- O cluster
MANAGED_CLUSTER_4
não tem o Config Sync instalado. - O
MANAGED_CLUSTER_5
está a ser sincronizado a partir de dois repositórios Git. A<root>
fonte de verdade pertence ao administrador do cluster e abookstore
fonte de verdade pode pertencer a uma equipa de desenvolvimento de aplicações.
Estados dos recursos geridos
O estado dos seus recursos geridos pode ter um dos seguintes valores:
InProgress
: o estado real do recurso ainda não atingiu o estado que especificou no manifesto do recurso. Este estado significa que a sincronização de recursos ainda não está concluída. Os recursos recém-criados começam normalmente com este estado, embora alguns recursos, como os ConfigMaps, sejamCurrent
imediatamente.Failed
: o processo de conciliação do estado real com o estado pretendido encontrou um erro ou não progrediu o suficiente.Current
: o estado real do recurso corresponde ao estado pretendido. O processo de conciliação é considerado concluído até haver alterações ao estado pretendido ou real.Terminating
: o recurso está a ser eliminado.NotFound
: o recurso não existe no cluster.Unknown
: o Config Sync não consegue determinar o estado do recurso.
Para desativar a apresentação do estado ao nível do recurso, adicione --resources=false
ao comando nomos status
.
Acerca da última consolidação sincronizada
O comando nomos status
apresenta o hash de confirmação mais recente que foi aplicado ao cluster na respetiva saída em status.sync.commit
. Para obter este valor, consulte o objeto RootSync
ou RepoSync
e procure o campo status.sync
.
Por exemplo, para consultar um objeto RootSync
, execute o seguinte comando:
kubectl get rootsyncs.configsync.gke.io -n config-management-system root-sync -o yaml
Exemplo de saída:
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
status:
sync:
commit: f1739af550912034139aca51e382dc50c4036ae0
lastUpdate: "2021-04-20T00:25:01Z"
Para consultar um objeto RepoSync
, execute o seguinte comando:
kubectl get reposync.configsync.gke.io -n NAMESPACE repo-sync -o yaml
Substitua NAMESPACE
pelo espaço de nomes no qual criou a sua fonte de dados fidedigna do espaço de nomes.
Exemplo de saída:
apiVersion: configsync.gke.io/v1beta1
kind: RepoSync
status:
sync:
commit: ed95b50dd918cf65d8908f7561cb8d8d1f179c2f
lastUpdate: "2021-04-20T00:25:20Z"
Esta consolidação representa a consolidação mais recente em relação ao cluster. No entanto, nem todos os recursos no cluster são afetados por cada confirmação. Para ver a confirmação mais recente de um recurso específico, consulte o recurso específico e veja metadata.annotations.configmanagement.gke.io/token
. Por exemplo:
kubectl get clusterroles CLUSTER_ROLE_NAME -o yaml
Substitua CLUSTER_ROLE_NAME
pelo nome da função de cluster que quer consultar.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
configmanagement.gke.io/token: ed95b50dd918cf65d8908f7561cb8d8d1f179c2f
nomos status flags
Para personalizar o comando nomos status
, adicione as seguintes flags:
Bandeira | Descrição |
---|---|
--contexts |
Aceita uma lista de contextos separados por vírgulas para usar em comandos de vários clusters. Predefinição para todos os contextos. Use "" para não ter contextos. |
-h ou --help |
Ajuda para o comando nomos status . |
--name |
Aceita uma string. Use esta flag para filtrar a sincronização de repositórios e raiz com o nome fornecido. Esta flag pode ser usada juntamente com a flag
namespace . |
--namespace |
Aceita uma string. Use a flag namespace para limitar o comando a uma origem de dados fidedignos de espaço de nomes específica. Deixe a opção não definida para
obter todas as fontes. Esta flag só está disponível se tiver ativado a sincronização a partir de mais do que uma fonte de informação fidedigna. |
--poll |
Use a flag poll para executar o comando
nomos status continuamente e fazer com que volte a imprimir a tabela de estado
a um intervalo regular. Por exemplo, 3s . Deixe esta flag
não definida para executar nomos status uma vez |
--resources |
Aceita true ou false . Se true ,
nomos status mostrar o estado ao nível do recurso para a sua origem de dados
ou espaço de nomes quando sincroniza a partir de mais de uma origem de dados.
O valor predefinido é true . |
--timeout |
Tempo limite para a ligação a cada cluster. O valor predefinido é
3s . |
Autorizações necessárias
Se for proprietário de um projeto, tem a função RBAC e pode usar o comando nomos status
para quaisquer clusters no seu projeto sem adicionar mais autorizações.cluster-admin
Se não tiver a função cluster-admin
, pode usar o nomos status
criando o seguinte ClusterRole:
Crie um ficheiro com o nome
nomos-status-reader.yaml
e copie o seguinte ClusterRole para o mesmo. As regras de que precisa variam consoante esteja a usar objetos RootSync e RepoSync.Usar objetos RootSync e RepoSync
# nomos-status-reader.yaml apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: nomos-status-reader rules: - apiGroups: ["configsync.gke.io"] resources: ["reposyncs", "rootsyncs"] verbs: ["get"] - nonResourceURLs: ["/"] verbs: ["get"]
Não usar objetos RootSync e RepoSync
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: nomos-status-reader rules: - apiGroups: ["configmanagement.gke.io"] resources: ["configmanagements", "repos"] verbs: ["get", "list"] - nonResourceURLs: ["/"] verbs: ["get"]
Aplique o ficheiro
nomos-status-reader.yaml
:kubectl apply -f nomos-status-reader.yaml
Verifique se existem erros na fonte de confiança
Antes de confirmar uma configuração na fonte de dados fidedigna, use o comando nomos vet
para verificar a sintaxe e a validade das configurações na fonte de dados fidedigna:
nomos vet --source-format unstructured
Se forem encontrados erros de sintaxe, o comando nomos vet
termina com um estado diferente de zero e regista mensagens de erro em STDERR
.
nomos vet flags
Para personalizar o comando nomos vet
, adicione as seguintes flags:
Bandeira | Descrição |
---|---|
--api-server-timeout |
Aceita uma string de duração. Define o limite de tempo do lado do cliente para comunicar com o servidor da API Kubernetes. A predefinição é 15s . |
--clusters |
Aceita uma lista de nomes de clusters separados por vírgulas para usar em comandos de vários clusters. A predefinição é todos os clusters. Use "" para não ter clusters. |
--format |
Aceita yaml ou json . O formato da saída. O valor predefinido é yaml . |
-h ou --help |
Ajuda para o comando nomos vet . |
--keep-output |
Aceita um valor Booleano. Se true , o resultado renderizado é guardado na localização que pode especificar com a flag --output . |
--namespace |
Aceita uma string. Se estiver definido, valida a fonte de informações reais como uma fonte de informações reais do espaço de nomes com o nome fornecido. Define automaticamente
--source-format=unstructured . |
--no-api-server-check |
Aceita um valor Booleano. Se true , desativa a comunicação com o servidor da API Kubernetes para deteção. Para mais informações sobre esta flag,
consulte a secção Validação do lado do servidor. |
--output |
Aceita uma string. O caminho para a saída renderizada. A predefinição é o diretório
compiled . Se --keep-output estiver definido como
false , este sinalizador é ignorado. |
--path |
Aceita uma string. O caminho para o diretório raiz da sua fonte de informações verdadeiras do Config Sync. A predefinição é ". " |
--source-format |
Aceita hierarchy ou unstructured . Se
hierarchy ou não estiver definido, valida a fonte de informações verdadeiras como uma
fonte de informações verdadeiras hierárquica. Se
unstructured , valida a fonte de informações fidedignas como uma
fonte de informações fidedignas não estruturada.
Esta flag é obrigatória se estiver a usar uma fonte de informações fidedignas não estruturada. |
--threshold |
Aceita opcionalmente um número inteiro. Define o número máximo de objetos permitidos por repositório; gera um erro se for excedido. Omita a flag ou use
--threshold=0 para desativar a validação de objetos máximos.
Indique a flag sem um valor para usar o valor predefinido 1000 ou
use --threshold=N para definir um limite específico. |
Validação do lado do servidor
Se o comando nomos vet
não conseguir determinar se o tipo tem espaço de nomes, a ferramenta nomos
estabelece ligação ao servidor da API do contexto kubectl
atual. Uma vez que a ferramenta nomos
compreende por predefinição os tipos principais do Kubernetes e os CRDs do Config Sync, só tenta estabelecer ligação ao servidor da API se os CRs não tiverem um CRD declarado correspondente. Neste caso, se o servidor da API não tiver o CRD aplicado, o comando nomos
vet
devolve error KNV1021. Para desativar esta verificação e suprimir erros de CRDs em falta, transmita a flag --no-api-server-check
.
Colocar em cache os metadados do servidor da API
Em vez de suprimir as verificações do servidor da API, pode colocar os dados em cache no servidor da API para o comando nomos vet
. Para colocar em cache o seu api-resources
, conclua os seguintes passos:
- Faça a ligação a um cluster que tenha todos os CRDs de que precisa para a sua fonte de verdade. O cluster não precisa de ter o Config Sync ativado.
- Aceda ao policyDir da sua fonte prioritária. Este é o mesmo diretório especificado no recurso ConfigManagement ou RootSync.
- Execute o seguinte comando:
kubectl api-resources > api-resources.txt
Este comando cria um ficheiro denominado api-resources.txt que contém o resultado exato de kubectl api-resources.
A partir de agora, as execuções de nomos vet
na fonte de informação fidedigna têm conhecimento dessas definições de tipos. Se o ficheiro api-resources.txt
for removido ou tiver o nome alterado, nomos vet
não consegue encontrar o ficheiro. nomos vet
continua a tentar estabelecer ligação ao cluster
se encontrar manifestos para tipos não declarados em api-resources.txt
(a menos que --no-api-server-check
seja transmitido).
O ficheiro api-resources.txt
afeta apenas o funcionamento da ferramenta nomos
. Não
modifica o comportamento da sincronização de configuração de forma alguma.
Não há problema em ter entradas adicionais no ficheiro api-resources.txt que sejam para tipos que não estão na fonte de dados fidedignos que está a ser validada. nomos vet
importa as definições, mas não faz nada com elas.
Atualize o ficheiro api-resources.txt
Depois de garantir que todos os CRDs pretendidos estão no cluster, execute o seguinte comando:
kubectl api-resources > api-resources.txt
Verificar automaticamente se existem erros de sintaxe ao confirmar
Se confirmar um ficheiro com erros JSON ou YAML, o Config Sync não aplica a alteração. No entanto, pode impedir que estes tipos de erros entrem na fonte de dados fidedignos usando hooks do lado do cliente ou do lado do servidor.
Use nomos vet
num comando pre-commit
Pode configurar um comando pre-commit que execute o comando nomos vet
para verificar
se existem erros de sintaxe quando confirma uma alteração no clone local do Git do seu repositório.
Se um comando pre-commit terminar com um estado diferente de zero, a operação git commit
falha.
Para executar o comando nomos vet
como um gancho de pré-commit, edite o ficheiro .git/hooks/pre-commit
na sua fonte de verdade (tenha em atenção que .git
começa com um caráter .
). Pode ter de criar o ficheiro manualmente. Adicione o comando nomos vet
a uma nova linha no script. O argumento --path
é opcional. Defina o argumento --source-format
para o formato de origem do repositório.
nomos vet --path=/path/to/repo --source-format unstructured
Certifique-se de que o ficheiro pre-commit
é executável:
chmod +x .git/hooks/pre-commit
Agora, quando executa um comando git commit
no clone da sua fonte de dados fidedigna, o nomos vet
é executado automaticamente.
O conteúdo do diretório .git/
não é monitorizado pela própria fonte de dados fidedignos e não pode ser confirmado na fonte de dados fidedignos na mesma localização. Pode criar um diretório na fonte de verdade para os hooks do Git, e as pessoas que usam a fonte de verdade podem copiar os hooks para o local adequado no respetivo clone local.
Use nomos vet
num gancho do lado do servidor
O Git oferece um mecanismo para executar verificações no servidor, em vez de no cliente, durante uma operação git push
. Se a verificação falhar, a git push
também falha. Estes hooks do lado do servidor não podem ser ignorados pelo cliente. O método de configuração dos comandos do lado do servidor depende da forma como o seu servidor Git está alojado. Consulte um dos seguintes links para mais informações ou verifique a documentação do seu serviço de alojamento Git.
Aplique o número máximo de objetos a sincronizar
O Config Sync armazena uma referência a cada objeto que sincroniza num objeto de inventário ResourceGroup, juntamente com o estado atual do objeto. Uma vez que o Kubernetes tem um limite de tamanho em bytes para objetos de recursos, isto limita o número máximo de objetos que o Config Sync pode sincronizar com um único RootSync ou RepoSync.
Por predefinição, o limite de tamanho do etcd do lado do servidor é de 1,5 MiB. Para ver mais detalhes, consulte a documentação do etcd. A aplicação de um objeto superior a este limite provoca um dos seguintes erros, consoante o tamanho do objeto:
etcdserver: request is too large
rpc error: code = ResourceExhausted desc = trying to send message larger than max
Request entity too large: limit is 3145728
Para se proteger contra objetos ResourceGroup que excedam o limite de tamanho do Kubernetes, pode usar o comando nomos vet --threshold
para validar o número de objetos no seu repositório de origem.
Por predefinição, quando usa o comando nomos vet
, o limite não é aplicado.
A transmissão da flag --threshold
faz com que o comando vet
apresente um erro se o número de objetos no repositório de origem exceder o limite.
O inventário ResourceGroup contém referências de objetos e o estado atual do objeto. Pode aumentar significativamente quando os objetos não são sincronizados ou reconciliados.
Para evitar exceder o limite de tamanho do objeto Kubernetes, escolha um limite que deixe capacidade suficiente para registar erros de objetos. O valor predefinido de 1000
deve funcionar para quase todos os casos, mas pode aumentar ou diminuir o limite conforme necessário.
Este limite só é validado pelo comando nomos vet
e não pela própria sincronização de configuração. Para aplicar o limite, use o comando nomos vet --threshold
numa verificação de pré-envio de um repositório de origem ou no gancho de pré-commit do Git.
Veja todas as configurações na fonte de dados fidedigna
Pode usar o comando nomos hydrate
para ver os conteúdos combinados da sua fonte de dados fidedigna em cada cluster inscrito.
Se executar nomos hydrate
sem opções, cria um diretório compiled/
no diretório de trabalho atual. Nesse diretório, é criado um subdiretório para cada cluster inscrito, com as configurações totalmente resolvidas que o operador aplicaria ao cluster.
Este comando também pode converter uma fonte de verdade hierárquica
numa ou mais fontes de verdade não estruturadas,
usando o conteúdo no diretório compiled/
.
nomos hydrate flags
Para personalizar o comando nomos hydrate
, adicione as seguintes flags:
Bandeira | Descrição |
---|---|
--api-server-timeout |
Aceita uma string de duração. Define o limite de tempo do lado do cliente para comunicar com o servidor da API Kubernetes. A predefinição é 15s . |
--clusters |
Aceita uma lista de nomes de clusters separados por vírgulas. Use esta flag para limitar o resultado a um único cluster ou a uma lista de clusters. Predefinição para todos os
clusters. Use "" para não ter clusters. |
--flat |
Se estiver ativada, imprime toda a saída num único ficheiro. Use esta flag se quiser
emular o comportamento de nomos view . |
--format |
Aceita um yaml ou um json . O formato da saída. O valor predefinido é yaml . |
-h ou --help |
Ajuda para o comando nomos hydrate . |
--no-api-server-check |
Aceita um valor Booleano. Se true , desativa a comunicação com o servidor da API para deteção. Para mais informações sobre esta flag, consulte a secção
Validação do lado do servidor. |
--output |
Aceita uma string. A localização para escrever a configuração hidratada. A predefinição é o diretório compiled .
Se --flat não estiver ativado, escreve cada manifesto de recursos como um
ficheiro separado.
Se --flat estiver ativado, escreve um único ficheiro
com todos os manifestos de recursos.
|
--path |
Aceita uma string. O caminho para o diretório raiz da sua fonte de informações verdadeiras do Config Sync. A predefinição é ". " |
--source-format |
Aceita hierarchy ou unstructured . Se
hierarchy ou não estiver definido, valida a fonte de informações verdadeiras como uma
fonte de informações verdadeiras hierárquica. Se
unstructured , valida a fonte de informações fidedignas como uma
fonte de informações fidedignas não estruturada.
Esta flag é obrigatória se estiver a usar uma fonte de informações fidedignas não estruturada. |
Crie um relatório de erro
Se tiver um problema com a sincronização de configuração que exija ajuda do Google Cloud apoio técnico, pode fornecer-lhe informações de depuração valiosas através do comando nomos bugreport
. Pode usar este comando para uma única fonte de informação fidedigna e vários repositórios.
nomos bugreport
Este comando gera um ficheiro ZIP com indicação de data/hora com informações sobre o conjunto de clusters do Kubernetes definido no seu contexto kubectl
. O ficheiro também contém registos dos pods do Config Sync. Não contém informações dos recursos sincronizados com o Config Sync. Para mais informações acerca do conteúdo do ficheiro ZIP,
consulte a referência do bugreport do nomos.
Limitações
O comando nomos bugreport
falha e produz um ficheiro ZIP incompleto se qualquer ficheiro individual exceder 1 GiB. Isto ocorre frequentemente devido a ficheiros de registo grandes.
A tabela seguinte inclui as causas mais comuns de ficheiros de registo grandes e como pode resolvê-las:
Causa | Ação recomendada |
---|---|
Aumento da verbosidade do registo | Reduza a verbosidade dos registos com substituições do nível de registo |
Objetos muito grandes | Anule a gestão do objeto grande ou reduza o respetivo tamanho |
Muitos objetos | Divida o repositório em vários repositórios |
Combates de controladores | Resolva a discussão |
Migre de um objeto ConfigManagement para um objeto RootSync
Pode executar o comando nomos migrate
para migrar do objeto ConfigManagement para um objeto RootSync para ativar as APIs RootSync
e RepoSync
.
O nomos migrate
suporta a execução de teste para pré-visualizar o processo de migração.
nomos migrate
modifica diretamente o objeto ConfigManagement no cluster.
Para evitar a reversão das alterações feitas através do nomos migrate
, certifique-se de que o objeto ConfigManagement não está registado na sua fonte de dados fidedigna.
nomos migrate --contexts=KUBECONFIG_CONTEXTS --dry-run
Se o resultado do teste de execução parecer bom, pode migrar o objeto ConfigManagement
usando nomos migrate
:
nomos migrate --contexts=KUBECONFIG_CONTEXTS
O resultado é semelhante ao seguinte:
--------------------
Enabling the multi-repo mode on cluster "my_managed_cluster-1" ...
- A RootSync object is generated and saved in "/tmp/nomos-migrate/my_managed_cluster-1/root-sync.yaml".
- The original ConfigManagement object is saved in "/tmp/nomos-migrate/my_managed_cluster-1/cm-original.yaml".
- The ConfigManagement object is updated and saved in "/tmp/nomos-migrate/my_managed_cluster-1/cm-multi.yaml".
- Resources for the multi-repo mode have been saved in a temp folder. If the migration process is terminated, it can be recovered manually by running the following commands:
kubectl apply -f /tmp/nomos-migrate/my_managed_cluster-1/cm-multi.yaml && \
kubectl wait --for condition=established crd rootsyncs.configsync.gke.io && \
kubectl apply -f /tmp/nomos-migrate/my_managed_cluster-1/root-sync.yaml.
- Updating the ConfigManagement object ....
- Waiting for the RootSync CRD to be established ....
- The RootSync CRD has been established.
- Creating the RootSync object ....
- Waiting for the reconciler-manager Pod to be ready ....
- Haven't detected running Pods with the label selector "app=reconciler-manager".
- Haven't detected running Pods with the label selector "app=reconciler-manager".
- Haven't detected running Pods with the label selector "app=reconciler-manager".
- The reconciler-manager Pod is running.
- Waiting for the root-reconciler Pod to be ready ....
- Haven't detected running Pods with the label selector "configsync.gke.io/reconciler=root-reconciler".
- Haven't detected running Pods with the label selector "configsync.gke.io/reconciler=root-reconciler".
- Haven't detected running Pods with the label selector "configsync.gke.io/reconciler=root-reconciler".
- The root-reconciler Pod is running.
- The migration process is done. Please check the sync status with `nomos status`.
Finished migration on all the contexts. Please check the sync status with `nomos status`.
Reverta para a configuração anterior
Se precisar de reverter após realizar a migração com nomos migrate
,
aplique o objeto ConfigManagement original. nomos migrate
guarda o objeto ConfigManagement original num ficheiro e imprime o nome no terminal.
O nome do ficheiro tem o formato /tmp/nomos-migrate/CURRENT_CONTEXT/cm-original.yaml
.
Para reverter para a configuração anterior, copie o caminho do ficheiro para
cm-original.yaml
e aplique o ficheiro ao cluster:
kubectl apply -f CM_ORIGINAL_PATH
nomos migrate flags
Para personalizar o comando nomos migrate
, adicione as seguintes flags:
Bandeira | Descrição |
---|---|
--connect-timeout |
Aceita uma duração. Duração do tempo limite para a ligação a cada cluster.
Predefinição para 3s . |
--contexts |
Aceita uma lista de contextos separados por vírgulas para usar em ambientes com vários clusters. A predefinição é o contexto atual. Use "all" para
todos os contextos. |
--dry-run |
Aceita um valor booleano. Se true , imprime apenas o resultado da migração. |
-h ou --help |
Ajuda para o comando nomos migrate . |
--remove-configmanagement |
Aceita um valor booleano. Se true , migra para o Config Sync de OSS
removendo o operador ConfigManagement e o CRD ConfigManagement. |
--wait-timeout |
Aceita uma duração. Duração do limite de tempo para aguardar que as condições dos recursos do Kubernetes sejam verdadeiras. A predefinição é 10m . |
Inicialize uma fonte de informação fidedigna hierárquica
Pode organizar a sua fonte de informações fidedignas arbitrariamente se estiver a usar uma fonte de informações fidedignas não estruturada.
Se estiver a usar uma fonte prioritária hierárquica,
tem de executar o comando nomos init
para inicializar um diretório hierárquico:
nomos init
Isto cria a estrutura de diretórios básica de uma origem de confiança hierárquica, incluindo os diretórios system/
, cluster/
e namespaces/
.
nomos init flags
Para personalizar nomos init
, adicione os seguintes sinalizadores:
Bandeira | Descrição |
---|---|
--force |
Escrever no diretório mesmo que não esteja vazio, substituindo ficheiros em conflito |
-h ou --help |
Ajuda para o comando nomos init . |
--path |
Aceita uma string. O diretório raiz a usar para a sua fonte de dados tradicionais. O valor predefinido é "." |
Resolução de problemas
No Linux, pode ver o seguinte erro ao executar um comando nomos
:
failed to create client configs: while getting config path: failed to get current user: user: Current not implemented on linux/amd64
Para corrigir este problema, crie uma variável de ambiente USER
:
export USER=$(whoami)