运维企业实战——ansible的搭建以及一些常用命令

一、什么是ansible

ansible是一种自动化运维工具,基于python开发。实现了批量系统配置、批量程序部署、批量运行能力等功能。
ansible是基于模块工作的,本身没有批量部署的的能力。真正具有批量部署的是ansible所运行的模块。ansible只是一个框架。

ansible和saltstack最大的区别就是ansible不需要在被控主机上部署任何客户端代理,默认可以通过SSH通道进行远程的通信以及下发命令。

其中ansible的playbook可以集配置、部署、自动化为一身。

二、配置ansible

实验环境(rhel7.3):
server1: 控制节点
server2: 客户端
server3: 客户端
server4: 客户端
1、下载ansible的rpm包以及依赖

[root@server1 ~]# cd ansible/
[root@server1 ansible]# ls
ansible-2.7.8-1.el7.noarch.rpm
libtomcrypt-1.17-25.el7.x86_64.rpm
libtommath-0.42.0-5.el7.x86_64.rpm
python2-crypto-2.6.1-13.el7.x86_64.rpm
python2-jmespath-0.9.0-1.el7.noarch.rpm
python-httplib2-0.9.2-0.1.el7.noarch.rpm
python-keyczar-0.71c-2.el7.noarch.rpm
python-paramiko-2.1.1-0.9.el7.noarch.rpm
sshpass-1.06-1.el7.x86_64.rpm
[root@server1 ansible]# yum install -y *

在这里插入图片描述
2、给server1~4都添加一个普通用户devops,密码设为westos。

[root@server1 ansible]# useradd devops
[root@server1 ansible]# passwd devops

3、查看主配置目录

[root@server1 ansible]# ansible --version
ansible 2.7.8
  config file = /etc/ansible/ansible.cfg   ##主配置文件位置
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  2 2016, 04:20:16) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]


[root@server1 ansible]# cd /etc/ansible/
[root@server1 ansible]# ls
ansible.cfg  hosts  roles

ansible.cfg 主配置文件
hosts 设置要操控哪些主机
roles 角色,要布置的服务

4、为了防止各个用户之间相互影响,我们进入刚刚创建的那个用户。

[root@server1 ansible]# su - devops
[devops@server1 ~]$ mkdir ansible
[devops@server1 ansible]$ ls

5、编辑主配置文件ansible.cfg

devops@server1 ansible]$ vim ansible.cfg
[devops@server1 ansible]$ cat ansible.cfg 
[defaults]
inventory = inventory

6、配置分组

[devops@server1 ansible]$ vim inventory 
[devops@server1 ansible]$ cat inventory 
[dev]
server2

[test]
server3

[prod]
server4

[webservers:children]
dev
test
prod

查看各组信息

[devops@server1 ansible]$ ansible dev --list-host
  hosts (2):
    server2
[devops@server1 ansible]$ ansible prod --list-host
  hosts (1):
    server4
[devops@server1 ansible]$ ansible test --list-host
  hosts (2):
    server3
[devops@server1 ansible]$ ansible webservers --list-host
  hosts (3):
    server3
    server4
    server2
[devops@server1 ansible]$ ansible all --list-host
  hosts (3):
    server3
    server4
    server2

配置免密

[devops@server1 ansible]$ vim ansible.cfg 
[defaults]
inventory=inventory
host_key_checking=False



[devops@server1 ansible]$ ssh-keygen
[devops@server1 ansible]$ ssh-copy-id server2
[devops@server1 ansible]$ ssh-copy-id server3
[devops@server1 ansible]$ ssh-copy-id server4

[devops@server1 ansible]$ ansible all -m ping -k
SSH password: 
server4 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

这样ansible的安装配置就做好了。可以进行一些信息的查看(要在ansible目录下执行)。

[devops@server1 ansible]$ ansible dev -m command -a 'df -h'

在这里插入图片描述

ansible all -a "hostname"

在这里插入图片描述

ansible的一些常用命令

常用参数:

-m:要执行的模块,默认为command
-a:指定模块的参数
-u:ssh连接的用户名,默认用root,ansible.cfg中可以配置
-b,--become:变成那个用户身份,不提示密码
-k:提示输入ssh登录密码,当使用密码验证的时候用
-s:sudo运行
-U:sudo到哪个用户,默认为root
-K:提示输入sudo密码,当不是NOPASSWD模式时使用
-C:只是测试一下会改变什么内容,不会真正去执行
-c:连接类型(default=smart)
-f:fork多少进程并发处理,默认为5个
-i:指定hosts文件路径,默认default=/etc/ansible/hosts
-I:指定pattern,对已匹配的主机中再过滤一次
-list-host:只打印有哪些主机会执行这个命令,不会实际执行
-M:要执行的模块路径,默认为/usr/share/ansible
-o:压缩输出,摘要输出
--private-key:私钥路径
-T:ssh连接超时时间,默认是10秒
-t:日志输出到该目录,日志文件名以主机命名
-v:显示详细日志

常用命令:

	ansible server1 -m setup   #产看指定主机server1上的facts变量信息
	ansible * -m setup   		#查看指定的所有主机上的facts变量信息

    ansible-doc -l:列出有哪些可用的模块,按q退出
    ansible-doc -l | wc -l:列出有多少个可用的模块
    ansible-doc -l | grep user:列出与user有关的模块
    ansible-doc user:查看user模块的帮助文档,按q退出。也可以在最后一行输入/passwd,来过滤与passwd有关的内容
    ansible test -a 'df -h'  在test组执行df -h命令

猜你喜欢

转载自blog.csdn.net/weixin_44321029/article/details/92820849