- Ansible是什么?概念剖析?
Ansible是一款基于Python语言开发的自动化运维配置管理工具,主要是用于管理Unix/Linux操作系统配置、代码、变革操作,去中心化管理,客户端无需部署Agent插件即可管理;
- Ansible的工作原理?
Ansible分为控制端和被控端,主要是基于SSH协议去管理客户端,被控端是无需安装Agent插件的,Ansible会读取控制端hosts文件,根据文件中定义IP列表信息,调取本地的各个模块对被控端机器实现批量、并发的配置管理和维护,如果任务比较复杂可以写成PlayBook剧本进行分发管理;
- Ansible自动化运维常见模块;
- Command,默认模块,主要是用于远程命令执行;
- COPY,文件拷贝模块,主要用于文件或者目录的远程拷贝;
- SHELL,命令模块,主要是用于远程执行SHELL(BASH)指令;
- YUM,软件管理模块,主要是用于远程部署、安装、卸载软件;
#yum -y install ansible
#cd /etc/ansible
#vim hosts
添加:
[www]
192.168.0.125
[docker]
192.168.0.110
[manager] (添加的是自己本主机的ip)
192.168.0.100
保存退出
#cd
#ssh-keygen
#ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.0.125 (远程连接192.168.0.125并开启远程免密公钥)
#ansible 192.168.0.125 -m command -a "df -h" (-m:连接模块, -a:连接命令)
#ansible www -m command -a "df -h" (www:表示组里面的所ip)
#ansible www -m copy -a "src=/root/httpd-2.4.32 dest=/tmp/ mode=755" (src:源目标地址,dest:目标目录 mode:添加权限)
#ansible www -m copy -a "src=/root/httpd-2.4.32 dest=/tmp/ mode=755 backup=yes" (src:源目标地址,dest:目标目录 mode:添加权限,backup=yes:表示复杂并备份)
#ansible docker -m shell -a "systemctl start httpd;ps -ef|grep httpd"
基于Ansible批量修改Docker云主机的密码,操作指令如下:
ansible docker -m shell -a "echo 1|passwd --stdin root"
- 基于Ansible批量修改客户端的密码(执行脚本方式,脚本提前拷贝到客户端),并且将密码信息打印至屏幕终端;
#脚本代码如下:
cat change_password.sh
#!/bin/bash
echo $$!@QAZ$1|passwd --stdin root
echo "`hostname -I` root $$!@QAZ$1"
#执行的命令如下:
ansible 192.168.0.2 -m shell -a "/bin/bash /tmp/change_password.sh 321"
基于synchronize模块,将源目录同步至目标目录(增量同步):
ansible 192.168.0.2 -m synchronize -a 'src=/tmp/ dest=/tmp/'
基于synchronize模块,将源目录同步至目标目录(完全同步):
ansible 192.168.0.2 -m synchronize -a 'src=/tmp/ dest=/tmp/ delete=yes'
- Ansible Playbook剧本概念&实战演练
- Ansible可以使用单个模块,通过AD-HOC点对点模式去远程机器配置和管理,也可以将多个模块进行组合,形成剧本(playbook)任务;
- 通过Playbook任务,能够集中管理多个任务,将多个任务关联起来,从而实现更加复杂工作,满足生产环境的各个需求,提高运维人员管理服务器效率;
- Playbook剧本的产物YAML文件,类似XML接口(Tomcat)文件,内部有固定语法、参数等,要掌握常用的YAML语法编写,掌握满足运维管理方向的语法即可;
- Ansible-Playbook剧本案例一:(远程拷贝SHELL脚本,并且执行SHELL脚本)
- vim nginx.yaml
- hosts: all remote_user: root tasks: - name: copy nginx SHELL to Remote Server copy: src=/root/auto_install_nginx_v1.sh dest=/tmp/ mode=645 owner=root group=root - name: check Nginx SHELL File /tmp/ shell: ls -l /tmp/auto_install_nginx_v1.sh - name: Jfedu Nginx WEB Server Install Process. shell: /bin/sh /tmp/auto_install_nginx_v1.sh |
- Ansible-Playbook剧本案例二:(远程源码部署Nginx WEB软件)
- hosts: all remote_user: root tasks: - name: Jfedu Pcre-devel and Zlib LIB Install. yum: name=pcre-devel,pcre,zlib-devel state=installed - name: Jfedu Nginx WEB Server Install Process. shell: pkill nginx;cd /tmp;rm -rf nginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz ;tar xzf nginx-1.12.0.tar.gz;cd nginx-1.12.0;./configure --prefix=/usr/local/nginx;make;make install;/usr/lo cal/nginx/sbin/nginx |
- Ansible-Playbook剧本案例三:(判断notify前面的任务是否执行成功或者是否存在,继而执行handlers之后的任务)
- hosts: 192.168.0.123 remote_user: root tasks: - name: Nginx server Install 2017 copy: src=/etc/profile dest=/etc/ notify: - nginx1 - nginx2 handlers: - name: nginx1 shell: cd /tmp;rm -rf nginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz;tar xzf nginx-1.12.0.tar.gz;cd nginx-1.12.0;./configure --prefix=/usr/local/nginx;make;make install - name: nginx2 shell: /usr/local/nginx/sbin/nginx |
- Ansible-Playbook剧本案例四:(支持template模板&变量定义和引用实战)
- hosts: 192.168.0.12* remote_user: root tasks: - name: Nginx server Install 2017 file: path=/usr/local/nginx/ state=directory notify: - nginx install - nginx config handlers: - name: nginx install shell: cd /tmp;rm -rf nginx-1.12.0.tar.gz;wget http://nginx.org/download/nginx-1.12.0.tar.gz;tar xzf nginx-1.12.0.tar.gz;cd nginx-1.12.0;./configure --prefix=/usr/local/nginx;make;make install;/usr/local/ngin x/sbin/nginx - name: nginx config template: src=/root/nginx.conf.j2 dest=/usr/local/nginx/conf/nginx.conf |
- Ansible配置文件概念剖析&性能优化
Ansible主配置文件:/etc/ansible/ansible.cfg,主要是用于Ansible程序参数、配置、模板统一调整,全局的配置文件;