Criar controlador de dados habilitado para Azure Arc usando ferramentas do Kubernetes

Um controlador de dados gerencia serviços de dados habilitados para Azure Arc para um cluster Kubernetes. Este artigo descreve como usar as ferramentas do Kubernetes para criar um controlador de dados.

A criação do controlador de dados tem as seguintes etapas de alto nível:

  1. Criar o namespace e o serviço de bootstrapper
  2. Criar o controlador de dados

Nota

Para simplificar, as etapas abaixo pressupõem que você seja um administrador de cluster do Kubernetes. Para implantações de produção ou ambientes mais seguros, recomenda-se seguir as práticas recomendadas de segurança de "menor privilégio" ao implantar o controlador de dados, concedendo apenas permissões específicas a usuários e contas de serviço envolvidas no processo de implantação.

Consulte o tópico Operar serviços de dados habilitados para Arc com privilégios mínimos para obter instruções detalhadas.

Pré-requisitos

Analise o tópico Planejar uma implantação de serviços de dados habilitados para Azure Arc para obter informações gerais.

Para criar o controlador de dados usando as ferramentas do Kubernetes, você precisará ter as ferramentas do Kubernetes instaladas. Os exemplos neste artigo usarão kubectl, mas abordagens semelhantes podem ser usadas com outras ferramentas do Kubernetes, como o painel do Kubernetes, ocou helm se você estiver familiarizado com essas ferramentas e o Kubernetes yaml/json.

Instale a ferramenta kubectl

Criar o namespace e o serviço de bootstrapper

O serviço bootstrapper lida com solicitações de entrada para criar, editar e excluir recursos personalizados, como um controlador de dados.

Salve uma cópia de bootstrapper-unified.yaml e substitua o espaço reservado {{NAMESPACE}} em todos os locais do arquivo pelo nome de namespace desejado, por exemplo: arc.

Importante

O arquivo de modelo bootstrapper-unified.yaml usa como padrão extrair a imagem do contêiner do bootstrapper do Microsoft Container Registry (MCR). Se o seu ambiente não puder acessar diretamente o Microsoft Container Registry, você poderá fazer o seguinte:

  • Siga as etapas para extrair as imagens de contêiner do Microsoft Container Registry e enviá-las por push para um registro de contêiner privado.
  • Crie um segredo de extração de imagem nomeado arc-private-registry para seu registro de contêiner privado.
  • Altere o URL da imagem para a imagem bootstrapper no arquivo bootstrap.yaml.
  • Substitua arc-private-registry no arquivo bootstrap.yaml se um nome diferente foi usado para o segredo de extração de imagem.

Execute o seguinte comando para criar o namespace e o serviço de bootstrapper com o arquivo editado.

kubectl apply --namespace arc -f bootstrapper-unified.yaml

Verifique se o pod de bootstrapper está em execução usando o comando a seguir.

kubectl get pod --namespace arc -l app=bootstrapper

Se o status não for Em execução, execute o comando algumas vezes até que o status seja Em execução.

Criar o controlador de dados

Agora você está pronto para criar o próprio controlador de dados.

Primeiro, crie uma cópia do arquivo de modelo localmente no seu computador para que você possa modificar algumas das configurações.

Crie as métricas e logs de painéis, nomes de usuário e senhas

Na parte superior do arquivo, você pode especificar um nome de usuário e senha que são usados para autenticar nos painéis de métricas e logs como administrador. Escolha uma senha segura e compartilhe-a apenas com aqueles que precisam ter esses privilégios.

Um segredo do Kubernetes é armazenado como uma string codificada em base64 - uma para o nome de usuário e outra para a senha.

Você pode usar uma ferramenta on-line para codificar base64 seu nome de usuário e senha desejados ou você pode usar ferramentas CLI integradas, dependendo da sua plataforma.

PowerShell

[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('<your string to encode here>'))

#Example
#[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes('example'))

Linux/macOS

echo -n '<your string to encode here>' | base64

#Example
# echo -n 'example' | base64

Criar certificados para logs e painéis de métricas

Opcionalmente, você pode criar certificados SSL/TLS para os logs e painéis de métricas. Siga as instruções em Especificar certificados SSL/TLS durante a implantação das ferramentas nativas do Kubernetes.

Editar a configuração do controlador de dados

Edite a configuração do controlador de dados conforme necessário:

