linuxsoftware-ansible

Posted by syboot on 2020-06-19
Estimated Reading Time 8 Minutes
Words 2.1k In Total

linux ansible

在IT部门工作,您可能会一遍又一遍地执行相同的任务。如果您可以一次解决问题,然后自动化运行解决方案该多好。 有了Ansible-简单而强大的IT自动化引擎,成千上万的公司正在使用它来降低环境的复杂性并加快DevOps计划的实施。

ansible 特点

部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;
默认使用SSH协议对设备进行管理;
有大量常规运维操作模块,可实现日常绝大部分操作;
配置简单、功能强大、扩展性强;
支持API及自定义模块,可通过Python轻松扩展;
通过Playbooks来定制强大的配置、状态管理;
轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;
提供一个功能强大、操作性强的Web管理界面AWX平台。

AWX 下载页面

ansible 命令集

/usr/bin/ansible  Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
/usr/bin/ansible-doc   Ansible 模块功能查看工具
/usr/bin/ansible-galaxy  下载/上传优秀代码或Roles模块 的官网平台,基于网络的
/usr/bin/ansible-playbook  Ansible 定制自动化的任务集编排工具
/usr/bin/ansible-pull  Ansible远程执行命令的工具,拉取配置而非推送配置(使用较少,海量机器时使用,对运维的架构能力要求较高)
/usr/bin/ansible-vault  Ansible 文件加密工具
/usr/bin/ansible-console  Ansible基于Linux Consoble界面可与用户交互的命令执行工具

install ansible 管理机

通过Yum/dnf安装RPMs适用于Fedora发行版.

托管节点的操作系统版本可以是更早的版本, 但必须安装 Python 2.4 或更高版本的Python.

Fedora 用户可直接安装Ansible, 但RHEL或CentOS用户,需要 配置 EPEL 源

1
2
# install the epel-release RPM if needed on CentOS, RHEL, or Scientific Linux
$ sudo yum install ansible

你也可以自己创建RPM软件包.在Ansible项目的checkout的根目录下,或是在一个tarball中,使用 make rpm 命令创建RPM软件包. 然后可分发这个软件包或是使用它来安装Ansible.在创建之前,先确定你已安装了
rpm-build, make, and python2-devel 基础包.

1
2
3
4
$ git clone git://github.com/ansible/ansible.git
$ cd ./ansible
$ make rpm
$ sudo rpm -Uvh ~/rpmbuild/ansible-*.noarch.rpm

其他安装方法不阐述,自行研究。

ansible 前期配置

在我们开始前要先理解Ansible是如何通过SSH与远程服务器连接是很重要的.

主机要授权于管理机的ssh 登录,并且配置免密码登录主机。你的public SSH key必须在这些主机系统的authorized_keys中才可以免密码。

ansible 主配置文件所在目录/etc/ansible/,进入该目录下可看到有如下文件

[root@ansible ansible]# ll total 24 -rw-r–r–. 1 root root 19179 Jan 29 2018 ansible.cfg -rw-r–r–. 1 root root 1016
Jan 29 2018 hosts drwxr-xr-x. 2 root root 6 Jan 29 2018 roles

ansible.cfg: ansible 的主配置文件
hosts: 主机清单,即 intentory 清单
roles:ansible 角色

查看主配置文件(/etc/ansible/ansible.cfg)默认内容如下:

[defaults]
roles_path    = /etc/ansible/roles:/usr/share/ansible/roles
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]

Ansible的一些的设置可以通过配置文件完成.在大多数场景下默认的配置就能满足大多数用户的需求,在一些特殊场景下,用户还是需要自行修改这些配置文件

用户可以修改一下配置文件来修改设置,他们的被读取的顺序如下:

* ANSIBLE_CONFIG (一个环境变量)
* ansible.cfg (位于当前目录中)
* .ansible.cfg (位于家目录中)
* /etc/ansible/ansible.cfg

ansible 命令详解

命令的具体格式如下:

ansible [-f forks] [-m module_name] [-a args]

也可以通过ansible -h来查看帮助,下面我们列出一些比较常用的选项,并解释其含义:

