ansible离线安装部署使用


  • ansible离线安装部署使用
  • 一、适用场景
  • 二、安装python环境
  • 1. 下载Anaconda3
  • 2. 为Anaconda3脚本赋权
  • 3. 执行Anaconda3脚本,按提示操作
  • 4. 设置环境变量
  • 三、pip离线打包ansible
  • 1. 下载需要离线部署的ansible
  • 2. 在nodeA离线下载ansible
  • 三、配置ansible信息
  • 1. 创建主机清单
  • 2. 配置sshpass登陆方式
  • 3. 配置ansible信息
  • 四、使用ansible
  • 1. ansible常用模块
  • 2. 代码案例


一、适用场景

在公司生产环境往往需要安装ansible来管理节点,但是需要安装ansible的节点nodeA无法联通网络nodeB可以通过pip下载ansible的包,所以需要离线部署方式来安装ansible。

执行步骤为:

  • nodeA离线安装python环境
  • nodeB打包ansible
  • 将nodeB打包好的ansible上传到nodeA
  • nodeA离线下载ansible包
  • 配置ansible

二、安装python环境

1. 下载Anaconda3

Ansible的执行依赖python3的环境。
Anaconda包含python环境、很多python常用的包以及pip包管理器,所以选择可以一键安装部署的anaconda3。
下载地址
https://www.anaconda.com/products/individual

2. 为Anaconda3脚本赋权

将anaconda3上传到目标服务器,并给该下载脚本赋权。

chmod +x Anaconda3-2019.10-Linux-x86_64.sh

3. 执行Anaconda3脚本,按提示操作

sh Anaconda3-2019.10-Linux-x86_64.sh

anaconda默认安装到目录下,如果想要更改安装目录,需要在执行脚本过程中设置。

4. 设置环境变量

若在执行anaconda下载脚本时,未将其设置未环境变量,需要手工添加。
打开环境变量修改

vi /etc/profile

在环境变量文件中添加如下代码并保存

export PATH=/home/sysop/anaconda3/bin:$PATH

让环境变量生效

source /etc/profile

然后输入python -V,若python为3.7.4则代表设置成功。

三、pip离线打包ansible

1. 下载需要离线部署的ansible

在可连接到pip源的nodeB,下载ansible到指定目录即可,目录无要求。比如我是直接下载到了/目录下。

pip download ansible -d /

-d 标示指定的目录。
然后将该包压缩,并传到目标服务器节点。

tar -czvf ansible.tar ansible
scp ansible.tar root@83.220.1.x:/home/root/

其中83.220.1.x为nodeA的ip地址。

2. 在nodeA离线下载ansible

此时可以发现在/home/root/目录下有了已经download好的ansible包,而且nodeA也已经有了python环境和pip下载指令,所以指定下载该tar包即可。

tar -xvf ansible.tar
pip install --no-index --find-links="/home/root/ansible"

即可离线下载完成,然后输入ansible --version,可以看到相关信息,默认下载的是最新版本。

下载完成后,该包安装到了anaconda的site-packages中,所以该下载介质和anaconda.sh的下载介质也没啥用了,空间不足的话直接删了就好。

cd ~
rm -r ansible
rm ansible.tar
rm Anaconda3-2020.02-Linux-x86_64.sh

三、配置ansible信息

1. 创建主机清单

anisble默认的主机清单目录为/etc/ansible/hosts,但是通过pip安装一般无此目录和文件,需要手工创建。

cd /etc/
mkdir ansible
cd ansible
touch hosts

至此,我们的ansible主机清单已经配置完毕,在hosts里安装ansible的语法规则来创主机分组,如下例所示。

[group1]
83.249.1.2
83.249.1.3

[group1:vars]
ansible_ssh_user=kyle
ansible_ssh_pass=kyle123
ansible_become=true
ansible_become_method=su
ansible_become_user=root
ansible_become_pass=root123

其中group1为主机清单,group1:vars为该组变量的参数,可以设置登陆密码、用户、登陆后的用户等信息。

ansible_ssh_user/pass,为登陆该节点的用户和密码。

但是有些节点不允许root用户的远程登陆,所以可以使用一个一般权限的用户登陆,然后登陆后使用su方式切换为root用户。这些操作可以通过vars来自动实现,具体参数如上所示。

2. 配置sshpass登陆方式

因为ansible和被控节点没有信任关系,所以需要ssh方式来连接,该模块依赖sshpass模块,所以需要下载该模块。

上传sshpass安装包到服务节点,如附件3所示。并依次执行如下操作。
https://sourceforge.net/projects/sshpass/files/sshpass/1.06/sshpass-1.06.tar.gz/download

tar -zxvf sshpass-1.06.tar.gz
cd sshpass-1.06
./configure
make
make install

3. 配置ansible信息

ansible.cfg为ansible的默认配置文件,ansible会自动读取该配置文件。

cd /etc/ansible/
touch ansible.cfg

需要将如下的配置添加到该配置文件中,其余还有很多特性,有兴趣的小伙伴可以自行研究。

host_key_checking=False:取消被控节点的key验证。这样就可以在ansible主节点连接被控节点的时候,免去输密码的环节。

四、使用ansible

1. ansible常用模块

至此,已经就在nodeA离线安装好了ansible,就可以开始使用了。
其中ansible常用的模块如下:

模块名

用途

参数

ping

检查指定节点机器是否连通,如果通返回pong

copy

在远程主机复制主节点的文件

src/dest

shell

在远程主机上执行命令

unarchive

解压本地文件到远程主机

src/dest/copy

file

执行文件相关操作

path/state/

如果对不是某个模块不是很清楚参数是什么,

ansible-doc module_name

module_name为你想要查询模块的名字。

-m 为指定模块名

-a 为参数

2. 代码案例

# 到group1的各个节点能否联通
ansible group1 -m ping
# 将1.txt拷贝到远程主机/home/root下
ansible group1 -m copy -a 'src=/ansible/1.txt dest=/home/root/'
# 在远程执行本地脚本
ansible group1 -m script -a 'test.sh'
#将本地tar包在远程解压
ansible group1 -m unarchive -a 'src=/ansible/file.tar dest=/home/root'
# 在远程主机/home/root/下创建文件夹
ansible group1 -m file -a 'path=/home/root/dir state=directory'
# 在远程主机/home/root/dir/下创建文件file.txt
ansible group1 -m file -a 'path=/home/root/dir/file.txt state=touch'
# 删除远程主机的dir文件夹
ansible group1 -m file -a 'path=/home/root/dir state=absent'

如果想要更方便的操作,能够让ansible按照你所设想的步骤来执行ad-hoc,可以考虑playbook,是一种yml格式的更强大的ansible命令集,能够让ansible像剧本一样去执行你所设想的命令。