00 Ansible简介和安装
1. Ansible概述与基本概念
1.1. 什么是Ansible?
Ansible 是一款用 Python 编写的开源 IT 自动化工具,主要用于配置管理、软件部署及高级工作流编排。它能够简化应用程序部署、系统更新等操作,并且支持自动化管理大规模的计算机系统。Ansible 的设计简单易懂,且无代理(agentless),这使得它可以快速集成到现有环境中。
大量任务基于ssh解析,会出现瓶颈。
1.2. 初学者官方指南
推荐阅读官方的入门指南:redhat ansible。该指南将帮助你快速上手 Ansible,了解其基本概念和用法,助你掌握自动化运维的基础技能。
2. 学习目的与实践场景
2.1. 学习目标
- 自动化运维:通过Ansible实现服务器管理和配置的自动化,减少手动操作,提升效率,降低错误率。
- 简化配置管理:使用简洁的脚本和配置文件,快速完成大规模系统配置和部署。
- 提升运维效率:通过自动化流程减少重复工作,使运维人员能够专注于更有价值的任务。
2.2. 适合的受众:
- 运维工程师:Ansible可以帮助运维人员管理大量的服务器,自动化配置和部署,减少人工干预。
- 开发人员:开发人员通过使用Ansible能在开发环境中快速部署应用,环境搭建,减少手动配置环境的时间。
2.3. 实践场景:
- 系统初始化:在公司部署一批新服务器时,使用Ansible自动化配置操作系统、系统参数调整、批量创建用户、设置用户权限、基础环境、软件安装等,确保所有服务器按照公司标准配置,无需手动配置每台服务器。
- 配置变更:服务器中配置Nginx时,修改Nginx配置文件(如
nginx.conf
),并通过Ansible将配置推送到所有相关服务器,确保负载均衡策略一致,并自动重启服务生效。 - 应用部署:通过Ansible Playbook部署Zookeeper集群、kafka集群,确保多节点间的通信和数据同步,每个节点的配置都被统一管理。
- 计划任务:使用Ansible定期配置和执行服务器备份任务(例如通过cron),确保数据每周定时备份到远程存储,不遗漏任何重要数据。
- 环境一致性:Ansible保证开发环境、测试环境和生产环境的配置一致性,在每个环境中部署的Nginx服务配置、SSL证书、日志路径等完全相同,避免环境间的配置差异引发问题。
二、Ansible安装配置
1. Ansible架构与工作原理
控制机:通过命令行接口(CLI)或 Playbook 发起任务请求。
SSH通信:控制机通过 SSH 协议向受控节点发送任务请求(控制机要免密登录被控机)。
受控节点:接收到任务并执行。受控节点可以是多个,Ansible 通过并行执行提高效率。
模块:Ansible 使用模块在受控节点上执行特定操作,如安装软件、复制文件等。
结果反馈:执行完毕后,受控节点将执行结果反馈给控制机,显示成功或失败的状态,并提供执行细节。
2. 安装与环境配置
2.1. 节点规划
用途 | 主机 IP | 操作系统 | 备注 |
Ansible 控制机 | 192.168.101.100 | Rocky Linux 9.4 | 安装 ansible-core、用于运行 playbook |
被控节点(node1) | 192.168.101.101 | Rocky Linux 9.4 | RockyLinux9 |
被控节点(node2) | 192.168.101.110 | CentOS 7.9 | 测试兼容性,常用老版本系统 |
被控节点(node3) | 192.168.101.120 | ubuntu 20.04 | ubuntu操作系统 |
2.2. 安装Ansible
# 启用epel 源
sudo dnf install epel-release -y
# 安装ansible
sudo dnf install ansible-core -y
ansible --version
2.3. Asnsible节点与被管理节点基于Key(免密登录)SSH
# 生成ssh key
ssh-keygen
# 拷贝ssh key到远程主机,ssh的时候就不需要输入密码了
ssh-copy-id root@192.168.101.101
2.4. SSH公私钥用途(补充)
2.4.1. SSH 公钥与私钥的用途解释
用于通过不安全的网络安全地访问远程计算机。它使用 公钥加密 和 私钥解密 机制来实现安全的身份验证和加密通信。
2.4.2. 公钥与私钥的基本概念
公钥(Public Key):
•用于加密数据或进行身份验证。
•可公开共享,并添加到远程服务器中以允许验证客户端身份。
私钥(Private Key):
•用于解密数据或验证身份。
•必须保密,泄露可能导致安全问题。
非对称加密的特点:
•公钥和私钥成对使用,公钥加密的数据只能通过对应的私钥解密,反之亦然。
2.4.3. SSH 免密登录原理
1.生成密钥对:在客户端生成公钥和私钥(使用 ssh-keygen)。私钥保存在本地,公钥可公开。
2.部署公钥:将公钥复制到目标服务器的 ~/.ssh/authorized_keys 文件中。
3.身份验证:
•客户端连接时,服务器发送一个加密的随机挑战信息。
•客户端使用私钥解密挑战信息,并返回解密结果。
•如果解密正确,服务器允许登录。
免密登录本质:
•通过 公钥加密 和 私钥解密 来验证客户端身份,无需使用密码。
公钥和私钥比作一个 锁和钥匙:
- 公钥:如一把可以公开的锁,任何人都可以用它锁住东西(加密)。
- 私钥:如仅你拥有的钥匙,只有你能打开锁(解密)。
3. Ansible 常用命令
3.1. 定义主机组
[rockylinux]
192.168.101.100
192.168.101.101[centos]
192.168.101.110[ubuntu]
192.168.101.120
3.2. 远程执行Linux命令(使用常用命令批量管理机器)
指定用户没有做过免密登录提示任务运行失败,也可以指定密码,相对繁琐。
ansible all -m ping -u xinglu
ansible all -m ping -u xinglu
3.3. 执行命令
在所有的远程主机上,以当前bash的同名用户,在远程主机执行“echo bash”
ansible -i hosts all -m command -a "pwd"
指定rockylinux 组创建文件
所有组创建文件
查看详细信息加v
ansible -i hosts all -a 'w' -vvv