Implantações completas do Kubernetes no AKS Edge Essentials

Cuidado

A implantação completa em várias máquinas é atualmente um recurso experimental. Estamos trabalhando ativamente nesse recurso.

Você pode configurar um cluster do AKS Edge Essentials para ser executado em vários computadores para dar suporte a uma arquitetura de microsserviços distribuída. O AKS Edge Essentials é para configurações estáticas e não habilita a criação/exclusão de VM dinâmica ou o gerenciamento do ciclo de vida do cluster, ao contrário do AKS na nuvem ou do AKS HCI. O AKS Edge Essentials tem apenas uma VM do Linux por cada computador, juntamente com uma VM do Windows, se necessário. Cada VM tem uma alocação estática de RAM, armazenamento e núcleos físicos de CPU atribuídos no momento da instalação. Em uma implantação de vários nós, uma das máquinas é a máquina primária com o nó de controle do Kubernetes e as outras máquinas serão máquinas secundárias com os nós de trabalho. Neste cenário de implantação, configuraremos o cluster K8S usando um comutador externo. Com essa configuração, você pode executar kubectl de outro computador em sua rede, avaliar o desempenho da carga de trabalho em um comutador externo e assim por diante.

Pré-requisitos

Configure sua máquina conforme descrito no artigo Configurar máquina .

Etapa 1: parâmetros completos de configuração de implantação do Kubernetes

Você pode gerar os parâmetros necessários para criar um cluster escalável usando o seguinte comando:

New-AksEdgeConfig -DeploymentType ScalableCluster -outFile .\aksedge-config.json | Out-Null

Esse comando cria um arquivo de configuração chamado aksedge-config.json, que inclui a configuração necessária para criar um cluster escalável com um nó do Linux. O arquivo é criado em seu diretório de trabalho atual. Consulte Configuração JSON de implantação para obter descrições detalhadas dos parâmetros de configuração (como configurações de proxy).

Consulte os exemplos a seguir para obter mais opções para criar o arquivo de configuração.

Os principais parâmetros a serem observados para uma implantação escalável do Kubernetes são:

  • Informações do comutador externo: uma implantação completa usa um comutador externo para habilitar a comunicação entre os nós. Você deve especificar o MachineConfigType.NetworkConnection.AdapterName parâmetro como ou Ethernet Wi-Fi:

    # get the list of available adapters in the machine
    Get-NetAdapter -Physical | Where-Object { $_.Status -eq 'Up' }
    

    Se você criou um comutador externo no Hyper-V, pode optar por especificar os detalhes do vswitch no arquivo de configuração. Se você não criar um comutador externo no gerenciador do Hyper-V e executar o comando, o New-AksEdgeDeployment AKS Edge Essentials criará automaticamente um comutador externo chamado aksedgesw-ext e o usará para sua implantação.

    Observação

    Nesta versão, há um problema conhecido com a criação automática de um comutador externo com o New-AksEdgeDeployment comando se você estiver usando um adaptador Wi-Fi para o comutador. Nesse caso, primeiro crie o comutador externo usando o gerenciador do Hyper-V – Gerenciador de Comutador Virtual, mapeie o comutador para o adaptador Wi-Fi e forneça os detalhes do comutador no JSON de configuração, conforme descrito abaixo.

    Captura de tela do gerenciador de comutadores do Hyper-V.

  • Endereços IP: você deve alocar endereços IP gratuitos de sua rede para o Plano de Controle, os serviços do Kubernetes e os nós (VMs). Consulte a visão geral da rede do AKS Edge Essentials para obter mais detalhes. Por exemplo, em uma rede local com o intervalo de endereços IP 192.168.1.0/24, você pode ter 1.151 e superior fora do escopo DHCP e, portanto, provavelmente estará livre. Atualmente, o AKS Edge Essentials dá suporte apenas a endereços IPv4. Idealmente, você saberá quais endereços IP gratuitos você pode usar; no entanto, você pode usar o script AksEdge-ListUsedIPv4s do repositório GitHub para exibir IPs que estão em uso no momento, para evitar o uso desses endereços IP em sua configuração. Os seguintes parâmetros precisarão ser fornecidos na Network seção do arquivo de configuração: ControlPlaneEndpointIp, Ip4GatewayAddress, Ip4PrefixLength, ServiceIPRangeSize, ServiceIPRangeStart, e DnsServers.

Importante

