Neste guia, você verá como as dependências funcionam no Config Sync e como especificar suas próprias dependências.
O Config Sync detecta automaticamente dependências implícitas entre objetos específicos ao sincronizá-los com o cluster. Por exemplo, os objetos de namespace sempre são aplicados antes de qualquer objeto nesses namespaces, e um objeto CustomResourceDefinition (CRD) é sempre aplicado antes da aplicação de qualquer recurso personalizado desse tipo. Da mesma forma, a ordem de exclusão é reversa para essas dependências implícitas: os namespaces são excluídos após os objetos nesse namespace, e os CRDs são excluídos após os recursos personalizados do tipo.
Também é possível definir dependências explícitas usando a anotação depends-on
.
Por exemplo, talvez você queira que o StatefulSet do MySQL seja iniciado antes da
implantação do WordPress, para que o banco de dados seja aplicado e esteja pronto antes do
início do WordPress.
Requisitos
As APIs RootSync e RepoSync precisam ser ativadas. Se você instalou o Config Sync manualmente usando kubectl e não tem as APIs RootSync e RepoSync ativadas, é necessário migrar o objeto ConfigManagement.
Limitação: as dependências precisam estar na mesma fonte de verdade que os dependentes. As dependências precisam ser gerenciadas pelo mesmo objeto RootSync ou RepoSync como dependentes, garantindo que todos os recursos estejam no mesmo ResourceGroup.
Grupo de aplicação
Ao sincronizar recursos com o cluster, o Config Sync divide os recursos que têm dependências diretas ou indiretas em diferentes grupos de aplicação. Um grupo de aplicação consiste apenas em recursos sem dependências diretas ou indiretas uns dos outros. O grupo de apps em que os recursos não têm dependências será aplicado primeiro.
Atuação e reconciliação
Quando um objeto é atuado (aplicado ou removido), pode levar algum tempo para que ele seja reconciliado pelo respectivo controlador. Por exemplo, quando uma implantação é aplicada, os pods subjacentes podem não estar prontos imediatamente. Depois que os pods subjacentes estiverem prontos, a implantação será reconciliada. Para diferentes tipos de objetos, o Config Sync verifica diferentes tipos de condições para verificar se um objeto é reconciliado. Mais detalhes podem ser encontrados em sigs.k8s.io/cli-utils.
Com a anotação depends-on
, o Config Sync não só aplica objetos na
ordem que você quer, mas também verifica
se o objeto de dependência é reconciliado antes de aplicar o objeto dependente.
Se o objeto dependente não reconciliar dentro do tempo limite de reconciliação padrão de cinco minutos, o Config Sync não aplicará o objeto dependente até o próximo período de sincronização. Para substituir o tempo limite padrão de reconciliação, defina spec.override.reconcileTimeout
.
Adicionar a anotação depends-on
a um objeto.
Para especificar uma dependência, adicione a anotação
config.kubernetes.io/depends-on
ao objeto dependente com um valor que faça referência aos
objetos de dependência.
Para o exemplo do WordPress, a anotação no WordPress é semelhante a esta:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
namespace: default
labels:
app: wordpress
annotations:
config.kubernetes.io/depends-on: apps/namespaces/default/StatefulSet/wordpress-mysql
Quando o Config Sync aplica os objetos, ele primeiro aplica a dependência e o
objeto StatefulSet wordpress-mysql
. Quando a dependência for reconciliada,
o Config Sync aplicará a dependência e a
implantação wordpress
.
Referências de objetos
As referências de objeto usam a seguinte sintaxe:
Para objetos com namespace:
GROUP/namespaces/NAMESPACE/KIND/NAME
Para objetos com escopo de cluster:
GROUP/KIND/NAME
Substitua:
GROUP
: o grupo do objeto de dependência.NAMESPACE
: o namespace do objeto de dependência com escopo do namespace.KIND
: o tipo do objeto de dependência. Esse campo diferencia maiúsculas de minúsculas. Por exemplo, use "Pod" em vez de "pod".NAME
: o nome do objeto de dependência.
Para objetos no grupo de núcleos,
a string vazia é usada, por exemplo, /namespaces/test/Pod/pod-a
.
Use ,
para separar várias referências de objeto, por exemplo,
/namespaces/test/Pod/pod-a,/namespaces/test/Pod/pod-b
.