ansible初步

这是什么

ansible的用途是自动化构建,构建的对象包括服务器,操作系统,中间件等等。(实际上只要愿意,ansible中提供了面对亚马逊云,azure之类的模块,个人倾向于云服务构建时采用云服务商自己的工具比如cloudformation,而构建中间件等使用ansible)

手动架构的时候,要么重复性操作很多,架构不止一台服务器,全部使用手动架构的话真的很花时间,自动化构筑工具的用途就是让重复性的手动架构的工作只要写一次代码就能够自动完成,更重要的是可以无限复用,而且不止是工程师,不会写代码的人只要手上有剧本就能完成一样的构筑活动。

ansible实现原理

ansible主要分为控制端和被控制端,ansible使用的是ssh的方式从控制端连接到被控制端,并且不需要在被控制端安装任何软件。那么显然其原理是将本地的剧本转化为命令传送到被控制端上面。

在openssh可用的时候会默认使用openssh连接,如果遇到不支持sftp的设备的话可以改用scp模式连接

安装

ansible基于的是python的框架所以应该确保在安装之前已经拥有python环境。并且目前ansible只支持在类unix环境上使用,包括rh系,db系,osx

以RHEL8为例

sudo dnf install python3

安装后查看一下pip3版本确认是否成功

pip3 --version
pip 18.1 from /usr/lib/python3/dist-packages/pip (python 3.7)

用pip3安装ansible

sudo pip3 install ansible

如果想要最小化安装的话可以使用

sudo pip3 install ansible-core

安装结束后用使用命令 ansible确认

inventory配置

在ansible中有两大主角,一个是怎么构筑的剧本,一个是在哪里构筑的inventory

默认读取的inventory文件全部位于

`/etc/ansible/`文件夹中,其中默认inventory文件为 `hosts`,该文件通常不自带,但是可以自行创建

hosts格式(inventory文件格式)

每个hosts文件都有两种格式:ini和yml,不需要提供后缀名即可自动解析,以ini格式为例

我们有三种写法

1 最简单的写法,整个文件只有ip或者域名,称之为一个host,例如:

54.0.0.1

2 当这个host需要安全验证的时候,可以把一条记录直接写成参数形式


这里的ansible_ssh_private_key_file就是ssh key文件,这里用aws为例,用户是ec2-user
实际上ansible的身份验证也有很多可以说的东西,另外开一个文章讲

ansible_host=54.0.0.1 ansible_ssh_private_key_file=~/kyousei1.pem ansible_user=ec2-user

3 当host记录有多条的时候,可以给每一个host一个别称,写在参数的最前面
 

alias ansible_host=54.0.0.1 ansible_ssh_private_key_file=~/kyousei1.pem ansible_user=ec2-user

alias2 ansible_host=54.0.0.2 ansible_ssh_private_key_file=~/kyousei1.pem ansible_user=ec2-user

alias3 ansible_host=54.0.0.3 ansible_ssh_private_key_file=~/kyousei1.pem ansible_user=ec2-user

4 可以将host分组
 

[group1]
alias ansible_host=54.0.0.1 ansible_ssh_private_key_file=~/kyousei1.pem ansible_user=ec2-user

alias2 ansible_host=54.0.0.2 ansible_ssh_private_key_file=~/kyousei1.pem ansible_user=ec2-user

[group2]
alias ansible_host=54.0.0.3 ansible_ssh_private_key_file=~/kyousei1.pem ansible_user=ec2-user

alias2 ansible_host=54.0.0.4 ansible_ssh_private_key_file=~/kyousei1.pem ansible_user=ec2-user

5 可以将host的地址和参数拆开写,降低耦合度

[ec2]
54.0.0.1
54.0.0.2

[ec2:vars]
ansible_ssh_private_key_file=~/kyousei1.pem
ansible_user=ec2-user

其中ec2是组名,可以任意设置,在组里面是host的ip地址,参数组在组名后面增加 `:vars`不难理解

hosts 通信验证

为了验证inventory文件的正确性,可以使用ping命令,即

ansible all -m ping

上文中已经提到过,默认的inventory文件就是这个所谓的hosts,他位于 /etc/ansible/hosts这个位置,但是实际上根据需求,inventory文件不一定位于一个文件夹,也不一定叫做hosts

那么如果inventory文件不是默认路径的话,就要使用 -i 这个flag

如果具体到使用里面的某一个组,或者某一个主机的时候,写法相应地有如下几种

ansible all -m ping
ansible name_of_group_or_host -m ping
ansible -i path_of_inventory all -m ping
ansible -i path_of_inventory name_of_group_or_host -m ping

由上写法可见groupname和hostname不可以重复

并且除了默认的hosts文件以外,其他的inventory文件就算放在 `/etc/ansible`目录中也必须写上路径才行

比如在 `/`位置启动ansible命令使用host2,就应该写 `ansible -i /etc/ansible/host2 all -m ping`

或者 `ansible -i etc/ansible/host2 all -m ping`也就是说相对于使用了ansible这个命令的位置,inventory的路径是怎么样的那就怎么写

而在 `/etc` 中启动命令就应该写 `ansible -i /etc/ansible/host2 all -m ping` 

或者 `ansible -i ansible/host2 all -m ping`

**以上格式非常重要 没有写过剧本的人根据格式可以避免大量debug时间**

如果是使用密码的形式的话,只需要把

ansible_ssh_private_key_pair 改成 ansible_password 就可以了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值