Implementação do AWX no Kubernetes

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.

  1. 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).

  1. 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_user e ansible_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.

Tags: kubernetes awx Ansible operator devops

Publicado em 7-20 17:58