自动化运维工具之Ansible
引导
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
- ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
- 连接插件connection plugins:负责和被监控端实现通信;
- host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
- 各种模块核心模块、command模块、自定义模块;
- 借助于插件完成记录日志邮件等功能;
- playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
1.ubuntu安装ansible
# 1.1 apt命令安装
步骤1: 更新系统包列表
在安装任何新的软件包之前,我们首先需要更新Ubuntu的系统包列表。打开终端,输入以下命令
[root@ubt-ans ~]# apt update
Hit:1 https://mirrors.aliyun.com/ubuntu jammy InRelease
Get:2 https://mirrors.aliyun.com/ubuntu jammy-security InRelease [129 kB]
Get:3 https://mirrors.aliyun.com/ubuntu jammy-updates InRelease [128 kB]
Get:4 https://mirrors.aliyun.com/ubuntu jammy-backports InRelease [127 kB]
......
步骤2:安装软件源工具
接下来,我们需要安装一个名为'software-properties-common'的包。这个包包含了一些用于管理软件源的脚本。输入以下命令进行安装:
[root@ubt-ans ~]# sudo apt install software-properties-common
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
software-properties-common is already the newest version (0.99.22.9).
software-properties-common set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 96 not upgraded.
......
步骤3:添加Ansible的PPA
现在,我们需要添加Ansible的个人软件包存档(PPA)。PPA是Ubuntu用于托管更新和用户特定版本的软件包的地方。输入以下命令:
[root@ubt-ans ~]# sudo add-apt-repository --yes --update ppa:ansible/ansible
Repository: 'deb https://ppa.launchpadcontent.net/ansible/ansible/ubuntu/ jammy main'
....
Hit:3 https://mirrors.aliyun.com/ubuntu jammy-updates InRelease
Hit:4 https://mirrors.aliyun.com/ubuntu jammy-backports InRelease
Get:5 https://ppa.launchpadcontent.net/ansible/ansible/ubuntu jammy InRelease [18.0 kB]
......
步骤4:安装Ansible
添加了PPA之后,我们就可以安装Ansible了。输入以下命令:
[root@ubt-ans ~]# apt install ansible
Reading package lists... Done
Building dependency tree... Done
....
Selecting previously unselected package python3-nacl.
Preparing to unpack .../06-python3-nacl_1.5.0-2_amd64.deb ....
Setting up python3-resolvelib (0.8.1-1) ...
......
[root@web01 ~]# ansible --version
ansible [core 2.17.5]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
jinja version = 3.0.3
libyaml = True
# 1.2.二进制安装
# 1.2.1 从PPA的网页手动下载.deb文件,然后使用dpkg命令安装从PPA的网页手动下载.deb文件,然后使用dpkg命令安装
wget https://ppa.launchpadcontent.net/ansible/ansible/ubuntu/pool/main/a/ansible/ansible_10.5.0-1ppa~jammy_all.deb
# 1.2.2安装依赖,Ansible软件包依赖于ansible-core,
安装ansible-core:
sudo apt-get install ansible-core
# 1.2.3 安装ansible
sudo dpkg -i ansible_10.5.0-1ppa~jammy_all.deb
# 1.2.4 解决依赖问题:
如果直接安装ansible-core仍然遇到问题,可以尝试使用apt-get来解决依赖问题:
sudo apt-get install -f
这个命令会尝试修复任何未配置的软件包,并解决依赖问题
# 1.2.5 清理和更新:
在安装之前,确保您的软件包列表是最新的,并清理任何可能的残留软件包:
sudo apt-get update
sudo apt-get clean
sudo apt-get autoclean
2.centos安装ansible
# 2.1 pip3安装ansible
# 2.1.1.python 3中安装 pip,python中软件包管理命令.
yum install -y python3-pip
# 2.1.2.卸载/tmp/
umount -lf /tmp/
# 2.1.3.安装ansible #-i 指定源
pip3 install ansible
# 2.1.4.检查
ansible --version
# 2.2 yum安装
mkdir -p /root/ansible
yum install --downloadonly --downloaddir=/root/ansible ansible
使用yum包管理器仅下载名为ansible的软件包,而不进行安装,并将下载的RPM文件保存到/root/ansible目录中
cd /root/ansible
tar zcf ansible-2.9.27.tar.gz .
scp给其他机器安装
yum -y localinstall ./*.rpm
ansible --version
3. ansible使用
3.1 ansible配置文件修改
默认配置文件/etc/ansible/ansible.cfg 没有手动创建mkdir
cat >/etc/ansible/ansible.cfg<<EOF
[defaults]
host_key_checking = False
deprecation_warnings = False
interpreter_python = /usr/bin/python3
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
EOF
- 配置文件解析:
- host_key_checking = False
- 禁用SSH主机密钥检查。这意味着Ansible不会检查目标主机的SSH密钥是否在known_hosts文件中,这可以加快连接速度,但减少了安全性。
- deprecation_warnings = False
- 禁用弃用警告。这将隐藏那些即将在未来版本中被弃用的功能的警告信息。
- interpreter_python = /usr/bin/python3
- 全局设置Ansible使用的Python解释器路径为/usr/bin/python3。这将覆盖Ansible的自动解释器发现机制,始终使用这个指定的解释器。
- [inventory]
- 这个部分是Ansible管理主机信息的配置文件,相当于系统HOSTS文件的功能,默认存放在/etc/ansible/hosts。
- [privilege_escalation]
- 这个部分用于配置特权提升相关的设置,如become、become_method等,但在您提供的配置中为空。
- [paramiko_connection]
- 这个部分用于配置使用Paramiko作为后端时的SSH连接设置,但在您提供的配置中为空。
- [ssh_connection]
- 这个部分用于配置SSH连接的设置,如控制密钥交换算法等,但在您提供的配置中为空。
- [persistent_connection]
- 这个部分用于配置持久连接的设置,如连接超时等,但在您提供的配置中为空。
- [accelerate]
- 这个部分用于配置Accelerate模式的设置,这是一种提高Ansible执行速度的方式,通过在目标主机上运行一个代理来减少网络延迟,但在您提供的配置中为空。
- [selinux]
- 这个部分用于配置与SELinux(安全增强型Linux)相关的设置,但在您提供的配置中为空。
- [colors]
- 这个部分用于配置Ansible输出的颜色,如错误、警告、提示等的颜色,但在您提供的配置中为空。
- [diff]
- 这个部分用于配置Ansible在执行任务时显示的差异输出的设置,如always、context等,但在您提供的配置中为空。
- 总的来说,您提供的配置文件中只设置了[defaults]部分的一些基本配置,其他部分都是空的,可以根据需要添加更多的配置选项来控制Ansible的行为。
- host_key_checking = False
3.2 分发密钥
基于ssh
管理机器分发密钥给被管理机
手动分发密钥:
ssh-keygen
ssh-copy-id root@xxxxxx
脚本分发密钥:
https://www.cnblogs.com/kyle-7Qc/p/18518921
3.3 主机清单
cat >/etc/ansible/hosts<<EOF
[xxx]
172.16.1.41
[xxx]
172.16.1.31
[xxx]
172.16.1.7
172.16.1.8
EOF