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像剧本一样去执行你所设想的命令。