-a MODULE_ARGS   #模块的参数,如果执行默认COMMAND的模块,即是命令参数,如: “date”,“pwd”等等
-k,--ask-pass	#ask for SSH password。登录密码,提示输入SSH密码而不是假设基于密钥的验证
--ask-su-pass	#ask for su password。su切换密码
-K,--ask-sudo-pass	#ask for sudo password。提示密码使用sudo,sudo表示提权操作
--ask-vault-pass	#ask for vault password。假设我们设定了加密的密码,则用该选项进行访问
-B SECONDS	#后台运行超时时间
-C	#模拟运行环境并进行预运行,可以进行查错测试
-c CONNECTION	#连接类型使用
-f FORKS	#并行任务数,默认为5
-i INVENTORY	#指定主机清单的路径,默认为/etc/ansible/hosts
--list-hosts	#查看有哪些主机组
-m MODULE_NAME	#执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m参数
-o	#压缩输出,尝试将所有结果在一行输出,一般针对收集工具使用
-S	#用 su 命令
-R SU_USER	#指定 su 的用户,默认为 root 用户
-s	#用 sudo 命令
-U SUDO_USER	#指定 sudo 到哪个用户,默认为 root 用户
-T TIMEOUT	#指定 ssh 默认超时时间,默认为10s,也可在配置文件中修改
-u REMOTE_USER	#远程用户,默认为 root 用户
-v	#查看详细信息,同时支持-vvv,-vvvv可查看更详细信息

ansible 常用模块

-m 后面跟的就是 模块名称

ansible web -m ping
ansible web -m command -a 'ps -ef'
ansible web -m shell -a 'cat /etc/passwd |grep "root"'
ansible web -m file -a 'path=/data/app state=directory'
ansible web -m fetch -a 'src=/data/hello dest=/data'  
ansible web -m cron -a 'name="ntp update every 5 min" minute=*/5 job="/sbin/ntpdate 172.17.0.1 &> /dev/null"
ansible web -m yum -a 'name=htop state=present'
ansible web -m service -a 'name=nginx state=started enabled=true' 
ansible web -m user -a 'name=keer uid=11111'
ansible web -m group -a 'name=sanguo gid=12222'
ansible web -m script -a '/tmp/df.sh'
ansible web -m setup -a 'filter="*mem*"'	#查看内存

主机和主机组配置

Ansible需呀一个配置主机的列表文件,编辑(或创建)/etc/ansible/hosts 并在其中加入一个或多个远程主机.

1
2
3
4
5
6
cat /etc/ansible/hosts
192.168.1.50
192.168.1.51
192.168.1.52
aserver.example.org
bserver.example.org
主机与组

/etc/ansible/hosts 文件的格式与windows的ini配置文件类似,组名用“[]”括起来下边的主机就是这个组内的主机。

1
2
3
4
5
6
7
8
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com

一组相似的 hostname , 可简写如下:

1
2
[webservers]
www[1:50].example.com
主机与组的变量

分配变量给主机,变量定义后可在 playbooks 中使用

1
2
3
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909

组的变量,定义属于整个组的变量

1
2
3
4
5
6
7
[atlanta]
host1
host2

[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com

临时命令简介

Introduction To Ad-Hoc Commands (临时命令简介)

所谓 ad-hoc 命令是什么呢? 如果我们敲入一些命令去比较快地完成一些事情,而不需要将这些执行的命令特别保存下来, 这样的命令就叫做 ad-hoc 命令.

举一个例子

这里我们要使用 Ansible 的命令行工具来重启 Atlanta 组中所有的 web 服务器,每次重启10个.

我们先设置 SSH-agent,将私钥纳入其管理:

$ ssh-agent bash $ ssh-add ~/.ssh/id_rsa

如果不想使用 ssh-agent, 想通过密码验证的方式使用 SSH,可以在执行ansible命令时使用 --ask-pass (-k)选项, 但这里建议使用 ssh-agent.

现在执行如下命令,这个命令中,atlanta是一个组,这个组里面有很多服务器,”/sbin/reboot”命令会在atlanta组下 的所有机器上执行. 这里ssh-agent会fork出10个子进程(bash)
,以并行的方式执行reboot命令.如前所说“每次重启10个” 即是以这种方式实现:

1
$ ansible atlanta -a "/sbin/reboot" -f 10

如果想通过 sudo 去执行命令,如下:

1
$ ansible atlanta -a "/usr/bin/foo" -u username --sudo [--ask-sudo-pass]

赞助广告

秋冬欧美蓝白撞色条纹弹力打底衫

查看购买上图商品 淘宝店铺 品牌官网

感谢 lxeridium品牌赞助. 品牌官网:http://www.lxeridium.com 

如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !