Ansible AWX


Com o fim do suporte ao CentOS 7 (RIP 30/07/2024), surgiu a necessidade de migrar o nosso sistema de telefonia para uma nova versão do sistema operacional. Após algumas análises, optamos por utilizar o Rocky Linux 8, que vem ganhando bastante espaço como uma alternativa estável e compatível com o antigo CentOS.
No entanto, nosso sistema possui diversas dependências e ajustes específicos para funcionar corretamente. O problema? Esses ajustes são todos feitos manualmente — e isso consome um tempo considerável (mas sério, um tempo bem grande mesmo!).
Foi aí que surgiu a ideia de automatizar esse processo. Já tinha utilizado o Ansible em algumas situações, mas dessa vez eu procurava algo mais visual, com interface gráfica, que facilitasse ainda mais a gestão dos playbooks e a execução das tarefas.
E foi assim que encontrei o Ansible AWX.
Por que escrever este artigo?
Resolvi escrever este artigo para compartilhar como foi o processo de instalação do AWX. Depois de algumas tentativas (e alguns tropeços), finalmente consegui fazer tudo funcionar — e acredito que isso pode ajudar outras pessoas que estejam no mesmo caminho.
Requisitos mínimos
Antes de colocar a mão na massa, vale listar os requisitos mínimos para subir o AWX com uma boa margem de estabilidade:
CPU: 2 vCPUs
Disco: 20 GB
RAM: 4 GB
Coragem: sim, porque a documentação oficial pode ser um pouco confusa às vezes 😅
Escolha do sistema operacional
Para hospedar o AWX, escolhi utilizar o Ubuntu Server (24.04 LTS), por ser leve, estável e ter uma grande comunidade. Além disso, muitos exemplos de instalação que encontrei também utilizavam Ubuntu, o que facilitou um pouco o caminho.
Primeiros passos
Como fiz uma instalação limpa do sistema operacional para subir o AWX, o primeiro comando que sempre utilizo é:
apt update && apt upgrade
Após isso, para manter o ambiente organizado, criei uma pasta para a instalação:
mkdir awx
cd awx
Instalando o K3s
O AWX precisa rodar em cima de um cluster Kubernetes. Para simplificar, optei por usar o K3s, uma versão leve e prática do Kubernetes. A instalação é bem simples:
curl -sfL https://get.k3s.io | sh -
Para verificar se o cluster está rodando corretamente, use:
kubectl get nodes
Se tudo estiver certo, você verá uma saída semelhante a esta:
NAME STATUS ROLES AGE VERSION
awx-node Ready control-plane,master 1m v1.29.1+k3s1
Criando o arquivo kustomization.yaml
Dentro da pasta awx
, vamos criar o arquivo:
vim kustomization.yaml
Com o seguinte conteúdo:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- github.com/ansible/awx-operator/config/default?ref=2.9.0
images:
- name: quay.io/ansible/awx-operator
newTag: 2.9.0
namespace: awx
O que faz esse kustomization.yaml
?
Esse arquivo é usado para instalar o AWX Operator no Kubernetes utilizando o Kustomize. Ele:
Importa os manifests do AWX Operator diretamente do GitHub;
Define a versão da imagem do operator;
Aplica tudo no namespace
awx
, que deve ser criado antes.
Aplicando a instalação do Operator
Depois de ter editado o arquivo rode o comando
kubectl apply -k .
Valide se o operator está rodando corretamente:
kubectl get pods -n awx
Saída esperada:
NAME READY STATUS RESTARTS AGE
awx-operator-controller-manager-d96c7bbb4-4pgn6 2/2 Running 0 81s
Defina o namespace padrão para facilitar os próximos comandos:
kubectl config set-context --current --namespace=awx
Criando o deployment do AWX
Agora vamos criar outro yml agora com o nome awx-demo.yml
vim awx-demo.yml
Conteúdo:
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx-demo
spec:
service_type: clusterip
ingress_type: Route
Agora edite novamente o kustomization.yaml e adicione o novo recurso:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- github.com/ansible/awx-operator/config/default?ref=2.9.0
- awx-demo.yml #NOVA LINHA
images:
- name: quay.io/ansible/awx-operator
newTag: 2.9.0
namespace: awx
Reaplique:
kubectl apply -k .
Monitorando o deploy
Depois de rodar o comando temos que esperar um tempo para os containers subirem você pode monitorar isso com o comando:
kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
Quando tudo estiver no ar esse comando retorna uma saida parecida com essa:
NAME READY STATUS RESTARTS AGE
awx-demo-postgres-13-0 1/1 Running 0 5m11s
awx-demo-task-d9c5df89d-nphg2 4/4 Running 0 4m30s
awx-demo-web-77f65f7cd4-nc4dz 3/3 Running 0 2m41s
Depois de ter carregado todos os container precisamos verificar qual a porta de acesso do AWX
kubectl get svc -l "app.kubernetes.io/managed-by=awx-operator"
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
awx-demo-postgres-13 ClusterIP None <none> 5432/TCP 6m27s
awx-demo-service NodePort 10.43.229.212 <none> 80:31990/TCP 5m48s
A primeira entrada da lista é referente ao banco de dados PostgreSQL. Já a segunda corresponde ao serviço web do AWX, que está exposto na porta 31990.
Para acessar a interface, basta abrir o navegador e digitar o endereço IP da sua máquina seguido da porta. No meu caso, o acesso ficou assim:
E qual é a senha?
Por padrão, o usuário de login é admin
. Para descobrir a senha gerada automaticamente durante a instalação, execute o seguinte comando:
kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo
A saída desse comando será a senha que você deve usar para fazer login na interface web do AWX.
Com o AWX instalado e funcionando, agora temos uma poderosa interface gráfica para gerenciar nossos playbooks do Ansible de forma muito mais prática e intuitiva. Isso facilita bastante o dia a dia, especialmente em ambientes onde automação e controle são essenciais.
Espero que este guia tenha te ajudado a entender e executar o processo com mais tranquilidade. Qualquer dúvida ou sugestão, fique à vontade para comentar ou entrar em contato!
Por hoje é isso, pessoal e obrigado por acompanhar até aqui e até a próxima! 🚀
Subscribe to my newsletter
Read articles from Hudson Alves Amaral directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
