automation-suite
2021.10
false
Importante :
A tradução automática foi aplicada parcialmente neste conteúdo. A localização de um conteúdo recém-publicado pode levar de 1 a 2 semanas para ficar disponível.
UiPath logo, featuring letters U and I in white
Fora do período de suporte

Guia de instalação do Automation Suite

Última atualização 21 de nov de 2024

Configuração das máquinas

Como configurar o disco

Importante:
  • Para evitar a perda de dados, certifique-se de que a infraestrutura que você usa não exclua automaticamente discos de clusters na reinicialização ou desligamento do cluster. Se essa capacidade estiver habilitada, certifique-se desabilitá-la.
  • Para garantir uma sessão tranquila e ininterrupta do SSH, recomendamos enfaticamente que você siga as etapas nas melhores práticas de instalação antes de configurar os discos e instalar o Automation Suite.
Você pode configurar e particionar os discos usando o script configureUiPathDisks.sh . Para obter detalhes, consulte as seções a seguir.

Requisitos do disco

Antes da instalação, você deve particionar e configurar o disco usando o LVM, para que seu tamanho possa ser alterado facilmente e sem nenhuma migração de dados ou perda de dados.

Particionamento do disco

A estrutura de particionamento padrão em máquinas RHEL não é adequada para a instalação do Kubernetes. Isso ocorre porque a infraestrutura do Kubernetes geralmente é instalada na partição /var. Por padrão, a partição var é alocada apenas 8 GiB de espaço.
Observação:
O formato aceito para o disco é ext4 ou xfs.

Todas as partições devem ser criadas usando o LVM. Isso é para garantir que os dados do cluster possam residir em um disco diferente, mas ainda possam ser exibidos de forma coerente. Isso também ajuda a estender o tamanho da partição no futuro sem o risco de migração de dados ou perda de dados.

Para o sistema operacional RHEL, você precisa garantir que tenha os seguintes tamanhos mínimos de pontos de montagem na máquina.

Online

Rótulo do disco

Partição

Tamanho

Finalidade

Disco do cluster

/var/lib/rancher

190 GiB

A pasta Rancher armazena imagens e camadas de contêineres

/var/lib/kubelet

56 GiB

A pasta Kubelet armazena configurações do Kubernetes em runtime, como segredos, configmaps e emptyDir

/opt/UiPathAutomationSuite

10 GiB

Binário do instalador

Disco do etcd

/var/lib/rancher/rke2/server/db

16 GiB

Banco de dados distribuído para Kubernetes

Data Disk

/datadisk

512 GiB (instalação básica)

Abstração de armazenamento em bloco

2 TiB (instalação completa)

Observação:
Recomendamos que você não use o disco do OS para qualquer um dos propósitos acima, para garantir que os processos recebam sua quota devida de recursos.
Offline
Observação:

Os requisitos para offline são os mesmos que para online, exceto para a primeira máquina em que você executa a instalação, que precisa dos seguintes requisitos.

O espaço extra é necessário para descompactar o pacote offline.

Rótulo do disco

Partição

Tamanho

Finalidade

Disco do cluster

/var/lib/rancher

190 GiB

A pasta Rancher armazena imagens e camadas de contêineres

/var/lib/kubelet

56 GiB

A pasta Kubelet armazena configurações do Kubernetes em runtime, como segredos, configmaps e emptyDir

/opt/UiPathAutomationSuite

10 GiB

Binário do instalador

Disco do etcd

/var/lib/rancher/rke2/server/db

16 GiB

Banco de dados distribuído para Kubernetes

Data Disk

/datadisk

512 GiB (instalação básica)

Abstração de armazenamento em bloco

2 TiB (instalação completa)

UiPath Bundle Disk

/uipath

512 GiB

Pacote isolado

Observação:
Recomendamos que você não use o disco do OS para qualquer um dos propósitos acima, para garantir que os processos recebam sua quota devida de recursos.
Observação:

Os discos de dados e etcd devem ser discos físicos separados. Isso isola fisicamente os discos de dados e do etcd de outras atividades e cargas de trabalho do cluster, ao mesmo tempo em que aprimora o desempenho e a estabilidade do cluster.

