一、简介:
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括:
(1)、连接插件connection plugins:负责和被监控端实现通信;
(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
(3)、各种模块核心模块、command模块、自定义模块;
(4)、借助于插件完成记录日志邮件等功能;
(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。
Ansible默认通过 SSH 协议管理机器.安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库.只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台电脑管理一组远程的机器.在远程被管理的机器上,不需要安装运行任何软件,因此升级Ansible版本不会有太多问题.
Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates.
Ansible’s main goals are simplicity and ease-of-use. It also has a strong focus on security and reliability, featuring a minimum of moving parts, usage of OpenSSH for transport (with an accelerated socket mode and pull modes as alternatives), and a language that is designed around auditability by humans–even those not familiar with the program.
好吧!以上的内容完全是拼凑来的,但足以描述ansible的特性了。ansible的特点就是不需要安装客户端,只需一台主机安装ansible和相关组件即可,ansible默认会通过OpenSSH与被管理主机通讯,并完成一系列命令。当然如果主机无法使用OpenSSH,ansible也提供了其他的通讯方式,例如python的pramamiko模块(ansible是使用py开发的)。仔细一想貌似原理并不复杂,使用bash中的ssh就可以实现了,但ansible的功能远不止这么简单,他只是提供一个框架,真正强大的是他可拓展的模块们以及ansible的衍生产品。(主要模块上边有介绍)
ansible的工作流程大致如下:
想要掌握一个工具,最快的办法就是使用它,从搭建环境开始↓
二、安装
官网上提供了多种安装方式:http://docs.ansible.com/ansible/latest/intro_installation.html ,包括使用yum、apt、Python的pip以及源码安装等。笔者使用Ubuntu系统做测试,所以为了方便直接选择apt了:
$ sudo apt-get update $ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:ansible/ansible $ sudo apt-get update $ sudo apt-get install ansible
注意:ansible依赖Python运行环境,所以在安装ansible之前,需要安装2.7以上版本的Python。
安装好之后,打开/etc/ansible/hosts文件,该文件是配置被管理主机的,ansible默认会在/etc/ansible/hosts文件中查找被管理主机,当然也可以使用 -i 或定义环境变量的方式自定义。
hosts中有好多被注释掉的配置,这些注释简单介绍了该文件的配置方法,我们先不管,直接在该文件最底部加一行:
127.0.0.1 ansible_connection=ssh ansible_ssh_user=app
注:127.0.0.1是被管理主机的ip,由于我只有一台主机,所以只好配置成自己来实验了!ansible_ssh_user为连接到被管理主机所使用的用户。
测试一下:
ansible all -m ping --ask-pass -c paramiko
注:ping模块用于测试连通性,( -m用于指定用哪个模块,--ask-pass 询问密码,-c paramiko 代替sshpass )。由于我的机器没安装sshpass ,所以使用Python的paramiko代替了。all指定被管理主机群,all表示所有hosts中配置的主机都要执行这个命令。
输入密码后,结果如下:
SSH password: 127.0.0.1 | SUCCESS => { "changed": false, "ping": "pong" }
表示执行成功了。
三、简单配置:
- 自定义hosts文件,现在我不想使用/etc/ansible/hosts文件配置被管理主机了,我要在$home/目录下自定义一个文件作为hosts:
$ cd ~ $ touch ansible_hosts $ echo '[appServer]' >>ansible_hosts $ echo '127.0.0.1 ansible_connection=ssh ansible_ssh_user=app' >>ansible_hosts $ cat ansible_hosts [appServer] 127.0.0.1 ansible_connection=ssh ansible_ssh_user=app
为方便测试,我们先将/etc/ansible/hosts中配置的主机信息注释掉,使用-i指定该文件为hosts文件:$ ansible all -m shell -a "hostname" --ask-pass -i ~/ansible_hosts
命令执行成功,但是每次都要-i太麻烦了,我们现在配置ANSIBLE_HOSTS环境变量即可解决:$ echo 'export ANSIBLE_HOSTS=~/ansible_hosts' >> ~/.bashrc #加入环境变量 $ source ~/.bashrc #使环境变量立即生效
现在不使用-i了:ansible all -m shell -a "hostname" --ask-pass
执行成功。 - 使用--ask-pass每次都要输入密码,太麻烦了,当然我们可以使用ansible_ssh_pass把密码配置进hosts文件中,如下,但是这种存储明文密码的做法并不推荐。
127.0.0.1 ansible_connection=ssh ansible_ssh_user=app ansible_ssh_pass=123456
我们通常的做法是使用公钥登录被管理主机,ansible提供了秘钥管理模块:$ #生成公钥 $ ssh-keygen -t rsa $ #使用ssh秘钥管理模块将公钥写入主机 $ ansible all -m authorized_key -a "user=admin key='{{ lookup('file', '/servers/.ssh/id_rsa.pub') }}' path=/servers/.ssh/authorized_keys manage_dir=no" --ask-pass -c paramiko
或者我们可以使用文件模块,将秘钥文件传输到被管理主机,再使用shell写入:$ #传公钥到被管理主机 $ ansible all -m copy -a "src=/servers/.ssh/id_rsa.pub dest=/tmp/id_rsa.pub" --ask-pass -c paramiko $ #将公钥写入被管理主机 $ ansible all -m shell -a "cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys" --ask-pass -c paramiko -u root #需要启动root用户ssh登录
注:-u 指定登录用户,注意若要使用root用户登录,需要先开启root用户的ssh登录权限,若未开通方法如下:$ #允许root用户使用ssh登录 $ sudo vi /etc/ssh/sshd_config $ #修改配置内容:PermitRootLogin yes $ service sshd restart #重启ssh生效
验证一下:$ ansible all -m shell -a "hostname"
不用输入密码,即可执行成功!
本章先写到这里!
相关推荐
Ansible是一款强大的自动化运维工具,尤其适合新手入门。它简化了服务器配置、应用部署和任务执行的过程,通过SSH连接管理多台远程主机,实现无状态化运维。以下是对Ansible的基本知识和操作的详细解释。 1. **...
自动化运维工具 - Ansible自动化部署 - Puppet配置管理 - Chef资源管理 - Jenkins持续集成与交付 ### Linux架构设计 #### 8. 高可用与负载均衡 - 高可用集群原理与实现 - 负载均衡技术与算法 - Nginx与HAProxy的...
5. **Ansible自动化运维实战**:介绍Ansible的使用,实现无代理的远程自动化运维。 6. **Jenkins企业级自动化实战**:利用Jenkins构建持续集成/持续部署(CI/CD)流程,加速软件开发。 7. **Docker、K8S、Hadoop、...
### 第八阶段:Shell编程与自动化运维 - **Shell高级编程实战**:进一步提高Shell编程技能。 - **Python自动化入门及进阶**:学习使用Python进行自动化脚本编写。 ### 第九阶段:LNMP优化与集群架构 - **LNMP优化...
自动化运维趋势章节则着重于介绍自动化运维的概念和工具,比如Puppet、Ansible和Jenkins等,这些都是提高运维效率、减少重复性工作的重要工具。自动化运维已经成为企业IT管理的必然趋势。 Docker、Kubernetes和...
Python也广泛应用于Web开发(如Django和Flask框架)、数据分析、机器学习(如TensorFlow和PyTorch框架)、自动化运维(如Ansible)等领域。通过持续学习和实践,你将能够熟练掌握Python,并利用它解决各种实际问题。...
- **自动化工具**:学会使用自动化部署工具,如Ansible。 - **安全性**:重视系统安全性,学习防火墙配置和入侵检测技术。 - **备份策略**:建立可靠的备份和恢复方案。 - **项目实战**:参与实际项目,积累实战经验...
3. DevOps:Ansible、SaltStack等工具用于自动化运维。 4. 网络爬虫:如Scrapy框架用于数据抓取。 5. 数据分析与机器学习:Pandas、NumPy、SciPy、TensorFlow等库广泛应用于数据分析和机器学习。 6. 自动化测试:...
最后,笔记可能还会涵盖一些进阶主题,如虚拟化技术(KVM或VirtualBox)、LXC(Linux容器)、Docker等,以及自动化部署工具(如Ansible)的使用。 总的来说,这份学习笔记全面覆盖了Linux基础知识、系统管理、网络...
- 自动化运维:利用Ansible、SaltStack等工具进行服务器管理。 通过"实验楼 Python 挑战作业"的实践,学习者可以深入理解这些概念,通过编写代码解决实际问题,从而提升编程技能和问题解决能力。这个压缩包中的...
- **自动化运维**:如Ansible、SaltStack等工具。 #### 二、Python基础知识 - **字符编码**:介绍Python中字符编码的基本概念,如何设置默认编码,以及如何处理不同编码格式的文件。 - **输入和输出**:讲解如何从...
Shell脚本是自动化任务的强大工具,能帮助用户执行一系列命令、管理文件系统、处理输入输出,甚至与其他系统工具交互。Bash是最常见的Shell,也是初学者入门的首选。学习编写Shell脚本是系统工程师和DevOps从业者...