#官网 https://docs.ansible.com/
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
模块化:调用特定的模块,完成特定任务
有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
支持自定义模块
基于Python语言实现
部署简单,基于python和SSH(默认已安装),agentless
安全,基于OpenSSH
支持playbook编排任务
幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
无需代理不依赖PKI(无需ssl)
可使用任何编程语言写模块
YAML格式,编排任务,支持丰富的数据结构
较强大的多层解决方案
服务器名称 | 服务器ip |
---|---|
master | 192.168.1.20 |
node01 | 192.168.1.21 |
node02 | 192.168.1.22 |
方便后期配置服务
cat << EOF >> /etc/hosts
192.168.1.20 master
192.168.1.21 node01
192.168.1.22 node02
EOF
yum -y install ansible
ansible主配置常见说明
cat /etc/ansible/ansible.cfg
inventory = /etc/ansible/host #ansible主机管理清单
forks = 5 #并发数量
sudo_user = root #提权
remote_port = 22 #操作主机的端口
host_key_checking = False #第一次交互目标主机,需要输入yes/no,改成False不用输入
timeout = 10 #连接主机的超时时间
log_path = /var/log/ansible.log #设置日志路径
private_key_file = /root/.ssh/id_rsa #指定认证密钥的私钥
根据不同服务类型可以对主机清单进行分类,例如web/db等
验证ansible对主机的远程操作
ansible web -a "df -h" #查看web分组磁盘使用情况
官方文档
#https://docs.ansible.com/ansible/latest/index.html
mkdir /etc/ansible/group_vars/
cat /etc/ansible/group_vars/web.yml #文件命名和组名一致
http_port: 8090
server_name: www.baidu.com
打印变量
ansible web -a "echo {
{server_name}}"
ansible 常见的选项
-vvv 打印详细输出
ansible web -vvv -a 'cat /tmp/123'
-f 指定并发数
ansible web -vvv -a 'cat /tmp/123' -f 10
-i 指定别的位置的主机清单hosts
ansible web -a 'cat /tmp/123' -i /root/hosts
-m 指定模块
ansible web -m shell -a 'echo hello-zhangfan >> /tmp/123'
#生成密钥
ssh-keygen
将密钥发送到目标主机
ssh-copy-id [email protected]
ssh-copy-id [email protected]
cat /etc/ansible/hosts
ansible web -a “ls /tmp”
验证成功
`执行shell命令 (command和shell)
文件传输 (copy和file)
管理软件包 (yum )
用户和组(user)
从源代码管理系统部署(git)
管理服务(service)
手机目标主机信息(setup)`
#node01,node02执行
useradd zhangfan
echo 123456 |passwd --stdin zhangfan
#node02配置sudo权限
vim /etc/sudoers
#node01不配置sudo权限
master测试
ansible web -m shell -a 'ls /root' -u zhangfan -k --become --become-user root -K
ansible web
-m shell \ #指定模块
-a ‘ls /root’ \ #执行的命令
-u zhangfan -k \ 指定远程连接的用户并输入密码
–become --become-user root \ 提权的用户
-K #sudo提权用户输入的密码
发现提权的node02节点正常node01权限不足
ansible web -m copy -a "src=/root/nginx-1.12.tar dest=/tmp" -u root
ansible web -m file -a "dest=/opt/hello mode=600 state=directory" -u root
文件状态
absent #卸载/删除
directory #目录
file, #文件
hard #硬连接
link #软连接
touch #空文件
ansible web -m file -a "dest=/opt/hello state=absent"
创建一个文件
ansible web -m file -a "dest=/opt/hello mode=755 state=touch"
状态
absent #卸载
present #安装
ansible web -m yum -a 'name=memcached state=present'
ansible web -m yum -a 'name=memcached state=absent'
ansible web -m user -a "name=lisi password=123.com"
ansible web -m user -a "name=php password=123456 shell=/sbin/nologin" #指定shell创建
ansible web -m user -a "name=lisi state=absent"
需要提前创建一个空目录
ansible web -m git -a "repo=https://github.com/ansible/ansible.git dest=/mnt/ansible"
#启动nginx服务
ansible web -m service -a "name=nginx state=started"
ansible web -m service -a "name=nginx enabled=true"
#打印所有信息
ansible web -m setup
#获取系统版本
ansible web -m setup -a "filter=ansible_os_family*"
ansible web -m setup -a "filter=ansible_*_mb"