Consulte a seção a seguir para obter detalhes sobre como usar o script de exemplo para particionar e configurar o disco antes da instalação.

Como usar o script para configurar o disco

Como baixar o script

Observação: para instalações offline, você deve realizar essa etapa em uma máquina com acesso à internet e às máquinas isoladas nas quais o Automation Suite está implantado. Copie o arquivo da máquina online para a primeira máquina de destino.
Você pode usar o script configureUiPathDisks.sh para configurar e particionar o disco.

Para obter instruções de download, consulte configureUiPathDisks.sh.

Execução do script

Você pode usar o script configureUiPathDisks.sh para os seguintes propósitos:
  • configurar os discos e pontos de montagem para uma nova instalação de cluster do Automation Suite;
  • redimensionar o disco de dados após a instalação.

Para tornar o script executável, execute:

chmod +x ./configureUiPathDisks.shchmod +x ./configureUiPathDisks.sh

Para obter mais detalhes sobre o uso do script, execute o seguinte comando:

sudo ./configureUiPathDisks.sh --helpsudo ./configureUiPathDisks.sh --help
***************************************************************************************

Utility to configure the disk for UiPath Automation Suite Installation.
Run this script to configure the disks on new machine or to extend the size of datadisk

Arguments
  -n|--node-type                  NodeType, Possible values: agent, server. Default to server
  -i|--install-type               Installation mode, Possible values: online, offline. Default to online
  -c|--cluster-disk-name          Device to host rancher and  kubelet. Ex: /dev/sdb
  -e|--etcd-disk-name             Device to host etcd, Not required for agent node. Ex: /dev/sdb
  -l|--data-disk-name             Device to host datadisk, Not required for agent node. Ex: /dev/sdc
  -b|--bundle-disk-name           Device to host the uipath bundle. 
                                    Only required for offline installation on 1st server node 
  -f|--complete-suite             Installing complete product suite or any of these products: 
                                    aicenter, apps, taskmining, documentunderstanding. 
                                    This will configure the datadisk volume to be 2TiB instead of 512Gi.
  -p|--primary-server             Is this machine is first server machine? Applicable only for airgap install.
                                    This is the machine on which UiPath AutomationSuite bundle will be installed.
                                    Default to false
  -x|--extend-data-disk           Extend the datadisk. Either attach new disk or resize the exiting datadisk
  -r|--resize                     Used in conjunction of with --extend-data-disk to resize the exiting volume,
                                    instead of adding new volume               
  -d|--debug                      Run in debug
  -h|--help                       Display help

ExampleUsage:
  configureUiPathDisks.sh --node-type server --install-type online \
    --cluster-disk-name /dev/sdb --etcd-disk-name /dev/sdc \
    --data-disk-name /dev/sdd

  configureUiPathDisks.sh --data-disk-name /dev/sdh --extend-data-disk
******************************************************************************************************************************************************************************

Utility to configure the disk for UiPath Automation Suite Installation.
Run this script to configure the disks on new machine or to extend the size of datadisk

Arguments
  -n|--node-type                  NodeType, Possible values: agent, server. Default to server
  -i|--install-type               Installation mode, Possible values: online, offline. Default to online
  -c|--cluster-disk-name          Device to host rancher and  kubelet. Ex: /dev/sdb
  -e|--etcd-disk-name             Device to host etcd, Not required for agent node. Ex: /dev/sdb
  -l|--data-disk-name             Device to host datadisk, Not required for agent node. Ex: /dev/sdc
  -b|--bundle-disk-name           Device to host the uipath bundle. 
                                    Only required for offline installation on 1st server node 
  -f|--complete-suite             Installing complete product suite or any of these products: 
                                    aicenter, apps, taskmining, documentunderstanding. 
                                    This will configure the datadisk volume to be 2TiB instead of 512Gi.
  -p|--primary-server             Is this machine is first server machine? Applicable only for airgap install.
                                    This is the machine on which UiPath AutomationSuite bundle will be installed.
                                    Default to false
  -x|--extend-data-disk           Extend the datadisk. Either attach new disk or resize the exiting datadisk
  -r|--resize                     Used in conjunction of with --extend-data-disk to resize the exiting volume,
                                    instead of adding new volume               
  -d|--debug                      Run in debug
  -h|--help                       Display help

