Este guia detalha a implatnação e configuração do AWX, a interface gráfica de gerenciamento para o Ansible, em um cluster Kubernetes. O processo envolve a utilização do AWX Operator e a criação de recursos customizados para gerenciar a aplicação.
O que é AWX?
AWX é uma interface web que simplifica o gerenciamento de tarefas automatizadas pelo Ansible. Ele fornece uma plataforma visual para orquestrar playbooks, geranciar inventários, credenciais e logs de execução.
- Implantação do AWX Operator
1.1. Clonagem do Repositório
Comece clonando o repositório do AWX Operator e alterne para um branch estável.
[root@master01 ~]# git clone https://gitee.com/yftyxa/awx-operator.git
[root@master01 awx-operator]# git checkout exam
[root@master01 awx-operator]# cd config/default/
1.2. Geração de Manifestos YAML
Utilize o comando kubectl kustomize para gerar os manifestos YAML a partir da estrutura do Kustomization. É recomendado criar um diretório específico para os arquivos de implantação.
[root@master01 default]# mkdir deploy
[root@master01 default]# cd deploy/
[root@master01 deploy]# kubectl kustomize ../ > awx-operator.yml
1.3. Aplicação dos Manifestos
Aplique os manifestos gerados para implantar o AWX Operator no cluster. Pode ser necessário executar o comando duas vezes se ocorrer um erro inicial de reconhecimento de tipo.
[root@master01 deploy]# kubectl apply -f awx-operator.yml
# ... saída de criação de recursos ...
[root@master01 deploy]# kubectl apply -f awx-operator.yml
# ... saída de recursos configurados e AWX criado ...
Verifique a criação dos novos recursos customizados relacionados ao AWX:
[root@master01 deploy]# kubectl api-resources | grep -i awx
awxbackups awx.ansible.com/v1beta1 true AWXBackup
awxrestores awx.ansible.com/v1beta1 true AWXRestore
awxs awx.ansible.com/v1beta1 true AWX
1.4. Configuração de Armazenamento (NFS)
O AWX requer armazenamento persistente para seu banco de dados PostgreSQL. Certifique-se de que o NFS esteja configurado corretamente e que as permissões permitam que os pods do AWX acessem o compartilhamento NFS. O diretório NFS deve permitir acesso root do cliente.
# Exemplo de configuração /etc/exports no servidor NFS
/nfsdata *(rw,no_root_squash)
Configure a StorageClass para usar o provisionamento dinâmico do NFS. O seguinte manifesto cria uma instância do AWX, especificando as imagens e a StorageClass a ser utilizada.
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx-demo
namespace: awx
spec:
postgres_storage_class: "nfs-client" # Substitua 'nfs-client' pelo nome da sua StorageClass NFS
service_type: nodeport
postgres_image: swr.cn-east-3.myhuaweicloud.com/hcie_openeuler/postgres
postgres_image_version: "13"
redis_image: swr.cn-east-3.myhuaweicloud.com/hcie_openeuler/redis
redis_image_version: "7"
Aplique este manifesto para criar a instância do AWX:
kubectl apply -f awx-demo.yaml
Monitore a criação dos pods do AWX:
[root@master01 ~]# kubectl get pod -n awx
NAME READY STATUS RESTARTS AGE
awx-demo-postgres-13-0 1/1 Running 0 5m
awx-demo-task-xxxxx-xxxxx 4/4 Running 0 4m
awx-demo-web-xxxxx-xxxxx 3/3 Running 0 4m
awx-operator-controller-manager-xxxxx-xxxxx 2/2 Running 0 6m
Observe que um pod com ImagePullBackOff pode indicar problemas com as URLs das imagens especificadas. Certifique-se de que as imagens sejam acessíveis ou substitua-as por imagens válidas.
1.5. Acesso à Interface do AWX
O serviço do AWX é exposto via NodePort. Verifique a porta mapeada:
[root@master01 ~]# kubectl get svc -n awx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
awx-demo-service NodePort 10.107.76.241 <none> 80:30906/TCP 10m
# ... outros serviços ...
A interface do AWX estará acessível através do endereço IP de um nó do cluster na porta 30906 (ou a porta NodePort designada).
- Login no AWX
2.1. Credenciais de Login
O nome de usuário padrão é admin. A senha padrão pode ser obtida inspecionando o secret criado pelo AWX Operator.
[root@master01 ~]# kubectl get secret -n awx | grep admin
awx-demo-admin-password Opaque 1 15m
[root@master01 ~]# kubectl get secrets -n awx awx-demo-admin-password -o yaml
# Copie o valor de 'password:'
# Decodifique a senha usando base64
[root@master01 ~]# echo "<senha_codificada>" | base64 -d
<senha_decodificada>
Considerações de Recursos
A execução do AWX e seus componentes associados (PostgreSQL, Redis) consome recursos significativos. É recomendado alocar pelo menos 4GB de RAM para o nó master e 4GB para cada nó worker. A configuração adequada do NFS e do Ingress também é crucial para o bom funcionamento do AWX.
Gerenciametno de Credenciais
Ao adicionar hosts ao AWX, é necessário configurar credenciais. Isso pode ser feito de duas maneiras:
- Definindo variáveis de inventário como
ansible_usereansible_ssh_pass. - Criando "Máquinas de Credenciais" (Machine Credentials) no AWX, onde senhas ou chaves SSH privadas podem ser armazenadas de forma segura.
Integração com GitLab
O AWX pode ser integrado a repositórios GitLab para gerenciar playbooks. Crie um projeto no AWX que aponte para o seu repositório GitLab, permitindo a execução de playbooks diretamente do controle de versão.