Skip to main content
O português é fornecido por meio de tradução automática para sua conveniência. O inglês precede o português em caso de inconsistências.

Automatizando o failover de aplicações com estado usando o Trident.

Colaboradores netapp-aruldeepa

O recurso de desanexação forçada do Trident permite desanexar automaticamente volumes de nós com problemas em um cluster Kubernetes, evitando a corrupção de dados e garantindo a disponibilidade do aplicativo. Essa funcionalidade é particularmente útil em cenários onde os nós deixam de responder ou são desativados para manutenção.

Detalhes sobre Force Detach

A força de desprendimento está disponível para ontap-san , ontap-san-economy , ontap-nas , e ontap-nas-economy apenas. Antes de habilitar a desconexão forçada, o desligamento não normal do nó (NGNS) deve ser habilitado no cluster do Kubernetes. O NGNS é habilitado por padrão para o Kubernetes 1.28 e superior. Para mais informações, consulte "Kubernetes: Desligamento do nó não gracioso" .

Observação Ao usar o ontap-nas driver ou ontap-nas-economy, você precisa definir o autoExportPolicy parâmetro na configuração de back-end true para que o Trident possa restringir o acesso do nó Kubernetes com a alteração aplicada usando políticas de exportação gerenciadas.
Aviso Como o Trident conta COM NGNS do Kubernetes, não remova out-of-service as taints de um nó que não seja saudável até que todos os workloads não toleráveis sejam reprogramados. Aplicar ou remover a taint de forma imprudente pode comprometer a proteção de dados no back-end.

Quando o administrador do cluster do Kubernetes tiver aplicado a node.kubernetes.io/out-of-service=nodeshutdown:NoExecute taint ao nó e enableForceDetach estiver definido como true, o Trident determinará o status do nó e:

  1. Interrompa o acesso de E/S de backend para volumes montados nesse nó.

  2. Marque o objeto do nó Trident como dirty (não é seguro para novas publicações).

    Observação O controlador Trident rejeitará novas solicitações de volume de publicação até que o nó seja requalificado (depois de ter sido marcado como dirty) pelo pod de nó do Trident. Quaisquer cargas de trabalho agendadas com um PVC montado (mesmo depois que o nó do cluster estiver pronto e saudável) não serão aceitas até que o Trident possa verificar o nó clean (seguro para novas publicações).

Quando a integridade do nó é restaurada e a taint é removida, o Trident irá:

  1. Identifique e limpe caminhos publicados obsoletos no nó.

  2. Se o nó estiver em um cleanable estado (a tint fora de serviço foi removida e o nó está Ready no estado) e todos os caminhos obsoletos e publicados estiverem limpos, o Trident reajustará o nó como clean e permitirá novos volumes publicados no nó.

Detalhes sobre o failover automático

Você pode automatizar o processo de desacoplamento forçado por meio da integração com"operador de verificação de integridade do nó (NHC)" . Quando ocorre uma falha em um nó, o NHC aciona a remediação de nó Trident (TNR) e a desconexão forçada automaticamente, criando um CR TridentNodeRemediation no namespace do Trident que define o nó com falha. O TNR é criado somente em caso de falha de um nó e removido pelo NHC assim que o nó volta a ficar online ou é excluído.

Falha no processo de remoção do pod do nó

O failover automático seleciona as cargas de trabalho a serem removidas do nó com falha. Quando um TNR é criado, o controlador TNR marca o nó como sujo, impedindo novas publicações de volume e inicia a remoção de pods compatíveis com o recurso de desanexação forçada e seus respectivos volumes anexados.

Todos os volumes/PVCs suportados por desanexação forçada também são suportados por failover automático:

  • Volumes NAS e NAS-economy usando políticas de exportação automática (SMB ainda não é suportado).

  • SAN e volumes SAN-economia.

Comportamento padrão:

  • Os pods que utilizam volumes compatíveis com o recurso de desanexação forçada são removidos do nó com falha. O Kubernetes irá reprogramar essas tarefas para um nó saudável.

  • Os pods que utilizam um volume não suportado pelo force-detach, incluindo volumes que não sejam Trident, não são removidos do nó com falha.

  • Pods sem estado (não PVCs) não são removidos do nó com falha, a menos que a anotação do pod trident.netapp.io/podRemediationPolicy: delete Está definido.

Substituindo o comportamento de remoção do pod:

O comportamento de remoção de pods pode ser personalizado usando uma anotação de pod: trident.netapp.io/podRemediationPolicy[retain, delete] . Essas anotações são examinadas e utilizadas quando ocorre uma falha de sistema. Aplique anotações à especificação do pod do deployment/replicaset do Kubernetes para evitar que a anotação desapareça após uma falha:

  • retain- O pod NÃO será removido do nó com falha durante um failover automático.

  • delete- O Pod será removido do nó com falha durante um failover automático.

Essas anotações podem ser aplicadas a qualquer pod.

Aviso
  • As operações de E/S serão bloqueadas apenas em nós com falha para volumes que suportam desanexação forçada.

  • Para volumes que não suportam desanexação forçada, existe o risco de corrupção de dados e problemas de multi-anexação.

Remediação de nó Trident CR

O CR TridentNodeRemediation (TNR) define um nó com falha. O nome do TNR é o nome do nó com falha.

Exemplo de TNR:

apiVersion: trident.netapp.io/v1
kind: TridentNodeRemediation
metadata:
  name: <K8s-node-name>
spec: {}

Estados TNR: Use os seguintes comandos para visualizar o status dos TNRs:
kubectl get tnr <name> -n <trident-namespace>

