🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
一、Ansible基础 1、ansible简介 2、Ansible优点 * Ansible柔和了众多其他运维工具的优先,比如pubbet和saltstack能实现的功能,Ansible的都能实现 * Ansible是一款轻量级,无需再客户端安装agent * Ansibe其实只是一个工具,Ansible不需要启动服务,仅仅是一个工具,可以轻松的实现分布式扩展 * 批量任何执行可以写成脚本,而且不用分发到远程就可以执行 * Ansible是一款高可靠性,轻量级的自动化工具 * Ansible使用python语言开发 3、Ansible特性: * no agents 不需要再被管控知己上安装任何客户端 * no server 无服务端 * modules in any languages 基于模块工作,可以使用任意语言开发 * yaml 使用yaml语言定制剧本playbook * ssh by default 基于ssh工作(默认) 4、Ansible的基本框架 ![](https://box.kancloud.cn/1269092a2e12f539b3835704484435c5_539x273.png) ![](https://box.kancloud.cn/537e6f3a89241e65f4b267a1a09ebbd1_717x475.png) 二、Ansible的安装 1)centos系统上安装 * 直接yum安装即可 安装之前先查看系统自带的ansible版本,看是否满足需求,如果满足需求,就没必要安装最新版本,直接执行yum -y install ansible即可 ~~~ [admin@node1 ~]$ sudo yum info ansible Loaded plugins: fastestmirror Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast Determining fastest mirrors * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.163.com Available Packages Name : ansible Arch : noarch Version : 2.4.1.0 Release : 1.el7 Size : 7.6 M Repo : extras/7/x86_64 Summary : SSH-based configuration management, deployment, and task execution system URL : http://ansible.com License : GPLv3+ Description : : Ansible is a radically simple model-driven configuration management, : multi-node deployment, and remote task execution system. Ansible works : over SSH and does not require any software or daemons to be installed : on remote nodes. Extension modules can be written in any language and : are transferred to managed machines automatically. [admin@node1 ~]$ sudo yum -y install ansible ~~~ 2、ubunt16.04系统上安装 ~~~ www@u-node1:~$ sudo apt-get update [sudo] password for www: www@u-node1:~$ sudo apt-get -y install software-properties-common www@u-node1:~$ sudo add-apt-repository ppa:ansible/ansible www@u-node1:~$ sudo add-apt update www@u-node1:~$ sudo add-apt -y install ansible ~~~ 三、配置基于密钥的认证 1、在centos7系统上操作 ~~~ * 在管理端,指定用户下,生成密钥对,然后把公钥发送到被管理端 [admin@node1 ~]$ ssh-keygen -t rsa 然后把公钥发到各客户端相应用户的家目录下 [admin@node1 ~]$ for i in 130 131 132 135;do ssh-copy-id -i ~/.ssh/id_rsa.pub admin@192.168.20.$i;done ~~~ 2、在ubuntu16.04-server系统上 ~~~ www@u-node1:~$ ssh-keygen -t rsa -P '' 发送公钥到对应客户端上 www@u-node1:~$ ssh-copy-id -i .ssh/id_rsa.pub www@192.168.20.157 www@u-node1:~$ ssh-copy-id -i .ssh/id_rsa.pub www@192.168.20.156 www@u-node1:~$ ssh-copy-id -i .ssh/id_rsa.pub www@192.168.20.155 测试: www@u-node1:~$ ssh www@192.168.20.157 'ifconfig' www@u-node1:~$ ssh www@192.168.20.157 'uptime' 21:21:20 up 9 min, 2 users, load average: 0.00, 0.06, 0.06 www@u-node1:~$ ssh www@192.168.20.156 'uptime' 21:21:24 up 9 min, 2 users, load average: 0.00, 0.07, 0.07 www@u-node1:~$ ssh www@192.168.20.155 'uptime' 21:21:27 up 28 min, 2 users, load average: 0.08, 0.06, 0.05 ~~~ 四、命令 1、简单定义主机清单(详细见第二章) * 在centos7上 ~~~ [admin@node2 ~]$ cd /etc/ansible/ [admin@node2 ansible]$ cp hosts{,.ori} [admin@node2 ansible]$> hosts [admin@node2 ansible]$ sudo vim hosts 先把原先的所有的先删掉,然后填写如下,案例 [admin@node2 ansible]$ sudo vim hosts [websrvs] 192.168.20.153 192.168.20.154 [nosqlsrvs] 192.168.20.152 [dbsrvs] 192.168.20.139 192.168.20.154 ~~~ * 在ubuntu16.04server上操作 ~~~ www@u-node1:~$ cd /etc/ansible/ www@u-node1:/etc/ansible$ sudo cp hosts{,.ori} [sudo] password for www: www@u-node1:/etc/ansible$ sudo vim hosts [websrvs] 192.168.20.155 192.168.20.156 [dbsrvs] 192.168.20.156 192.168.20.157 ~~~ 2、ansible命令 查看帮助 ansible -h 常用选项如下 ~~~ -m module 选择执行的模块 -a args 相应模块的参数 -f FORKS 指定并行进程数 默认为5 -e EXTRA_VARS 设置额外的变量 -b, --become run operations with become -K, --ask-become-pass ask for privilege escalation password ~~~ 案例:批量执行命令,查看各管理端的硬盘使用情况 ~~~ [admin@node1 ~]$ ansible 192.168.20.131 -m command -a 'df -h' 192.168.20.131 | SUCCESS | rc=0 >> Filesystem Size Used Avail Use% Mounted on /dev/mapper/cl-root 13G 1.5G 12G 12% / devtmpfs 486M 0 486M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 6.6M 490M 2% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup /dev/vda1 1014M 121M 894M 12% /boot tmpfs 100M 0 100M 0% /run/user/0 tmpfs 100M 0 100M 0% /run/user/1010 ~~~ [admin@node1 ansible]$ ansible webserver -a "wget -O /tmp/EasyRSA-2.2.2.tgz http://soft.51yuki.cn/EasyRSA-2.2.2.tgz"