Implementación de Ansible y módulos comunes.

1. Descripción general de ansible

1. Introducción a ansible

Ansible es una herramienta de configuración y automatización gratuita y de código abierto desarrollada para sistemas tipo Unix.

Está escrito en Python y es similar a saltstack y Puppet, pero una diferencia y ventaja es que no necesitamos instalar ningún cliente en el nodo.

Utiliza SSH para comunicarse con los nodos. Ansible se desarrolla en base a Python paramiko, se distribuye, no requiere un cliente, es liviano y utiliza lenguajes de plantilla YMAL y Jinja2 para la sintaxis de configuración, lo que proporciona operaciones de ejecución remota de comandos más sólidas.

Ansible es una herramienta de implementación de aplicaciones y gestión de configuración desarrollada en base a Python, y ahora también brilla en el campo de la gestión automatizada. Combina las ventajas de muchas herramientas de operación y mantenimiento establecidas y Ansible básicamente puede implementar todas las funciones que Pubbet y Saltstack pueden lograr.

• Ansible puede configurar, implementar y administrar miles de hosts en lotes. Por ejemplo, en el pasado, era necesario cambiar a una o más operaciones realizadas en cada host. Con Ansible, solo necesitaba completar las operaciones de todos los hosts en un nodo de control fijo de Ansible.

• Ansible funciona basado en módulos. Sólo proporciona un marco de trabajo y no tiene la capacidad de completar tareas. Son los módulos de Ansible los que realmente realizan las operaciones.

Por ejemplo, el módulo de copia se usa para copiar archivos a un host remoto y el módulo de servicio se usa para administrar el inicio, parada, reinicio de servicios, etc.

2. Sitio web oficial

Ansible es una automatización de TI simple

3. Características del ansible

1. La implementación es simple, no hay cliente, solo necesita implementar el entorno Ansible en el extremo de control principal y el extremo controlado no necesita realizar ninguna operación;

2. Modularización: llame a módulos específicos para completar tareas específicas

3. El protocolo SSH se utiliza de forma predeterminada para administrar el dispositivo;

4. Gestión centralizada maestro-esclavo;

5. Configuración simple, funciones potentes y gran escalabilidad;

6. Admite API y módulos personalizados, que se pueden ampliar fácilmente a través de Python;

7. Personalice una potente configuración y gestión de estado a través de Playbooks

8. Tiene buen soporte para plataformas de computación en la nube y big data;

9. Idempotente: el resultado de ejecutar una operación una vez en un host y ejecutarla N veces es el mismo.

Ansible funciona en base a módulos y no tiene la capacidad de implementarse en lotes. Lo que realmente tiene implementación por lotes es el módulo ejecutado por ansible, y ansible solo proporciona un marco. incluyen principalmente:

(1) Complementos de conexión: responsables de comunicarse con el extremo monitoreado;

(2) Inventario de host: el host para la operación especificada es el host definido para monitoreo en un archivo de configuración;

(3) Varios módulos, módulos principales, módulos de comando y módulos personalizados;

(4) Utilice complementos para completar funciones como registrar correos electrónicos de registro;

(5), libro de jugadas: cuando el script realiza múltiples tareas, el nodo puede ejecutar múltiples tareas a la vez si no es necesario.

Una de las características más distintivas de Ansible es Agentless, es decir, no hay agente. Es como un comando ordinario. No es un software c/s. Solo necesita instalar Ansible una vez en un host como nodo de control. Por lo general, se utiliza una conexión SSH para controlar el host remoto y no es necesario instalar Ansible u otros servicios adicionales en el host remoto.

El principio de funcionamiento de ansible: cuando el usuario ingresa comandos o libros de jugadas en la terminal del servidor, el libro de jugadas se descompondrá en jugadas a través de reglas predeterminadas y luego se organizará en tareas que puedan ser reconocidas por ansible, llamando a módulos y complementos, y pasando ellos de acuerdo con la lista de hosts SSH envía archivos temporales al cliente remoto para su ejecución y devuelve los resultados, que se eliminan automáticamente después de la ejecución.

