Implantações completas do Kubernetes no AKS Edge Essentials

Atenção

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árias máquinas para suportar uma arquitetura de microsserviços distribuídos. O AKS Edge Essentials destina-se a configurações estáticas e não permite a criação/eliminação de VM dinâmica nem a gestão 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 Linux por máquina, juntamente com uma VM 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 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 switch externo. Com essa configuração, você pode executar kubectl a partir de outra máquina na rede, avaliar o desempenho da carga de trabalho em um switch 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

Este 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ó 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 um ou Wi-FiEthernet :

    # 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.

    Nota

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

    Captura de ecrã do gestor de comutadores Hyper-V.

  • Endereços IP: Você deve alocar endereços IP livres da sua rede para o Plano de Controle, serviços Kubernetes e Nós (VMs). Consulte a visão geral da rede 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, é provável que seja gratuito. Atualmente, o AKS Edge Essentials suporta apenas 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 atualmente em uso, 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. Flannel é a CNI padrão para um cluster K3S. Em um cluster K8S, altere o NetworkPlugin 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, e Init.ServiceIPRangeSizeNetwork.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 elevada do PowerShell com os módulos carregados. Em seguida, execute o seguinte comando para validar os 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 Kubernetes é mostrada abaixo:

Diagrama mostrando todos os pods em execução.

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

Atenção

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

Se você quiser adicionar um nó do Windows a uma máquina somente Linux existente, 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 (poder de processamento), 4 GB ou mais para LinuxNode.MemoryinMB (RAM) e atribua LinuxNode.CpuCount 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 Linux e Windows

Para executar o plano de controle do Linux e o nó de trabalho do Windows em uma máquina, 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óximos passos