Ansible安装与配置

Ansible简介

ansible基于Python开发,,集合了众多运维工具的优点,实现了批量运行命令,部署程序,配置系统等功能。默认通过SSH协议进行远程命令执行或下发配置,无需部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。

Ansible核心组件

ansible可以看做是一种基于模块进行工作的框架结构,批量部署能力就是有ansible所运行的模块实现的。简而言之ansible是基于“模块”完成各种“任务”的。

结构图如下所示

ansible组件由如下六部分组成

Ansible core 核心引擎

Host inventory 主机清单:用来定义Ansible所管理的主机,默认是在Ansible的hosts配置文件中定义被管理的主机,同时也支持自定义动态主机清单和指定其他配置文件的位置

Connection plugins 连接插件:负责和被管理主机实现通信。除支持使用SSH连接被管理主机外,ansible还支持其它的连接方式,所以需要有连接插件将各个主机用连接插件连接到ansible

Playbooks(yam1,jinja2)剧本:用来集中定义ansible的任务配置文件,即将多个任务定义在一个剧本中由ansible自动执行,可以由控制主机针对多台被管理主机同时运行多个任务

Core modules 核心模块:是ansible自带的模块,使用这些模块将资源分发到被管理主机,使其执行特定任务或匹配特定状态

Custom modules 自定义模块:用于完成模块功能的补充,可借助相关插件完成记录日志,发送邮件等功能

安装部署ansible服务

ansible自动化运维环境由控制主机与被管理主机组成,由于ansible是基于SSH协议进行通信的,所以控制主机安装ansible软件后不需要重启或运行任何程序,被管理主机也不需要安装或运行任何代理程序。

Ansible安装及基本配置

ansiblle具有如下特点:

1、部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作;

2、默认使用SSH协议对设备进行管理;

3、主从集中化管理;

4、配置简单、功能强大、扩展性强;

5、支持API及自定义模块,可通过Python轻松扩展;

6、通过Playbooks来定制强大的配置、状态管理

7、对云计算平台、大数据都有很好的支持;redis配置文件:这样写可以获取到客户机的ipv4地址,bind {{ ansible_default_ipv4.address }}

1 安装ansible

Ansible仓库默认不在yum仓库中,因此需要使用下面的命令启用epel仓库。

yum install epel-release -y

yum install ansible -y

2.安装成功ansible –version

3.ansible命令参数

      anisble命令语法: ansible [-i 主机文件] [-f 批次] [组名] [-m 模块名称] [-a 模块参数]

        ansible详细参数:

         -v,–verbose   #  详细模式,如果命令执行成功,输出详细的结果 (-vv –vvv -vvvv)

         -i PATH, -inventory=PATH      #  指定 host 文件的路径,默认是在 /etc/ansible/hosts

inventory  [ˈɪnvəntri]  库存

         -f NUM,-forks=NUM     # NUM 是指定一个整数,默认是 5 ,指定 fork 开启同步进程的个数。

         -m NAME,-module-name=NAME    #   指定使用的 module 名称,默认使用 command模块

        -a,MODULE_ARGS   #指定 module 模块的参数

         -k,-ask-pass           #提示输入 ssh 的密码,而不是使用基于 ssh 的密钥认证

         -sudo          # 指定使用 sudo 获得 root 权限

         -K,-ask-sudo-pass             #提示输入 sudo 密码,与 -sudo 一起使用

         -u USERNAME,-user=USERNAME          # 指定移动端的执行用户

         -C,–check             #测试此命令执行会改变什么内容,不会真正的去执行

4. 生成密钥

    ssh-keygen默认就行

    使用ssh-copy-id命令来复制Ansible公钥到节点 

    ssh-copy-id  root@节点ip