• Otra característica distintiva de Ansible es que la mayoría de sus módulos son idempotentes. La llamada idempotencia significa que múltiples operaciones o múltiples ejecuciones tienen un impacto constante en los recursos del sistema. Por ejemplo, si ejecuta el comando systemctl stop xxx para detener un servicio, cuando se descubre que el servicio de destino que se va a detener ya está en estado detenido, no hará nada, por lo que el resultado de múltiples paradas sigue siendo detener, lo cual no cambiará el resultado. Es idempotente. Y systemctl restart xxx no es idempotente.

• Muchos módulos de Ansible determinarán primero si el nodo de destino desea realizar la tarea durante la ejecución. Por lo tanto, puede dejar que Ansible realice la tarea con confianza. La ejecución repetida de una tarea no producirá ningún efecto secundario la mayor parte del tiempo.

4. El mecanismo de trabajo de ansible.

Ansible empuja el módulo Ansible al extremo administrado a través del protocolo SSH en el nodo de administración para su ejecución. Se elimina automáticamente después de la ejecución. Puede usar SVN, etc. para administrar módulos personalizados y orquestación.

5. Módulos componentes de Ansible

Ansible se compone de los siguientes módulos:

Ansible: el módulo central de ansible

Inventario de hosts: lista de hosts, es decir, la lista de hosts administrados

Playbooks: scripts ansibles, que pueden imaginarse como colocar múltiples tareas juntas y ejecutarlas juntas

Módulos principales: módulos principales de ansible

Módulos personalizados: módulos personalizados

Complementos de conexión: complemento de conexión, utilizado para establecer una relación de conexión con el host administrado basada en SSH

Complementos: otros complementos, incluido el registro, etc.

2. implementación ansible

Preparación ambiental

Lado de gestión: 192.168.2.66 ansible

Extremo administrado: 192.168.2.200 192.168.2.77

1. Instalación de Ansible

#Instale la fuente de la extensión epel en el lado de administración e instale ansible

yum -y install epel-release
yum -y install ansible

#Herramienta de consulta de árbol

yum -y install tree
 
tree /etc/ansible
 
//ansible 目录结构
/etc/ansible/
ansible.cfg
#ansible的配置文件,一般无需修改
hosts
#ansible的主机清单,用于存储需要管理的远程主机的相关信息
roles/
#公共角色目录

//Configurar la lista de hosts

cd /etc/ansible
vim hosts
[webservers]
#配置组名
192.168.2.200
#组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)
[dbservers]
192.168.2.77


  
//Configurar la verificación del par de claves

ssh-keygen -t rsa
#一路回车,使用免密登录
sshpass -p '123' ssh-copy-id [email protected]
sshpass -p '123' ssh-copy-id [email protected]
或者
 
ssh-copy-id  [email protected] 
ssh-copy-id  [email protected]

2. módulo de línea de comando ansible

Formato de comando: ansible <nombre de grupo> -m <módulo> -a <lista de parámetros>

ansible-doc -l #Lista todos los módulos instalados, presione q para salir

1. módulo de comando

//Ejecutar comandos en el host remoto. Las funciones de Shell como canalizaciones y redirección no son compatibles.

comando: el módulo predeterminado de ansible.Cuando no se especifica el parámetro -m, se utiliza el módulo de comando;

Se pueden usar comandos comunes, pero la ejecución de comandos no se ejecuta a través del shell, por lo que no se permiten operaciones como < > | y & z. No se admiten canalizaciones y los comandos no se pueden ejecutar en lotes.

ansible-doc -s command                          #-s 列出指定模块的描述信息和操作动作
 
ansible 192.168.2.200 -m command -a 'date' #指定 ip 执行 date
ansible webservers -m command -a 'date'         #指定组执行 date
ansible dbservers -m command -a 'date'
ansible all -m command -a 'date'            #all 代表所有 hosts 主机
ansible all -a 'ls /'                           #如省略 -m 模块,则默认运行 command 模块


  

//Parámetros de uso común:

chdir: ingrese el directorio con anticipación antes de ejecutar el comando en el host remoto

crea: determina si el archivo especificado existe, si existe, no realice operaciones posteriores.