ExampleUsage:
  configureUiPathDisks.sh --node-type server --install-type online \
    --cluster-disk-name /dev/sdb --etcd-disk-name /dev/sdc \
    --data-disk-name /dev/sdd

  configureUiPathDisks.sh --data-disk-name /dev/sdh --extend-data-disk
***************************************************************************************

Como configurar o disco para uma configuração de produção pronta para alta disponibilidade de vários nós

Online

Nós de servidor

Para configurar o disco em uma configuração online de produção pronta para alta disponibilidade de vários nós, execute o seguinte comando em todas as máquinas do servidor:

./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --etcd-disk-name name_of_etcd_disk \
  --data-disk-name name_of_data_disk./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --etcd-disk-name name_of_etcd_disk \
  --data-disk-name name_of_data_disk
Nós de agente

Para configurar o disco em uma configuração online de produção pronta para alta disponibilidade de vários nós, execute o seguinte comando em todas as máquinas de agente:

./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --node-type agent./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --node-type agent

Offline

Primeiro nó do servidor

Em uma instalação offline, você precisa carregar as imagens do produto no registro do docker. Para isso, é necessário armazenamento adicional na forma de um disco separado. Esse disco será usado para descompactar pacotes de produtos e carregar imagens no registro do Docker. É necessário estar presente apenas na primeira máquina.

Defina o sinalizador --primary-server na primeira máquina do servidor ou na máquina na qual o instalador do Fabric e de serviço será executado.

Para configurar o disco em uma configuração offline de produção pronta para alta disponibilidade de vários nós, execute o seguinte comando na primeira máquina do servidor:

./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --etcd-disk-name name_of_etcd_disk \
  --data-disk-name name_of_data_disk \
  --bundle-disk-name name_of_uipath_bundle_disk \
  --primary-server \
  --install-type offline./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --etcd-disk-name name_of_etcd_disk \
  --data-disk-name name_of_data_disk \
  --bundle-disk-name name_of_uipath_bundle_disk \
  --primary-server \
  --install-type offline
Nós adicionais do servidor
Nos nós de servidor, você não precisa do disco do pacote. Portanto, você não precisa fornecer o --primary-server e --bundle-disk-name.

Para configurar o disco em uma configuração offline de produção pronta para alta disponibilidade de vários nós, execute o seguinte comando nas outras máquinas do servidor:

./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --etcd-disk-name name_of_etcd_disk \
  --data-disk-name name_of_data_disk \
  --install-type offline./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --etcd-disk-name name_of_etcd_disk \
  --data-disk-name name_of_data_disk \
  --install-type offline
Nós de agente
Nos nós de servidor, você não precisa do disco do pacote. Portanto, você não precisa fornecer o --primary-server e --bundle-disk-name.

Para configurar o disco em uma configuração offline de produção pronta para alta disponibilidade de vários nós, execute o seguinte comando nas outras máquinas de agente.

./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --node-type agent \
  --install-type offline./configureUiPathDisks.sh --cluster-disk-name name_of_cluster_disk \
  --node-type agent \
  --install-type offline

Como estender a pós-instalação do disco de dados

Para estender o disco de dados, você pode anexar o novo disco físico ou redimensionar o disco existente.

Como adicionar um novo disco

Para estender o disco de dados usando o disco recém-anexado, execute o seguinte comando nas máquinas servidoras:

./configureUiPathDisks.sh --data-disk-name name_of_data_disk \
  --extend-data-disk./configureUiPathDisks.sh --data-disk-name name_of_data_disk \
  --extend-data-disk

Como redimensionar o disco existente

Para estender o disco de dados redimensionando o disco existente, execute o seguinte comando nas máquinas do servidor:

./configureUiPathDisks.sh --extend-data-disk --resize./configureUiPathDisks.sh --extend-data-disk --resize

