Diferencia entre revisiones de «Ansible»
| Línea 311: | Línea 311: | ||
* [https://www.youtube.com/watch?v=9L3iVo40ja4 Seminario Ferramentas DevOps para Sysadmin con Vagrant, Packer e Terraform]. Alberto García. | * [https://www.youtube.com/watch?v=9L3iVo40ja4 Seminario Ferramentas DevOps para Sysadmin con Vagrant, Packer e Terraform]. Alberto García. | ||
* [https://www.youtube.com/watch?v=u94MSkitqug Herramientas Devops: Docker y Vagrant] | * [https://www.youtube.com/watch?v=u94MSkitqug Herramientas Devops: Docker y Vagrant] | ||
| + | * [https://docs.ansible.com/ansible/latest/getting_started/index.html Documentation - Getting started with Ansible] | ||
Revisión del 21:08 15 ene 2024
Sumario
Introdución
Ansible é:
- unha plataforma de software libre para configurar e administrar ordenadores, permitindo a xestión da configuración e a orquestación de infraestruturas. Combina instalación multi-nodo (permite despregar configuracións de servidores e servicios por lotes), execucións de taefas ad hoc e administración de configuracións.
- un proxecto de código aberto implementado en Python e ten unha arquitectura con módulos que poden manexar prácticamente calquera sistema operativo, contorna de nube e ferramenta ou marco de administración do sistema.
Máis datos;
- Lanzamento inicial no 2012 (escrito orixialmente por Michael DeHaan, o creador da aplicación de aprovisionamento Cobbler) e posteriormente adquirido por Red Hat.
- Arquitectura agentless. Non require un axente nos servidores cliente polo que optimiza o rendemento e evita abrir portos especiais, con utilizar só a conexión por SSH. O traballo envíaase aos hosts cando se executa Ansible. Os módulos son os programas que realizan o traballo real das tarefas dun play.
- Sintaxe moi sinxela con baixa curva de aprendizaxe e sen requirir coñecementos de programación
- Con máils de 1000 módulos disponibles. Asi para activos diferentes podemos falar a mesma lingua do dispositivo administrado; e tamén poderemos desenvolver módulos en python.
- Con adoptación masiva por ser fácil de usar para os administradores de sistemas
- Compatible con ferramentas DevOps coma Vagrant e Jenkins.
O deseño de Ansible contempla:
- Mínimo por natureza
- Os sistemas de administración non deben impoñer dependencias adicionais.
- Consistente
- Seguro
- Ansible non instala axentes vulnerables nos nodos. Manexa as máquinas remotamente a través de SSH, que é o seu único requisito xunto con Python
- Alta confiabilidade
- O modelo de idempotencia é aplicado para as instalacións e configuracións, para previr efectos secundarios na execución repetitiva de guións (scripts)
- Suave curva de aprendizaxe
- Os playbooks ou libretos usan unha linguaxe descriptiva simple baseada en YAML.
Resumindo, Ansible é unha utilidade de orquestación e administración de configuración de código aberto que pode automatizar e estandarizar a configuración de hosts remotos e máquinas virtuáis. A súa funcionalidade de orquestación permite a Ansible coordinar o lanzamento e o apagado seguro de aplicacións de varios niveles.
Así no canto de escribir scripts personalizados e individualizados, os administradores do sistema crean un play ou unha xogada de alto nivel en Ansible. Ese play realiza unha serie de tarefas no host ou grupo de hosts especificados no play.
Un ficheiro que contén un ou máis plays chámase Playbook.
Qué non pode facer ansible?
- Non pode auditar os cambios realizados localmente por outros usuarios no sistema
- Pode agregar paquetes a unha instalación, pero NON realizar a instalación mínima inicial do sistema
- Pode modificar a configuración, pero NON a monitorea
- Non realiza un seguemento dos cambios realizados nos ficheiros do sistema, e de qué usuario ou proceso realizou os cambios
Arquitectura
Existen dous tipos de máquinas na arquitectura de Ansible:
- o nodo de control
- os hosts administrados
O software ansible está instalado no nodo de control e todos os seus compoñentes se manteñen nel.
Os hosts administrados enumeranse nun inventario de host ,un ficheirode texto no nodo de control que inclue unha lista de nomes de host administrados FQDN (fully qualified domain name) ou enderezos IP.
Ansible utiliza SSH coma protocolo de comuncación cos hosts administados. Os módul referenciados nos playbooks copianse nos hosts administrados. Despois se executan, en orde, cos argumentos especificados no playbook. Os usuarios de Ansible poden escribir os seus propios módulos personalizados se é preciso pero os módulo s principais que veñen con Ansible poden realizar a maioría das tarefas de administración do sistema.
Alternativas
| Puppet | Chef | Salt | Ansible | |
|---|---|---|---|---|
| Soporte | Puppet Labs | Opscode | SaltStack | Ansible Works |
| Control da interface | Manifest (DSL) | Recipes (DSL:Ruby) | SLS (SoLt Sate/YAML) | Playbook (YAML,JSON) |
| Axente | Master/Axente (Standalone) | Servidor/Cliente Chef-solo (Standalone) |
Master/Axente (minions) Standalone (masterless) |
Standalone (masterless) |
| Tecnoloxía core | Ruby | Ruby | Python | Python |
| Comunicación | http, ssh / SSL | STOMP, rest/SSL | ZeroMQ | SSH / JSON |
| Execución remota | Mcollective, complexa | Coitelo, complexa | Integrada por defecto, sinxela | Integrada por defecto, sinxela |
| Apoiado/usado por | Google, eBay, Twitter | Facebook, Ancestry, Splunk | Linkedin, HP Cloud | Rackspace, Evernote |
| Data de lanzamento | 2005 | 2009 | 2011 | 2012 |
Instalación
Python
Na máquina servidora e cliente require Python (no momento actual v2.6 ou superior):
usuario@servidorAnsible:~$ python3 -V Python 3.12.1
Dependencias
Para as dependencias:
apt install software-properties-common
Ansible
Para instalar Ansible:
root@servidorAnsible:~# apt install ansible
Comprobamos que queda instalado:
root@servidorAnsible:~# ansible --version ansible [core 2.14.3] config file = None configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3/dist-packages/ansible
Configuración
Non xerou ficheiro de configuración, e precisamos dous:
config file = None
- /etc/ansible/ansible.cfg
- Configuración de ansible
- /etc/ansible/hosts
- Inventario de equipos
- Especificamos os equipos que serán administrados por ansible
- Podemos especificalos empregando FQDN ou IP’s
- Para empregar FQDN precisamos ter un servidor DNS na nosa rede
- Permite agrupar os equipos en aulas ou departamentos
Configuración de Ansible - ansible.cfg
Creamos o arquivo de configuración a man na ruta por defecto:
root@servidorAnsible:~# mkdir /etc/ansible/ root@servidorAnsible:~# cd /etc/ansible/ root@servidorAnsible:/etc/ansible# vi ansible.cfg [defaults] inventory=/etc/ansible/hosts
Comprobamos como xa emprega o noso arquivo de configuración:
root@servidorAnsible:/etc/ansible# ansible --version ansible [core 2.14.3] config file = /etc/ansible/ansible.cfg configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
Configuración de Ansible - inventario
Crearemos os arquivos de configuración en /etc/ansible
- Temos que engadir os clientes en /etc/ansible/hosts. Este é un arquivo moi importante no que seDefine o inventario de equipos a xestionar mediante ansible
- Definimos dous grupos de clientes correspondentes a dúas aulas ficticias
- Poderemos xestionalos de xeito individual ou de xeito conxunto
- Se tivésemos un Servidor DNS poderíamos empregar nomes de equipos, de momento só IP’s
[aula1] 10.0.2.10 [aula2] 10.0.2.20
Para crear o arquivo de inventario (aínda que só temos dous equipos clientes, damos de alta outros dous ficticios):
root@servidorAnsible:/etc/ansible# vi hosts #Definimos os equipos da Aula1 [aula1] 10.0.2.10 Definimos os equipos da Aula2 [aula2] 10.0.2.20
Para comprobar que o inventario está correctamente configurado:
root@servidorAnsible:/etc/ansible# ansible all --list-hosts hosts (2): 10.0.2.10 10.0.2.20
Primeiras probas con ansible
Empregamos o módulo ping de ansible para comprobar a conexión cos nodos clientes (Importante: asegúrate que estén arrancados!!)
- Sintaxe: ansible Equipos -m módulo
- Se queremos saber se os equipos da Aula1 están acendidos
- ansible aula1 -m ping
Inicialmente, teremos erro: Ansible emprega ssh para conectarse co cliente, como é a primiera vez que se conecta con ese cliente pídenos confirmación
root@servidorAnsible:/etc/ansible# ansible aula1 -m ping
The authenticity of host '10.0.2.10 (10.0.2.10)' can't be established.
ED25519 key fingerprint is SHA256:/E+kj4vt6mKk2ud2cbKew2816I0ZwmM2I8RMhXefUQM.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
10.0.2.10 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Warning: Permanently added '10.0.2.10'
(ED25519) to the list of known hosts.\r\nroot@10.0.2.10: Permission denied
(publickey,password).",
"unreachable": true
}
Con -u indicamos usuario, pero falla novamente porque non sabe o contrasinal dese usuario para realizar a conexión por ssh:
root@servidorAnsible:/etc/ansible# ansible aula1 -m ping -u usuario 10.0.2.10 | UNREACHABLE! => {
"changed": false, "msg": "Failed to connect to the host via ssh: usuario@10.0.2.10: Permission denied
(publickey,password).",
"unreachable": true
}
Con -k contrasinal, pero falla unha vez máis porque é necesario ter instalado sshpass no servidor ansible
root@servidorAnsible:/etc/ansible# ansible aula1 -m ping -u usuario -k
SSH password:
10.0.2.10 | FAILED! => {
"msg": "to use the 'ssh' connection type with passwords or pkcs11_provider, you must
install the sshpass program"
Instalamos sshpass:
root@servidorAnsible:/etc/ansible# apt install sshpass
Ahora sí devolverá en cor verde (os erros estaban amosándose en vermello) indicando éxito. O equipo 10.0.2.10 respondeu o móudlo ping correctamente. A resposta é un JSON que pode conter moita información:
root@servidorAnsible:/etc/ansible# ansible aula1 -m ping -u usuario -k
SSH password:
10.0.2.10 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
De non estar acendido, a resposta sería:
root@servidorAnsible:/etc/ansible# ansible aula1 -m ping -u usuario -k
SSH password:
10.0.2.10 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
10.0.2.11 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 10.0.2.11 port
22: No route to host",
"unreachable": true
Con isto so fixemos un ping a un equipo mais se tivésemos dados de alta 100 equipos dentro da categoría aula1 con un só comando, veríamos cales responden e polo tanto saberíamos cales están acendidos
Ampliación
Referencias
- Z2301118 - Aprovisionamento automatizado con Ansible (Curso 23/24). José Luis Rojas Alonso baixo licenza CC BY-SA 4.0
- Seminario Ferramentas DevOps para Sysadmin con Vagrant, Packer e Terraform. Alberto García.
- Herramientas Devops: Docker y Vagrant
- Documentation - Getting started with Ansible