elimina: determine si el archivo especificado existe, si existe, realice las siguientes operaciones.

ansible all -m command -a "chdir=/home ls ./"
ansible webservers -a "creates=/opt/aaa.txt cat /opt/aaa.txt"
ansible webservers -a "creates=/opt/123.txt cat /opt/aaa.txt"
ansible webservers -a "removes=/opt/aaa.txt cat /opt/aaa.txt"
ansible webservers -a "removes=/opt/123.txt cat /opt/aaa.txt"

2. módulo de shell

// Ejecutar un comando en el host remoto equivale a llamar al proceso de shell del host remoto y luego abrir un subshell debajo del shell para ejecutar el comando (admite funciones como símbolos de tubería)

ansible-doc -s shell   #查看shell模块的详细信息
 
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")

3. módulo cron

//Definir el plan de tareas en el host remoto. Hay dos estados: presente significa agregar (se puede omitir) y ausente significa eliminar.

ansible-doc -s cron #按 q 退出


 

//Parámetros de uso común:

minute/hour/day/month/weekday:分/时/日/月/周
job:任务计划要执行的命令
name:任务计划的名称
 
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'
ansible webservers -a 'crontab -l'
ansible webservers -m cron -a 'name="test crontab" state=absent'    #移除计划任务,假如该计划任务没有取名字,name=None即可


  

4. módulo de usuario

//Módulo de gestión de usuarios

ansible-doc -s user
 
//常用的参数:
name:用户名,必选参数
state=present|absent:创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no:是否为系统账号
uid:用户uid
group:用户基本组
shell:默认使用的shell
move_home=yes|no:如果设置的家目录已经存在,是否将已经存在的家目录进行移动
password:用户的密码,建议使用加密后的字符串
comment:用户的注释信息
remove=yes|no:当state=absent时,是否删除用户的家目录
 
ansible dbservers -m user -a 'name="test01"'    #创建用户test01
ansible dbservers -m command -a 'tail /etc/passwd'
ansible dbservers -m user -a 'name="test01" state=absent'   #删除用户test01


 

5. módulo de grupo

//Módulo para gestión de grupos de usuarios

ansible-doc -s group
 
ansible dbservers -m group -a 'name=mysql gid=3306 system=yes'  #创建mysql组
ansible dbservers -a 'tail /etc/group'
ansible dbservers -m user -a 'name=test uid=306 system=yes group=mysql' #将test01用户添加到mysql组中
ansible dbservers -a 'tail /etc/passwd'
ansible dbservers -a 'id test'


  

6. copiar módulo

//Se utiliza para copiar el archivo de host especificado al host remoto

ansible-doc -s copy  

// Parámetros de uso común:
dest: indica el destino y la ubicación del archivo copiado, use una ruta absoluta, si es el directorio de origen, el destino también debe ser un directorio, si el archivo de destino ya existe, el contenido original será src sobrescrito: indica la ruta del archivo fuente
, puede usar una ruta relativa o una ruta absoluta, y admite la especificación directa del directorio. Si el origen es un directorio, el destino también debe ser un directorio.
modo: indica los permisos de el archivo de destino al copiar.
propietario: indica el propietario del archivo de destino al copiar.
grupo: indica el archivo de destino al copiar. El
contenido del grupo del archivo: indica el contenido copiado al host de destino. No se puede utilizar con src.

ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'
 
ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt' #将helloworld写入/opt/hello.txt文件中
ansible dbservers -a 'cat /opt/hello.txt'


  

7. módulo de archivo

//Establecer atributos de archivo

ansible-doc -s file
 
ansible dbservers -m file -a 'owner=test1 group=mysql mode=644 path=/opt/test8.txt'    #修改文件的属主属组权限等
ansible dbservers -m file -a 'path=/etc/file8 src=/opt/file8.txt state=link'
 #设置/etc/file8为/opt/file8.txt的链接文件
ansible dbservers -m file -a "path=/opt/file8.txt state=touch"    #创建一个文件
ansible dbservers -m file -a "path=/opt/file8.txt state=absent"   #删除一个文件

8. módulo de nombre de host

