自动化运维
互联网技术的发展,机房里面机器的数量随之增加,运维的难度和复杂度也在增加,需要投入的运维人员和成本也在增加,从而催生了一系列的自动化运维工具(Ansible、SaltStack、Puppet)的产生来减少运维的成本。
Ansible、SaltStack、Puppet 都是目前比较受用户欢迎的自动化化运维工具,其中 Ansible 和 SaltStack 使用 Python 编写,具有良好的可移植性。Puppet 的使用脚本语法复杂,且可移植性比较差,目前的使用者慢慢变少。
Ansible 和 SaltStack 都是的目前最流行的自动化运维工具,能满足企业 IT 系统的自动化运维管理。
这两个工具都是用 Python 开发的,可以部署到不同的系统环境中和具有良好的二次开发特性。
- 在执行的命令的时候,Ansible 和 SaltStack 都支持 Ad-hoc 操作模式,也可以支持将命令写入 YAML 文件中再批量执行。
- 在处理返回结果方面,Ansible 和 SaltStack 的返回结果格式都是 JSON 格式,比较易懂和方便解析。
https://getansible.com/begin/an_zhuang_ansile安装
管理端
安裝 Ansible配置 Ansible 管理节点和主机的连接,就是配置从管理节点到远程主机之间基于 Key 的 SSH 连接(免密登录):1
2
3#Redhat/CentOS Linux 上,Ansible 目前放在的 epel 源中,Fedora 默认源包含 Ansible
sudo yum install epel-release
sudo yum install ansible -y运行 ssh 命令,既不需要输入密码,也不会提醒存储 key,就表示配置成功1
2
3
4
5
6#生成 ssh key
ssh-keygen
#拷贝 ssh key 到远程主机,ssh 的时候就不需要输入密码了
ssh-copy-id user@ip
#ssh 的时候不会提示是否保存 key
ssh-keyscan ip >> ~/.ssh/known_hosts1
ssh user@ip
被控端
不需要安装特殊的包,只需要 Python > 2.4,RedHat 系列 Linux 一般安装方式都是默认安装的。配置
主机
Host Inventory 是配置文件,用来告诉 Ansible 需要管理哪些主机,并且把这些主机进行分类
默认的文件是: /etc/ansible/hosts1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#最简单的 hosts 文件:
192.168.1.50
aserver.example.org
bserver.example.org
#带分类的 hosts 文件:
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com命令
Ansible 提供了一个命令行工具,在官方文档中起给命令行起了一个名字叫 Ad-Hoc Commands。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33ansible <host-pattern> [options]
#检查环境
#检查所有的远程主机,是否以 app 用户创建了 ansible 主机可以访问的环境
ansible all -m ping -u app
#执行命令
#在所有的远程主机上,以当前 bash 的同名用户,在远程主机执行“echo bash”
ansible all -a "/bin/echo hello"
#拷贝文件
#拷贝文件 /etc/host 到远程主机(组)web,位置为 /tmp/hosts
ansible web -m copy -a "src=/etc/hosts dest=/tmp/hosts"
#安装包
#远程主机(组)web 安装 yum 包 acme
ansible web -m yum -a "name=acme state=present"
#添加用户
ansible all -m user -a "name=foo password=<crypted password here>"
#下载 git 包
ansible web -m git -a "repo=git://foo.example.org/repo.git dest=/srv/myapp version=HEAD"
#启动服务
ansible web -m service -a "name=httpd state=started"
#并行执行
启动 10 个并行进行执行重起
ansible lb -a "/sbin/reboot" -f 10
#查看远程主机的全部系统信息
ansible all -m setup脚本
为了避免重复输入命令,Ansible 提供脚本功能;Ansible 脚本的名字叫 Playbook,使用的是 YAML 格式(与 JSON 类似,是一种表示数据的格式),文件后缀 .yml。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16ansible-playbook deploy.yml
---
#安装 apache 的 play
- hosts: Web
remote_user: root
tasks:
- name: nginx
yum: pkg=nginx state=latest
# 安装 mysql server 的 play
- hosts: db
remote_user: root
tasks:
- name: mysqld
yum: pkg=mariadb state=latest模块
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 君玉自牧!