Os programas TNR (Captura, Esterilização e Devolução) podem ocorrer em um dos seguintes estados:

  • Remediando:

    • Interrompa o acesso de E/S de backend para volumes suportados por desanexação forçada montados nesse nó.

    • O objeto de nó Trident está marcado como sujo (não é seguro para novas publicações).

    • Remova os pods e os anexos de volume do nó.

  • Recuperação de nó pendente:

    • O controlador está aguardando que o nó volte a ficar online.

    • Assim que o nó estiver online, o comando publish-enforcement garantirá que o nó esteja limpo e pronto para novas publicações de volume.

  • Se o nó for excluído do Kubernetes, o controlador TNR removerá o TNR e interromperá a reconciliação.

  • Concluído com sucesso:

    • Todas as etapas de remediação e recuperação do nó foram concluídas com sucesso. O nó está limpo e pronto para novas publicações de volume.

  • Fracassado:

    • Erro irrecuperável. Os motivos do erro são definidos no campo status.message da solicitação de alteração (CR).

Habilitando o failover automático

Pré-requisitos:

Observação Você também pode usar métodos alternativos para detectar falhas em nós, conforme especificado em[Integrating Custom Node Health Check Solutions] seção abaixo.
Passos
  1. Crie um CR (Creative Request) NodeHealthCheck (NHC) no namespace Trident para monitorar os nós de trabalho no cluster. Exemplo:

    apiVersion: remediation.medik8s.io/v1alpha1
    kind: NodeHealthCheck
    metadata:
      name: <CR name>
    spec:
      selector:
        matchExpressions:
          - key: node-role.kubernetes.io/control-plane
            operator: DoesNotExist
          - key: node-role.kubernetes.io/master
            operator: DoesNotExist
      remediationTemplate:
        apiVersion: trident.netapp.io/v1
        kind: TridentNodeRemediationTemplate
        namespace: <Trident installation namespace>
        name: trident-node-remediation-template
      minHealthy: 0 # Trigger force-detach upon one or more node failures
      unhealthyConditions:
        - type: Ready
          status: "False"
          duration: 0s
        - type: Ready
          status: Unknown
          duration: 0s
  2. Aplique o CR de verificação de integridade do nó no trident espaço de nomes.

    kubectl apply -f <nhc-cr-file>.yaml -n <trident-namespace>

A CR acima está configurada para monitorar os nós de trabalho do Kubernetes em busca das condições de nó Ready: false e Unknown. O failover automático será acionado quando um nó entrar no estado Ready: false ou Ready: Unknown.

O unhealthyConditions No CR, utiliza-se um período de tolerância de 0 segundos. Isso faz com que o failover automático seja acionado imediatamente após o Kubernetes definir a condição do nó como Ready: false, que é definida depois que o Kubernetes perde o sinal de pulsação de um nó. O Kubernetes tem um tempo de espera padrão de 40 segundos após o último heartbeat antes de definir Ready: false. Esse período de tolerância pode ser personalizado nas opções de implantação do Kubernetes.

Para opções de configuração adicionais, consulte"Documentação do operador Node-Healthcheck" .

Informações adicionais de configuração

Quando o Trident é instalado com o recurso de desanexação forçada ativado, dois recursos adicionais são criados automaticamente no namespace do Trident para facilitar a integração com o NHC: TridentNodeRemediationTemplate (TNRT) e ClusterRole.

TridentNodeRemediationTemplate (TNRT):

O TNRT serve como modelo para o controlador NHC, que usa o TNRT para gerar recursos TNR conforme necessário.

apiVersion: trident.netapp.io/v1
kind: TridentNodeRemediationTemplate
metadata:
  name: trident-node-remediation-template
  namespace: trident
spec:
  template:
    spec: {}

Função do Cluster:

Uma função de cluster também é adicionada durante a instalação quando a opção de desanexação forçada está habilitada. Isso concede permissões ao NHC para TNRs no espaço de nomes Trident .

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    rbac.ext-remediation/aggregate-to-ext-remediation: "true"
  name: tridentnoderemediation-access
rules:
- apiGroups:
  - trident.netapp.io
  resources:
  - tridentnoderemediationtemplates
  - tridentnoderemediations
  verbs:
  - get
  - list
  - watch
  - create
  - update
  - patch
  - delete

Atualizações e manutenção de clusters K8s

Para evitar falhas, pause o failover automático durante a manutenção ou atualizações do Kubernetes, períodos em que se espera que os nós sejam desligados ou reinicializados. Você pode pausar o CR do NHC (descrito acima) aplicando um patch em seu CR:

kubectl patch NodeHealthCheck <cr-name> --patch '{"spec":{"pauseRequests":["<description-for-reason-of-pause>"]}}' --type=merge

Isso interrompe o failover automático. Para reativar o failover automático, remova o pauseRequests da especificação após a conclusão da manutenção.

Limitações

  • As operações de E/S são impedidas apenas nos nós com falha para volumes suportados por desanexação forçada. Somente os pods que utilizam volumes/PVCs compatíveis com a função de desanexação forçada são removidos automaticamente.

  • O failover automático e o desanexamento forçado são executados dentro do pod do controlador Trident. Se o nó que hospeda o trident-controller falhar, o failover automático será atrasado até que o Kubernetes mova o pod para um nó íntegro.

Integrando soluções personalizadas de verificação de integridade de nós

Você pode substituir o operador de verificação de integridade do nó por ferramentas alternativas de detecção de falhas de nó para acionar o failover automático. Para garantir a compatibilidade com o mecanismo de failover automático, sua solução personalizada deve:

  • Crie um TNR quando uma falha de nó for detectada, usando o nome do nó com falha como o nome do CR do TNR.

  • Exclua o TNR quando o nó se recuperar e o TNR estiver no estado "Sucesso".