5.定义主机清单 /etc/ansible/hosts  默认是在 /etc/ansible/hosts

  (1)基于端口,用户,密码定义主机清单

  ansible基于ssh连接-i (inventory)参数后指定的远程主机时,也可以写端口,用户,密码。

  格式:ansible_ssh_port:指定ssh端口 ansible_ssh_user:指定 ssh 用户 ansible_ssh_pass:指定 ssh 用户登录是认证密码(明文密码不安<br>全)             

  ansible_sudo_pass:指明 sudo 时候的密码

 vim  /etc/ansible/hosts   #文件 /etc/ansible/hosts 维护着Ansible中服务器的清单。在文件最后追加以下内容

[web-servers]

ansible服务器ip  ansible_ssh_port=22  ansible_ssh_user=root  ansible_ssh_pass=123456

[web-server]

节点ip

实例:

ansible主要相关配置文件在/etc/ansible目录下

cd /etc/ansible/

总用量 24

-rw-r--r--. 1 root root 20269 10月  9 09:34 ansible.cfg  #配置文件

-rw-r--r--. 1 root root  1016 10月  9 09:34 hosts    #管控主机文件

drwxr-xr-x. 2 root root    6 10月  9 09:34 roles

5.1 ansible.cfg配置文件详解

Ansible.cfg是ansible自动化任务所用的一个核心配置文件,大部分的配置文件都集中在defualts配置项目中。

defaults下的配置项,下面列出常用的配置参数

1)inventory

该参数表示资源清单inventory文件的位置,资源清单就是一些Ansible需要连接管理的主机列表 inventory = /root/ansible/hosts 

2)library 

Ansible的操作动作,无论是本地或远程,都使用一小段代码来执行,这小段代码称为模块,这个library参数就是指向存放Ansible模块的目录 library = /usr/share/ansible

 3)forks 

设置默认情况下Ansible最多能有多少个进程同时工作,默认设置最多5个进程并行处理。具体需要设置多少个,可以根据控制主机的性能和被管理节点的数量来确定。 forks = 5

 4)sudo_user

 这是设置默认执行命令的用户,也可以在playbook中重新设置这个参数 sudo_user = root //注意:新版本已经作了修改,如ansible2.4.1下已经为: default_sudo_user = root 

5)remote_port 

这是指定连接被关节点的管理端口,默认是22,除非设置了特殊的SSH端口,不然这个参数一般是不需要修改的 remote_port = 22

 6)host_key_checking 

这是设置是否检查SSH主机的密钥。可以设置为True或False host_key_checking = False 

7)timeout

 这是设置SSH连接的超时间隔,单位是秒。 timeout = 20 

8)log_path

 Ansible系统默认是不记录日志的,如果想把Ansible系统的输出记录到人i治稳健中,需要设置log_path来指定一个存储Ansible日志的文件 log_path = /var/log/ansible.log 另外需要注意,执行Ansible的用户需要有写入日志的权限,模块将会调用被管节点的syslog来记录,口令是不会出现的日志中的

 9)private_key_file

 在使用ssh公钥私钥登录系统时候,使用的密钥路径。 private_key_file=/path/to/file.pem

5.2 配置主机清单

ansible通过读取默认主机清单/etc/ansible/hosts文件,修改主机与组配置后,可同时连接到多个被管理主机上执行任务。具体配置如下:

vim hosts

[web]                                  #被管理主机分类

192.168.199.130

[mysql]                                #被管理主机分类

192.168.199.131

5.3设置SSH无密码登录

为了避免ansible下发指令时输入被管理主机的密码,可以通过证书签名达到SSH无密码登录的效果,使用ssh-keygen产生一对密匙,使用ssh-copy-id来下发生成的公匙

关闭三台服务器的防火墙

systemctl stop firewalld.service

setenforce 0

配置秘钥验证

ssh-keygen -t rsa

ssh-copy-id root@192.168.199.130

ssh-copy-id root@192.168.199.131

至此配置部署完成

5.4 常用命令

(1)主机连通性测试:ansible all -m ping

(2)command:在远程主机执行命令;不支持|管道命令