O Kubernetes pod cidr é 10.42.0.0/16 para K3s e 10.244.0.0/24 para K8s. O Kubernetes service cidr é 10.43.0.0/16 para K3s e 10.96.0.0/12 para K8s.

  • O Network.NetworkPlugin valor por padrão é flannel. Flanela é a CNI padrão para um cluster K3S. Em um cluster K8S, altere o NetworkPlugin arquivo para calico.
  • Além dos parâmetros anteriores, você pode definir os seguintes parâmetros de acordo com sua configuração de implantação, conforme descrito aqui: LinuxNode.CpuCount, LinuxNode.MemoryInMB, LinuxNode.DataSizeInGB, LinuxNode.Ip4Address, WindowsNode.CpuCount, WindowsNode.MemoryInMB, WindowsNode.Ip4Address, Init.ServiceIPRangeSizee Network.InternetDisabled.

Etapa 2: validar o arquivo de configuração

Depois de atualizar o arquivo aksedge-config.json , execute a ferramenta AksEdgePrompt. Essa ferramenta abre uma janela do PowerShell com privilégios elevados com os módulos carregados. Em seguida, execute o seguinte comando para validar seus parâmetros de rede usando o Test-AksEdgeNetworkParameters cmdlet:

Test-AksEdgeNetworkParameters -JsonConfigFilePath .\aksedge-config.json

Etapa 3: criar um cluster de implantação completo

Se Test-AksEdgeNetworkParameters retornar true, você estará pronto para criar sua implantação. Você pode criar a implantação usando o New-AksEdgeDeployment cmdlet:

New-AksEdgeDeployment -JsonConfigFilePath .\aksedge-config.json

O New-AksEdgeDeployment cmdlet recupera automaticamente o arquivo kubeconfig.

Etapa 4: validar sua implantação

kubectl get nodes -o wide
kubectl get pods --all-namespaces -o wide

Uma captura de tela de um cluster do Kubernetes é mostrada abaixo:

Diagrama mostrando todos os pods em execução.

Etapa 5: adicionar um nó de trabalho do Windows (opcional)

Cuidado

Os nós de trabalho do Windows são um recurso experimental nesta versão. Estamos trabalhando ativamente nesse recurso.

Se você deseja adicionar um nó do Windows a uma máquina existente somente Linux, você pode executar:

New-AksEdgeScaleConfig -ScaleType AddNode -NodeType Windows -WindowsNodeIp "xxx" -outFile .\ScaleConfig.json | Out-Null

Você também pode especificar parâmetros como CpuCount e/ou MemoryInMB para sua VM do Windows aqui.

Você pode usar o arquivo de configuração gerado e executar o seguinte comando para adicionar o nó do Windows

Add-AksEdgeNode -JsonConfigFilePath .\ScaleConfig.json

Exemplo de configuração para diferentes opções de implantação

Alocar recursos para seus nós

Para se conectar ao Arc e implantar seus aplicativos com o GitOps, aloque quatro CPUs ou mais para o LinuxNode.CpuCount (poder de processamento), 4 GB ou mais para LinuxNode.MemoryinMB (RAM) e atribua um número maior que 0 ao ServiceIpRangeSize. Aqui, alocamos 10 endereços IP para seus serviços Kubernetes:

{
    "Init": {
        "ServiceIpRangeSize": 10,
        "ServiceIPRangeStart": "192.168.1.151"
    },
    "Network": {
        "ControlPlaneEndpointIp": "192.168.1.191",
        "NetworkPlugin": "calico",
        "Ip4GatewayAddress": "192.168.1.1",
        "Ip4PrefixLength": 24,
        "DnsServers": ["192.168.1.1"]
    },
    "Machines": [
        {
            "NetworkConnection": {
                "AdapterName": "Ethernet"
            },
            "LinuxNode": {
                "CpuCount": 4,
                "MemoryInMB": 4096,
                "DataSizeInGB": 20,
                "Ip4Address": "192.168.1.171"
            }
        }
    ]
}

Criar nós do Linux e do Windows

Para executar o plano de controle do Linux e o nó de trabalho do Windows em um computador, crie o arquivo de configuração usando o seguinte comando:

New-AksEdgeConfig -DeploymentType ScalableCluster -NodeType LinuxAndWindows -outFile .\aksedge-config.json | Out-Null

Crie a implantação usando o comando :

New-AksEdgeDeployment -JsonConfigFilePath .\aksedge-config.json
{
  "Machines": [
      {
          "NetworkConnection": {
              "AdapterName": "Ethernet"
          },
          "LinuxNode": {
              "CpuCount": 4,
              "MemoryInMB": 4096,
              "DataSizeInGB": 20,
              "Ip4Address": "192.168.1.171"
          },
          "WindowsNode": {
              "CpuCount": 2,
              "MemoryInMB": 4096,
              "Ip4Address": "192.168.1.172"
          }
      }
  ]
}

Próximas etapas