⾃动化运维-Ansible运维⾃动化(配置管理⼯具)
当下有许多的运维⾃动化⼯具( 配置管理 ),例如:Ansible、SaltStack、Puppet、Fabric 等。
Ansible ⼀种集成 IT 系统的配置管理、应⽤部署、执⾏特定任务的开源平台,是 AnsibleWorks 公司名下的项⽬,该公司由 Cobbler 及Func 的作者于 2012 年创建成⽴。
Ansible 基于 Python 语⾔实现,由 Paramiko 和 PyYAML 两个关键模块构建。
Ansible 特点:
>> 部署简单,只需在主控端部署 Ansible 环境,被控端⽆需做任何操作。
>> 默认使⽤ SSH(Secure Shell)协议对设备进⾏管理。
>> 主从集中化管理。
>> 配置简单、功能强⼤、扩展性强。
>> ⽀持 API 及⾃定义模块,可通过 Python 轻松扩展。
>> 通过 Playbooks 来定制强⼤的配置、状态管理。
>> 对云计算平台、⼤数据都有很好的⽀持。
>> 提供⼀个功能强⼤、操作性强的 Web 管理界⾯和 REST API 接⼝ ---- AWX 平台。
Ansible 与 SaltStack
>> 最⼤的区别是 Ansible ⽆需在被监控主机部署任何客户端代理,默认通过 SSH 通道进⾏远程命令执⾏或下发配置。
>> 相同点是都具备功能强⼤、灵活的系统管理、状态配置,都使⽤ YAML 格式来描述配置,两者都提供丰富的模板及 API,对云计算平台、⼤数据都有很好的⽀持。
⼀、安装 Ansible
shell > yum -y install ansible
⼆、配置 Ansible
shell > ls /etc/ansible # ansible.cfg 是 Ansible ⼯具的配置⽂件;hosts ⽤来配置被管理的机器;roles 是⼀个⽬录,playbook 将使⽤它
ansible.cfg hosts roles
1、Ansible 管理机与被管理机做秘钥认证
shell > ssh-keygen # ⽣成秘钥
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
ea:11:72:ea:d2:d1:fa:1c:e0:df:4f:b0:98:31:be:fe root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| |
| o.= S |
| ..*.B o |
| .ooB . . |
| ..o+ = . |
| ..oB.E.. |
+-----------------+
shell > ssh-copy-id -i ~/.ssh/id_rsa.pub "-p 22 root@192.168.12.129" # 将公钥写⼊被管理机
The authenticity of host '192.168.12.129 (192.168.12.129)' can't be established.
RSA key fingerprint is f0:9e:01:73:a4:bf:14:10:ac:46:a9:48:cd:c5:d8:1c.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.12.129' (RSA) to the list of known hosts.
root@192.168.12.129's password:
Now try logging into the machine, with "ssh '-p 22 root@192.168.12.129'", and check in:ssh工具手机版
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
2、hosts ⽂件添加被管理机
shell > > /etc/ansible/hosts
shell > vim /etc/ansible/hosts
[Client]
192.168.12.129
三、测试 Ansible
shell > ansible Client -m ping # 操作 Client 组 ( all 为操作 hosts ⽂件中所有主机 ),-m 指定执⾏ ping 模块,下⾯是返回结果192.168.12.129 | SUCCESS => {
"changed": false,
"ping": "pong"
}
# -i 指定 hosts ⽂件位置
# -u username 指定 SSH 连接的⽤户名
# -k 指定远程⽤户密码
# -f 指定并发数
# -s 如需要 root 权限执⾏时使⽤ ( 连接⽤户不是 root 时 )
# -K -s 时,-K 输⼊ root 密码
四、附加
1、/etc/ansible/hosts ⽂件
## Ansible 定义主机、组规则的配置⽂件
shell > vim /etc/ansible/hosts
www.abc # 定义域名
192.168.1.100 # 定义 IP
192.168.1.150:37268 # 指定端⼝号
[WebServer] # 定义分组
192.168.1.10
192.168.1.20
192.168.1.30
[DBServer] # 定义多个分组
192.168.1.50
192.168.1.60
Monitor ansible_ssh_port=12378 ansible_ssh_host=192.168.1.200 # 定义别名
# ansible_ssh_host 连接⽬标主机的地址
# ansible_ssh_port 连接⽬标主机的端⼝,默认 22 时⽆需指定
# ansible_ssh_user 连接⽬标主机默认⽤户
# ansible_ssh_pass 连接⽬标主机默认⽤户密码
# ansible_ssh_connection ⽬标主机连接类型,可以是 local 、ssh 或 paramiko
# ansible_ssh_private_key_file 连接⽬标主机的 ssh 私钥
# ansible_*_interpreter 指定采⽤⾮ Python 的其他脚本语⾔,如 Ruby 、Perl 或其他类似 ansible_python_interpreter 解释器[webservers] # 主机名⽀持正则描述
www[01:50].example
[dbservers]
db-[a:f].example
2、Ansible 常⽤模块学习
shell > ansible-doc -l # 列出 Ansible ⽀持的模块
shell > ansible-doc ping # 查看该模块帮助信息
>> 远程命令模块( command / script / shell )
command 作为 Ansible 的默认模块,可以运⾏远程权限范围所有的 shell 命令,不⽀持管道符。
例:
shell > ansible Client -m command -a "free -m" # 查看 Client 分组主机内存使⽤情况
script 的功能是在远程主机执⾏主控端存储的 shell 脚本⽂件,相当于 scp + shell 组合。
例:
shell > ansible Client -m script -a "/home/test.sh 12 34" # 远程执⾏本地脚本
shell 的功能是执⾏远程主机上的 shell 脚本⽂件,⽀持管道符。
例:
shell > ansible Client -m shell -a "/home/test.sh" # 执⾏远程脚本
>> copy 模块(实现主控端向⽬标主机拷贝⽂件,类似于 scp 功能)
例:
shell > ansible Client -m copy -a "src=/home/test.sh desc=/tmp/ owner=root group=root mode=0755" # 向 Client 组中主机拷贝 test.sh 到 /tmp 下,属主、组为 root ,权限为 0755
>> stat 模块(获取远程⽂件状态信息,atime/ctime/mtime/md5/uid/gid 等信息)
例:
shell > ansible Client -m stat -a "path=/f"
>> get_url 模块(实现在远程主机下载指定 URL 到本地,⽀持 sha256sum ⽂件校验)
例:
shell > ansible Client -m get_url -a "url=www.baidu dest=/tmp/index.html mode=0440 force=yes"
>> yum 模块(软件包管理)
例:
shell > ansible Client -m yum -a "name=curl state=latest"
>> cron 模块(远程主机 crontab 配置)
例:
shell > ansible Client -m cron -a "name='check dirs' hour='5,2' job='ls -alh > /dev/null'"
效果:
#Ansible: check dirs
* 5,2 * * * ls -alh > /dev/null
>> mount 模块(远程主机分区挂载)
例:
shell > ansible Client -m mount -a "name=/mnt/data src=/dev/sd0 fstype=ext4 opts=ro state=present"
>> service 模块(远程主机系统服务管理)
例:
shell > ansible Client -m service -a "name=nginx state=stopped"
shell > ansible Client -m service -a "name=nginx state=restarted"
shell > ansible Client -m service -a "name=nginx state=reloaded"
>> user 服务模块(远程主机⽤户管理)
例:
shell > ansible Client -m user -a "name=wang comment='user wang'"
shell > ansible Client -m user -a "name=wang state=absent remove=yes" # 添加删除⽤户
五、Ansible-playbook
# 使⽤ Ansible-playbook 可以完成⼀组复杂的动作,例如部署环境、搭建服务、修改配置等。简单⽰例:
shell > vim /etc/l # 将远程主机IP地址写⼊⽂件中保存
---
- hosts: Client
remote_user: root
tasks:
- name: Save IP
shell: "ifconfig eth0 | awk -F '[ :]'+ '/inet addr/{print $4}' > ~/"
# hosts 指定执⾏操作主机
# remote_user 指定执⾏⽤户
# tasks 指明有哪些动作
# name 动作描述
# shell 模块,后⾯为具体指令
Playbook 实战:
⼀、⽬录结构
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论