Como validar montagens no disco

  1. Realize as etapas a seguir para validar se /etc/fstab está configurado corretamente para lidar com a reinicialização do sistema.
    Observação:
    Certifique-se de que os pontos de montagem do disco do etcd e de dados sejam adicionados no arquivo fstab.
    Se você tiver uma partição de disco separada para /var/lib/rancher e /var/lib/kubelet, então fstab também deve conter essas duas pastas. Certifique-se também de incluir a opção nofail nessas entradas fstab para que não afete a inicialização da VM em caso de falhas.
  2. Valide se os discos estão montados corretamente executando o seguinte comando:

    mount -afvmount -afv
  3. Você deve obter a seguinte resposta:

    /datadisk                              : already mounted
    /var/lib/rancher/rke2/server/db        : already mounted
    /var/lib/rancher                       : already mounted
    /var/lib/kubelet                       : already mounted/datadisk                              : already mounted
    /var/lib/rancher/rke2/server/db        : already mounted
    /var/lib/rancher                       : already mounted
    /var/lib/kubelet                       : already mounted

Configuração dos ajustes do nível do kernel e SO

A página a seguir ajuda os administradores do Linux no gerenciamento de configurações no nível do sistema operacional e do kernel antes de realizar uma instalação do Automation Suite.

Normalmente, essas configurações são gerenciadas por meio de uma ferramenta de configuração de gerenciamento dedicada, como o Puppet. Certifique-se de que as alterações que você faz estejam de acordo com o processo de controle de seu ambiente para fins de consistência e documentação.

Importante:

Certifique-se de concluir as seguintes etapas antes de iniciar a instalação, pois configurações incorretas no nível do sistema operacional e do kernel podem levar a erros não intuitivos. A verificação dessas configurações específicas muitas vezes pode evitar esses erros.

Ajuste das configurações do sysctl

As seguintes configurações sysctl são necessárias na máquina:
  • Habilitar Encaminhamento de IP

  • desativação da filtragem de caminho reverso

Você pode fazer isso executando o seguinte comando:

cat <<EOF >>"/etc/sysctl.d/99-sysctl.conf"
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.conf.all.rp_filter=0
EOFcat <<EOF >>"/etc/sysctl.d/99-sysctl.conf"
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.conf.all.rp_filter=0
EOF
Observação: o nf-call-iptables é necessário para a maioria das implantações do Kubernetes. O Kubernetes cria redes virtuais internas para o cluster. Isso permite que cada pod tenha seu próprio endereço IP, que é usado em conjunto com os serviços de nome internos para facilitar a comunicação de serviço a serviço. O cluster não funciona sem o nf-call-iptables habilitado. Para obter detalhes, consulte a documentação oficial do Kubernetes.

Para aplicar as configurações, execute o seguinte comando:

sysctl --systemsysctl --system

Configuração de ajustes de fapolicy

Se estiver usando fapolicy, é necessária uma política específica do RKE2. Para gerar isso, use o seguinte comando:

cat <<-EOF >>"/etc/fapolicyd/rules.d/69-rke2.rules"
allow perm=any all : dir=/var/lib/rancher/
allow perm=any all : dir=/opt/cni/
allow perm=any all : dir=/run/k3s/
allow perm=any all : dir=/var/lib/kubelet/
allow perm=any all : dir=/root/.local/share/helm
EOFcat <<-EOF >>"/etc/fapolicyd/rules.d/69-rke2.rules"
allow perm=any all : dir=/var/lib/rancher/
allow perm=any all : dir=/opt/cni/
allow perm=any all : dir=/run/k3s/
allow perm=any all : dir=/var/lib/kubelet/
allow perm=any all : dir=/root/.local/share/helm
EOF
Observação:

Certifique-se de que a alteração seja comunicada à sua equipe do Linux e passe pelos processos de gerenciamento de configuração apropriados.

Configuração dos ajustes de noexec e nosuid

Os discos usados para a montagem /var/lib/rancher não devem ter noexec ou nosuid definidos. A ferramenta de disco cria automaticamente essas montagens sem essas propriedades.
Importante:

Se um administrador do Linux definir manualmente essas propriedades, a instância torna-se não funcional.

Para obter mais detalhes sobre a configuração do disco, consulte Requisitos de disco.