//Se utiliza para administrar el nombre del host en el host remoto

ansible webservers -m hostname -a 'name=myhost'

9. módulo de ping

//Comprueba la conectividad del host remoto

ansible all -m ping

10. módulo yum

//Instalar y desinstalar paquetes de software en el host remoto

ansible-doc -s yum
 
ansible dbservers -m yum -a 'name=httpd'   #安装服务
ansible dbservers -m yum -a 'name=httpd state=absent'  #卸载服务

11. módulo de servicio/systemd

//Se utiliza para administrar el estado de ejecución del servicio de administración en el host remoto

ansible-doc -s service
 
//常用的参数:
name:被管理的服务名称
state=started|stopped|restarted:动作包含启动关闭或者重启
enabled=yes|no:表示是否设置该服务开机自启
runlevel:如果设定了enabled开机自启去,则要定义在哪些运行目标下自启动
 
ansible dbservers -a 'systemctl status httpd'  #查看web服务器httpd运行状态
ansible dbservers -m service -a 'enabled=true name=httpd state=started'    #启动httpd服务

 

12. módulo de secuencia de comandos

//Realizar la ejecución remota por lotes de scripts de shell locales

ansible-doc -s script
 
vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txt
 
chmod +x test.sh
ansible dbservers -m script -a 'test.sh'
ansible dbservers -a 'cat /opt/script.txt'

13. módulo de configuración

//El componente de hechos se utiliza para recopilar información del nodo administrado. Puede utilizar el módulo de configuración para obtener esta información.

ansible-doc -s setup
 
ansible webservers -m setup #获取mysql组主机的facts信息
ansible dbservers -m setup -a 'filter=*ipv4' #使用filter可以筛选指定的facts信息

3. lista de hosts de inventario

// El inventario admite la agrupación de hosts. Se pueden definir varios hosts en cada grupo y cada host se puede definir en uno o más grupos de hosts.

//Si hay hosts con nombres similares, puedes usar una lista para identificar cada host.

vim /etc/ansible/hosts
[webservers]
192.168.229.80:2222 #冒号后定义远程连接端口,默认是 ssh 的 22 端口
192.168.229.1[2:5]
 
[dbservers]
db-[a:f].example.org    #支持匹配 a~f  

//Variables en inventario

Nombre de la variable de inventario que significa
ansible_host Dirección IP de ansible cuando se conecta al nodo
ansible_port número de puerto para conectarse con la otra parte, el valor predeterminado es 22 cuando se conecta a través de ssh
ansible_user nombre de usuario usado cuando se conecta con el host de la otra parte. Si no se especifica, se utilizará el usuario que ejecuta el comando ansible o ansible-playbook.
ansible_password La contraseña ssh del usuario al conectarse, que solo es válida si no se utiliza la verificación del par de claves.
ansible_ssh_private_key_file Especifica el archivo de clave privada para la autenticación de claves. conexión ssh.
ansible_ssh_common_args proporciona parámetros adicionales para los comandos ssh, sftp y scp
ansible_become permite la escalada de privilegios
ansible_become_method especifica el método de elevación de privilegios, por ejemplo, se puede usar sudo/su/runas.
ansible_become_user se eleva a qué privilegios de usuario y el El valor predeterminado es root.
ansible_become_password se eleva a los privilegios del usuario especificado. Contraseña en ese momento

(1) variables del lenguaje principal

[webservers]
192.168.2.200 ansible_port=22 ansible_user=root ansible_password=123

(2) Variables de grupo

[webservers:vars]       #表示为 webservers 组内所有主机定义变量
ansible_user=root
ansible_password=123
[all:vars]              #表示为所有组内的所有主机定义变量
ansible_port=22

(3) Anidación grupal

[nginx]
192.168.80.20
192.168.80.21
192.168.80.22
 
[apache]
192.168.80.3[0:3]
 
[webs:children] #表示为 webs 主机组中包含了 nginx 组和 apache 组内的所有主机
nginx
apache

Supongo que te gusta

Origin blog.csdn.net/weixin_69148277/article/details/131309765
Recomendado
Clasificación