执行指令   ansible all -m command -a 'ls'

(3)shell操作:shell模块在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道等 :

ansible all -m shell -a 'cat /etc/profile |grep "java"'

6.测试主机连通性

 ansible -i /etc/ansible/hosts web-servers -m ping 

  -i #指定 host 文件的路径,默认是在 /etc/ansible/hosts

  -m #指定使用的ping模块

报错:192.168.1.63 | FAILED! => {

    "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."

}

ssh root@192.168.1.63 #手动连接一下/etc/ansible/hosts主机清单中的主机,这样就可以在ansible服务器上保存目标主机的fingerprint指纹。再连接试试,如果不行,修改配置文件ansible.cfg,将host_key_checking = False打开就OK了。

6.1 获取节点服务器运行时间

 ansible -m command -a "uptime" web-servers

 ansible -i hosts web-servers -m command -a "uptime"

6.2  给节点增加用户

 ansible -i hosts web-servers -m command -a "useradd xiaoming"

6.3  scripts模块

  使用scripts模块可以在本地写一个脚本,在远程服务器上执行

  copy模块:实现主控端向目标主机拷贝文件,类似scp功能

ansible -i /etc/ansible/hosts web-servers -m copy -a "src=/ai.sh dest=/tmp owner=liutao group=liutao mode=755"相当于scp文件,可以定义拥有者,组以及权限。

6.4获取远程文件信息

 stat模块

 ansible -i hosts web-servers -m stat -a "path=/tmp/ai.sh"

6.5 get_url模块实现远程主机下载指定url到本地

 ansible -i /etc/ansible/hosts web-servers -m get_url -a "url=https://dl.fedoraproject.org/pub/epel/epel-release-latest-noarch.rpm  dest=/tmp/ mode=0440 force=yes"

注:url=https://xxx  的等号=前后不能有空格 

 如果force=yes,当下载文件时,如果所下的内容和原目录下的文件内容不一样,则替换原文件,如果一样,就不下载了。

 如果为“否”,则仅在目标不存在时才下载文件。 一般来说,只有小型本地文件才应该为“是”。 在0.6之前,该模块表现为默认为“是”

6.6yum模块linux平台软件包管理。

  yum模块可以提供的status状态: latest ,present,installed  #这3个代表安装;removed, absent #后面2个是卸载

 安装http,mysql软件

ansible -i /etc/ansible/hosts web-servers -m yum -a "name=httpd  state=latest"

6.7 cron模块:执行定时任务

ansible -i /etc/ansible/hosts web-servers -m cron -a "name='mkdir' minute=5 hour=02 day=15 month=8 weekday=3 job='mkdir /tmp/a.txt'"

minute hour day month weekday   分  时  日   月  周

6.8 service模块 远程主机系统服务管理

 name参数:此参数用于指定需要操作的服务名称,比如 nginx,httpd。

 state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的httpd,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted(重启)、reloaded。

enabled参数:此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为开机启动,设置为 no 表示不会开机启动。

 注:想使用service模块启动服务,被启动的服务,必须可以使用service 命令启动或关闭    

 reloaded, restarted, started, stopped 平滑重启,重启,启动,关闭

 enabled=yes开机自启动,no开机不启动

 ansible -i /etc/ansible/hosts web-servers -m service -a "name=httpd state=started"

ansible -i /etc/ansible/hosts web-servers -m service -a "name=httpd enabled=yes"  

6.9 sysctl模块远程主机sysctl配置。

 开启路由转发功能

ansible -i /etc/ansible/hosts web-servers -m sysctl -a "name=net.ipv4.ip_forward value=1 reload=yes"

user模块远程主机用户管理

ansible -i hosts web-servers -m user -a "name=xxx state=present"

state参数state=absent(删除用户,不删除家目录)  默认是present(创建用户)

state=absent remove=yes(删除用户同事删除家目录,用户不存在不操作)

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值