Como habilitar portas

Certifique-se de ter as seguintes portas habilitadas em seu firewall para cada origem.

Porta

Protocol

Origem

Finalidade

Requisitos

22

TCP

Jump Server/máquina cliente

Para SSH (instalação, depuração de gerenciamento de cluster)

Não abra esta porta para a internet. Permita o acesso à máquina cliente ou ao jump server.

80

TCP

 

Apenas instalação offline: necessário para enviar notificações de email do sistema.

 

443

TCP

Todos os nós em um cluster + balanceador de carga

Para HTTPS (acessando o Automation Suite)

Essa porta deve ter conectividade de entrada e saída de todos os nós do cluster e do balanceador de carga.

587

TCP

 

Apenas instalação offline: necessário para enviar notificações de email do sistema.

 

2379

TCP

Todos os nós em um cluster

Porta do cliente do etcd

Não deve expor à internet. O acesso entre os nós deve ser suficiente em um endereço IP privado.

2380

TCP

Todos os nós em um cluster

Porta do par do etcd

Não deve expor à internet. O acesso entre os nós deve ser suficiente em um endereço IP privado.

6443

TCP

Todos os nós em um cluster

Para acessar a API do Kube usando HTTPS, e obrigatório para associação de nó

Essa porta deve ter conectividade de entrada e saída de todos os nós do cluster.

8472

UDP

Todos os nós em um cluster

Obrigatório para Flanel (VXLAN)

Não deve expor à internet. O acesso entre os nós deve ser suficiente em um endereço IP privado.

9345

TCP

Todos os nós em um cluster + balanceador de carga

Para acessar a API Kube usando HTTP, obrigatório para associar o nó

Essa porta deve ter conectividade de entrada e saída de todos os nós do cluster e do balanceador de carga.

10250

TCP

Todos os nós em um cluster

kubelet / servidor de métricas

Não deve expor à internet. O acesso entre os nós deve ser suficiente em um endereço IP privado.

30071

TCP

Todos os nós em um cluster

A porta NodePort para comunicação interna entre nós em um cluster

Não deve expor à internet. O acesso entre os nós deve ser suficiente em um endereço IP privado.

Importante:
Expor a porta 6443 fora do limite do cluster é obrigatório se houver uma conexão direta com a API do Kerberos.
A porta 9345 é usada pelos nós para descobrir nós existentes e ingressar no cluster na implantação de vários nós. Para manter os mecanismos de descoberta de alta disponibilidade em funcionamento, recomendamos expô-los por meio do balanceador de carga com verificação de integridade.

Certifique-se também de ter conectividade de todos os nós com o SQL Server.

Não exponha o SQL Server em uma das portas reservadas do Istio, pois isso pode causar falhas de conexão.

Se você tiver um firewall configurado na rede, certifique-se de que ele tenha essas portas abertas e permita o tráfego de acordo com os requisitos mencionados acima.

Opcional: configuração do servidor proxy

Para configurar um proxy, você precisa realizar etapas de configuração adicionais ao configurar seu ambiente com os pré-requisitos e durante a fase de configuração avançada no momento da instalação.

As etapas a seguir são obrigatórias ao configurar o ambiente.

Observação: atualmente, não temos compatibilidade com o proxy HTTPS com certificados autoassinados. Certifique-se de usar um certificado público confiável se estiver configurando o proxy.

Etapa 1: habilitação de portas na rede virtual

Certifique-se de ter as seguintes regras habilitadas em seu grupo de segurança de rede para a rede virtual fornecida.

Origem

Destino

Rota por proxy

Porta

Description

Rede Virtual

Sql

Não

Porta do SQL Server

Obrigatório para o SQL Server.

Rede Virtual

Load balancer

Não

9345

6443

Obrigatório para adicionar novos nós ao cluster.

Rede Virtual

Cluster(sub-rede)

Não

Todas as portas

Obrigatório para comunicação em um intervalo de IP privado.

Rede Virtual

alm.<fqdn>

Não

443

Obrigatório para login e uso do cliente do ArgoCD durante a implantação.

Rede Virtual

Servidor de Proxy

