Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Migrando o Amazon In-tree para Out-of-tree

O Kubernetes está se afastando da manutenção de provedores de nuvem in-tree. No Kubernetes v1.27 e versões posteriores, os provedores de nuvem in-tree foram removidos. A interface do Rancher permite que você faça upgrade para o Kubernetes v1.27 quando migra de um provedor in-tree para um provedor out-of-tree.

No entanto, se você estiver realizando uma migração manual, os clusters existentes devem fazer upgrade para o Kubernetes v1.27 após a migração para continuar funcionais.

Para migrar do provedor de nuvem in-tree para o provedor de nuvem AWS out-of-tree, você deve parar o kube-controller-manager do cluster existente e instalar o AWS cloud controller manager. Existem muitas maneiras de fazer isso. Consulte a documentação oficial da AWS sobre o gerenciador de controladores de nuvem externo para mais detalhes.

Se for aceitável ter algum tempo de inatividade durante a migração, siga as instruções para configurar um provedor de nuvem externo. Estas instruções descrevem como configurar o provedor de nuvem fora da árvore para um cluster recém-provisionado. Durante a configuração, haverá algum tempo de inatividade, pois há um intervalo de tempo entre quando o antigo provedor de nuvem para de funcionar e quando o novo provedor de nuvem começa a funcionar.

Se sua configuração não puder tolerar qualquer tempo de inatividade do plano de controle, você deve habilitar a migração de líder. Isso facilita uma transição suave dos controladores no gerenciador de controladores kube para seus equivalentes no gerenciador de controladores de nuvem. Consulte a documentação oficial da AWS sobre Usando a migração de líder para mais detalhes.

Importante:

A documentação do Kubernetes de migração do controlador de nuvem afirma que é possível migrar com a mesma versão do Kubernetes, mas pressupõe que a migração faz parte de um upgrade do Kubernetes. Consulte a documentação do Kubernetes sobre migrando para usar o gerenciador de controladores de nuvem para ver se você precisa personalizar sua configuração antes de migrar. Confirme seus valores de configuração de migração. Se o seu provedor de nuvem fornecer uma implementação do controlador Node IPAM, você também precisa migrar o controlador IPAM.

  • RKE2

  • RKE

  1. Atualize a configuração do cluster para habilitar a migração de líder:

    spec:
      rkeConfig:
        machineSelectorConfig:
          - config:
              kube-controller-manager-arg:
                - enable-leader-migration
            machineLabelSelector:
              matchExpressions:
                - key: rke.cattle.io/control-plane-role
                  operator: In
                  values:
                    - 'true'

    Observe que o provedor de nuvem ainda está aws nesta etapa:

    spec:
      rkeConfig:
        machineGlobalConfig:
          cloud-provider-name: aws
  2. Cordon os nós do plano de controle para que os pods do controlador de nuvem da AWS sejam executados apenas em nós após o upgrade para o provedor de nuvem externo:

    kubectl cordon -l "node-role.kubernetes.io/control-plane=true"
  3. Para instalar o AWS cloud controller manager com a migração de líder habilitada, siga os Passos 1-3 para implantar o gráfico do cloud controller manager. A partir do Kubernetes 1.22, o kube-controller-manager utilizará uma configuração padrão que atenderá à migração do controlador para o gerenciador. Atualize os argumentos do contêiner do aws-cloud-controller-manager em spec.rkeConfig.additionalManifest para habilitar a migração de líder:

    - '--enable-leader-migration=true'
  4. Instale o gráfico e confirme que o Daemonset aws-cloud-controller-manager foi implantado com sucesso:

    kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
  5. Atualize o cluster de provisionamento para alterar o provedor de nuvem e remover os argumentos de migração de líder do kube-controller. Se estiver fazendo upgrade da versão do Kubernetes, defina a versão do Kubernetes também na seção spec.kubernetesVersion do arquivo YAML do cluster.

    Importante

    Remova cloud-provider-name: aws apenas se não estiver contando com o supervisor rke2 para definir corretamente o providerID.

    Remova enable-leader-migration se você não quiser que ele esteja habilitado em seu cluster:

    spec:
      rkeConfig:
        machineGlobalConfig:
          cloud-provider-name: external

    Remova enable-leader-migration de:

    spec:
      rkeConfig:
        machineSelectorConfig:
          - config:
              kube-controller-manager-arg:
                - enable-leader-migration
            machineLabelSelector:
              matchExpressions:
                - key: rke.cattle.io/control-plane-role
                  operator: In
                  values:
                    - 'true'

    Você também pode desativar a migração de líder após o upgrade, pois a migração de líder não é mais necessária devido a apenas um cloud-controller-manager e pode ser removida. Faça upgrade do gráfico e remova a seguinte seção dos argumentos do contêiner:

    - --enable-leader-migration=true

    Verifique se a atualização do gerenciador de controlador de nuvem foi implantada com sucesso com o seguinte comando:

    kubectl rollout status daemonset -n kube-system aws-cloud-controller-manager
  6. O provedor de nuvem é responsável por definir o ProviderID do nó. Verifique se todos os nós estão inicializados com o ProviderID:

    kubectl describe nodes | grep "ProviderID"
  1. Atualize a configuração do cluster para habilitar a migração de líder em cluster.yml:

    services:
      kube-controller:
        extra_args:
          enable-leader-migration: "true"

    Observe que o provedor de nuvem ainda está aws nesta etapa:

    cloud_provider:
      name: aws
  2. Cordon os nós do plano de controle, para que os pods do controlador de nuvem da AWS sejam executados em nós apenas após o upgrade para o provedor de nuvem externo:

    kubectl cordon -l "node-role.kubernetes.io/controlplane=true"
  3. Para instalar o gerenciador de controlador de nuvem da AWS, você deve habilitar a migração de líder e seguir os mesmos passos que ao instalar a AWS em um novo cluster. Para habilitar a migração de líder, adicione o seguinte aos argumentos do contêiner na etapa 7 enquanto segue os passos para instalar o gráfico:

    - '--enable-leader-migration=true'
  4. Confirme que o chart está instalado, mas que os novos pods ainda não estão em execução devido aos nós do plano de controle que estão em cordonamento. Após atualizar o cluster na próxima etapa, o RKE fará upgrade e descordonará cada nó, e agendará aws-controller-manager pods.

  5. Atualize cluster.yml para mudar o provedor de nuvem e remover os argumentos de migração de líder do kube-controller.

    Selecionar External Amazon (out-of-tree) define --cloud-provider=external e permite que você habilite useInstanceMetadataHostname. Você deve habilitar useInstanceMetadataHostname para clusters de driver de nó e para clusters personalizados, caso contrário, você não fornecerá um nome de nó personalizado via --node-name. Habilitar useInstanceMetadataHostname consultará o serviço de metadados ec2 e definirá /hostname como hostname-override para kubelet e kube-proxy:

    rancher_kubernetes_engine_config:
      cloud_provider:
        name: external-aws
        useInstanceMetadataHostname: true/false

    Remova enable-leader-migration se você não quiser que ele esteja habilitado em seu cluster:

      services:
        kube-controller:
          extra_args:
            enable-leader-migration: "true"

    Você também pode desativar a migração de líder após concluir a migração. Faça upgrade do gráfico e remova a seguinte seção dos argumentos do contêiner:

    - --enable-leader-migration=true
  6. Se você estiver fazendo upgrade da versão do Kubernetes do cluster, defina a versão do Kubernetes também.

  7. Atualize o cluster. Os aws-cloud-controller-manager pods devem agora estar em execução.