NECESSÁRIO

  • local: altere este para ser o local do Azure onde os metadados sobre o controlador de dados serão armazenados. Reveja a lista de regiões disponíveis.
  • resourceGroup: o grupo de recursos do Azure onde você deseja criar o recurso do Azure do controlador de dados no Azure Resource Manager. Normalmente, esse grupo de recursos já deve existir, mas não é necessário até o momento em que você carrega os dados no Azure.
  • assinatura: o GUID de assinatura do Azure para a assinatura na qual você deseja criar os recursos do Azure.

RECOMENDADO PARA REVER E, POSSIVELMENTE, ALTERAR PADRÕES

  • armazenamento.. className: a classe de armazenamento a ser usada para os dados e arquivos de log do controlador de dados. Se você não tiver certeza das classes de armazenamento disponíveis em seu cluster Kubernetes, poderá executar o seguinte comando: kubectl get storageclass. O padrão é o que pressupõe que há uma classe de armazenamento que existe e é nomeadadefault, não que há uma classe de armazenamento que é default o padrão. Nota: Há duas configurações className a serem definidas para a classe de armazenamento desejada - uma para dados e outra para logs.
  • serviceType: altere o tipo de serviço para NodePort se você não estiver usando um LoadBalancer.
  • Segurança Para o Red Hat OpenShift ou Red Hat OpenShift Container Platform, substitua as security: configurações pelos seguintes valores no arquivo yaml do controlador de dados.
  security:
    allowDumps: false
    allowNodeMetricsCollection: false
    allowPodMetricsCollection: false

OPCIONAL

  • name: O nome padrão do controlador de dados é arc, mas você pode alterá-lo se desejar.
  • displayName: defina isso com o mesmo valor que o atributo name na parte superior do arquivo.
  • logsui-certificate-secret: O nome do segredo criado no cluster do Kubernetes para o certificado da interface do usuário de logs.
  • metricsui-certificate-secret: o nome do segredo criado no cluster do Kubernetes para o certificado da interface do usuário de métricas.

O exemplo a seguir mostra um yaml de controlador de dados concluído.

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: metricsui-admin-secret
type: Opaque

---

apiVersion: v1
data:
  password: <your base64 encoded password>
  username: <your base64 encoded username>
kind: Secret
metadata:
  name: logsui-admin-secret
type: Opaque

---

apiVersion: arcdata.microsoft.com/v5
kind: DataController
metadata:
  name: arc-dc
spec:
  credentials:
    dockerRegistry: arc-private-registry # Create a registry secret named 'arc-private-registry' if you are going to pull from a private registry instead of MCR.
    serviceAccount: sa-arc-controller
  docker:
    imagePullPolicy: Always
    imageTag: v1.29.0_2024-04-09
    registry: mcr.microsoft.com
    repository: arcdata
  infrastructure: other # Must be a value in the array [alibaba, aws, azure, gcp, onpremises, other]
  security:
    allowDumps: true # Set this to false if deploying on OpenShift
    allowNodeMetricsCollection: true # Set this to false if deploying on OpenShift
    allowPodMetricsCollection: true # Set this to false if deploying on OpenShift
  services:
  - name: controller
    port: 30080
    serviceType: LoadBalancer # Modify serviceType based on your Kubernetes environment
  settings:
    ElasticSearch:
      vm.max_map_count: "-1"
    azure:
      connectionMode: indirect # Only indirect is supported for Kubernetes-native deployment for now.
      location: eastus # Choose a different Azure location if you want
      resourceGroup: <your resource group>
      subscription: <your subscription GUID>
    controller:
      displayName: arc-dc
      enableBilling: true
      logs.rotation.days: "7"
      logs.rotation.size: "5000"
  storage:
    data:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 15Gi
    logs:
      accessMode: ReadWriteOnce
      className: default # Use default configured storage class or modify storage class based on your Kubernetes environment
      size: 10Gi

Salve o arquivo editado em seu computador local e execute o seguinte comando para criar o controlador de dados:

kubectl create --namespace arc -f <path to your data controller file>

#Example
kubectl create --namespace arc -f data-controller.yaml

Monitorando o status de criação

A criação do controlador levará alguns minutos para ser concluída. Você pode monitorar o progresso em outra janela do terminal com os seguintes comandos:

kubectl get datacontroller --namespace arc
kubectl get pods --namespace arc

Você também pode verificar o status de criação ou logs de qualquer pod específico executando um comando como abaixo. Isso é especialmente útil para solucionar problemas.

kubectl describe pod/<pod name> --namespace arc
kubectl logs <pod name> --namespace arc

#Example:
#kubectl describe pod/control-2g7bl --namespace arc
#kubectl logs control-2g7b1 --namespace arc

Solução de problemas de criação

Se você encontrar algum problema com a criação, consulte o guia de solução de problemas.