Sim

Todas as portas

Obrigatório para rotear o tráfego para o servidor proxy.

Rede Virtual

NameServer

Não

Todas as portas

A maioria dos serviços de nuvem, como o Azure e o AWS, usa isso para buscar os metadados da VM e considera isso um IP privado.

Rede Virtual

MetaDataServer

Não

Todas as portas

A maioria dos serviços em nuvem, como o Azure e o AWS, usa o endereço IP 169.254.169.254 para buscar metadados da máquina.

Etapa 2: adição da configuração de proxy a cada nó

Ao configurar os nós, você precisa adicionar a configuração de proxy a cada nó que faz parte do cluster. Esta etapa é obrigatória para rotear o tráfego de saída do nó por meio do servidor proxy.

  1. Adicione a seguinte configuração em /etc/environment:
    http_proxy=http://<PROXY-SERVER-IP>:<PROXY-PORT>
    https_proxy=http://<PROXY-SERVER-IP>:<PROXY-PORT>
    no_proxy=alm.<fqdn>,<fixed_rke2_address>,<named server address>,<metadata server address>,<private_subnet_ip>,localhost,<Comma separated list of ips that should not got though proxy server>http_proxy=http://<PROXY-SERVER-IP>:<PROXY-PORT>
    https_proxy=http://<PROXY-SERVER-IP>:<PROXY-PORT>
    no_proxy=alm.<fqdn>,<fixed_rke2_address>,<named server address>,<metadata server address>,<private_subnet_ip>,localhost,<Comma separated list of ips that should not got though proxy server>
  2. Adicione a seguinte configuração em /etc/wgetrc:
    http_proxy=http://<PROXY-SERVER-IP>:<PROXY-PORT>
    https_proxy=http://<PROXY-SERVER-IP>:<PROXY-PORT>
    no_proxy=alm.<fqdn>,<fixed_rke2_address>,<named server address>,<metadata server address>,<private_subnet_ip>,localhost,<Comma separated list of ips that should not got though proxy server>http_proxy=http://<PROXY-SERVER-IP>:<PROXY-PORT>
    https_proxy=http://<PROXY-SERVER-IP>:<PROXY-PORT>
    no_proxy=alm.<fqdn>,<fixed_rke2_address>,<named server address>,<metadata server address>,<private_subnet_ip>,localhost,<Comma separated list of ips that should not got though proxy server>

    Parâmetros obrigatórios

    Description

    http_proxy

    Usado para rotear solicitações de saída HTTP a partir do nó. Este deve ser o FQDN e a porta do servidor proxy.

    https_proxy

    Usado para rotear solicitações de saída HTTPS a partir do nó. Este deve ser o FQDN e a porta do servidor proxy.

    no_proxy

    Lista de hosts separados por vírgulas, endereços IP que você não deseja rotear por meio do servidor proxy. Este deve ser um intervalo de sub-rede privada, host do servidor SQL, endereço do servidor nomeado, endereço do servidor de metadados: alm.<fqdn>,<fixed_rke2_address>,<named server address>,<metadata server address>.
    • metadata server address – A maioria dos serviços em nuvem, como o Azure e a AWS, faz uso do endereço IP 169.254.169.254 para buscar metadados de máquina.
    • named server address – A maioria dos serviços em nuvem, como o Azure e a AWS, faz uso disso para resolver consultas DNS.
  3. Verifique se as configurações de proxy estão definidas corretamente executando o seguinte comando:

    curl -v $HTTP_PROXY
    curl -v <fixed_rke_address>:9345curl -v $HTTP_PROXY
    curl -v <fixed_rke_address>:9345
    Importante: após você atender aos requisitos do servidor do proxy, certifique-se de continuar com a configuração do proxy durante a instalação. Siga as etapas em Opcional: configuração do servidor do proxy para garantir que o servidor do proxy esteja configurado corretamente.

Esta página foi útil?

Obtenha a ajuda que você precisa
Aprendendo RPA - Cursos de automação
Fórum da comunidade da Uipath
Uipath Logo White
Confiança e segurança
© 2005-2024 UiPath. Todos os direitos reservados.