当前位置: 首页 > 科技观察

AnsibleAutomationTools安装、配置和快速入门指南

时间:2023-03-12 08:00:52 科技观察

那里有很多自动化工具。我可以举几个例子,比如Puppet、Chef、CFEngine、Foreman、Katello、Saltstock、SpaceWalk,它们被许多组织广泛使用。自动化工具能做什么?自动化工具无需人工干预即可自动执行日常任务,从而让Linux管理员的工作更加轻松。这些工具允许用户执行配置管理、应用程序部署和资源配置。你为什么喜欢Ansible?Ansible是一种无代理的自动化工具,它使用SSH执行所有任务,但其他工具需要在客户端节点上安装代理。什么是Ansible?Ansible是一种开源、易于使用且功能强大的IT自动化工具,可通过SSH在客户端节点上执行任务。它是用Python构建的,Python是当今世界上最流行、最强大的编程语言之一。两端都需要Python来执行所有模块。它配置系统、部署软件并安排高级IT任务,例如持续部署或零停机滚动更新。您可以使用Ansible轻松执行任何类型的自动化任务,无论是简单的还是复杂的。在开始之前,您需要了解一些Ansible术语,它们可以帮助您更好地创建任务。Ansible是如何工作的?Ansible的工作原理是在客户端节点上推送称为ansible模块的小程序,这些小程序临时存储在客户端节点中,通过JSON协议与Ansible服务器通信。Ansible通过SSH运行这些模块并在完成后删除它们。模块是用Python或Perl等编写的脚本。控制节点用于控制剧本的所有功能,包括客户端节点(主机)。控制节点控制节点:使用Ansible在受控节点上执行任务的主机。控制节点可以有多个,但不能使用Windows系统主机作为控制节点。Managednode被管节点:控制节点配置的主机列表。ListInventory:控制节点管理的主机列表,配置在/etc/ansible/hosts文件中。它包含有关每个节点的信息,例如其IP地址或主机名,并且可以根据需要对这些节点进行分组。Module模块:每个模块用于执行特定的任务,目前有3387个模块。点对点临时:它允许您一次运行一个任务,它使用/usr/bin/ansible二进制文件。Task任务:Play的每个动作都有一个任务列表。任务按顺序执行,一次一个在受控节点中执行。ScriptPlaybook:你可以使用脚本同时执行多个任务,但是点对点只能执行一个任务。剧本是用YAML编写的,易于阅读。以后我们会写一篇关于脚本的文章,你可以用它来执行复杂的任务。测试环境本环境包括一个控制节点(server.2g.lab)和三个被控节点(node1.2g.lab、node2.2g.lab、node3.2g.lab),均运行在虚拟环境中,运行这些系统是:系统目的主机名IP地址操作系统Ansible控制节点server.2g.lab192.168.1.7Manjaro18ManagedNode1node1.2g.lab192.168.1.6CentOS7ManagedNode2node2.2g.lab192.168.1.5CentOS8ManagedNode32g3.lab192.168.1.9Ubuntu18.04用户:daygeek前提是在Ansible控制节点和受控节点之间启用无密码认证。控制节点必须是Python2(2.7版)或Python3(3.5版或更高版本)。托管节点必须是Python2(2.6或更高版本)或Python3(3.5或更高版本)。如果在远程节点上启用了SELinux,则在Ansible中可以使用任何复制、文件、模板相关功能之前,还需要在这些节点上安装libselinux-python。如何在控制节点上安装AnsibleFedora/RHEL8/CentOS8系统,使用DNF命令安装Ansible。注意:您需要在RHEL/CentOS系统上启用EPEL存储库,因为Ansible软件包在发行版官方存储库中不可用。$sudodnfinstallansible对于Debian/Ubuntu系统,使用APT-GET命令或APT命令安装Ansible。配置下面的PPA以在Ubuntu上安装最新稳定版本的Ansible。$sudoaptupdate$sudoaptinstallsoftware-properties-common$sudoapt-add-repository--yes--updateppa:ansible/ansible$sudoaptinstallansible对于Debian系统,配置以下源列表:$echo"debhttp://ppa.launchpad.net/ansible/ansible/ubuntutrustymain”|sudotee-a/etc/apt/sources.list.d/ansible.list$sudoapt-keyadv--keyserverkeyserver.ubuntu.com--recv-keys93C4A3FD7BB9C367$sudoaptupdate$sudoaptinstallansible对于ArchLinux系统,使用Pacman命令安装Ansible:$sudopacman-Sansible对于RHEL/CentOS系统,使用YUM命令安装Ansible:$sudoyuminstallansible对于openSUSE系统,使用Zypper命令安装Ansible:$sudozypper安装ansible或者,您可以使用PythonPIP包管理器来安装:$curlhttps://bootstrap.pypa.io/get-pip.py-oget-pip.py$sudopythonget-pip.py$sudopipinstallansible检查控制节点上安装的Ansible版本:$ansible--versionansible2.9.2configfile=/etc/ansible/ansible.cfgconfiguredmodulesearchpath=['/home/daygeek/.ansible/plugins/modules','/usr/share/ansible/plugins/modules'es']ansiblepython模块位置=/usr/lib/python3.8/site-packages/ansible可执行文件位置=/usr/bin/ansiblepython版本=3.8.1(默认,2020年1月8日,23:09:20)[GCC9.2.0]如何在受控节点上安装Python?使用以下命令在受控节点上安装python:$sudoyuminstall-ypython$sudodnfinstall-ypython$sudozypperinstall-ypython$sudopacman-Spython$sudoaptinstall-ypython如何设置SSHLinuxKey认证(无密码认证)使用以下命令创建一个sshkey然后复制到远程机器$ssh-keygen$ssh-copy-iddaygeek@node1.2g.lab$ssh-copy-iddaygeek@node2.2g.lab$ssh-copy-iddaygeek@node3.2g.lab详见本文《在 Linux 上设置 SSH 密钥身份验证(无密码身份验证)》。如何创建Ansible主机清单在/etc/ansible/hosts文件中添加要管理的节点列表。如果该文件不存在,可以创建一个新文件。这是我的测试环境的主机清单文件:$sudovi/etc/ansible/hosts[web]node1.2g.labnode2.2g.lab[app]node3.2g.lab让我们看看是否可以使用以下命令找出答案命令所有主机。$ansibleall--list-hostshosts(3):node1.2g.labnode2.2g.labnode3.2g.lab针对单个组运行以下命令:$ansibleweb--list-hostshosts(2):节点1。2g.labnode2.2g.lab如何使用临时命令执行任务一旦主机清单验证检查完成,您就可以开始了。做得好!语法:ansible[pattern]-m[module]-a"[moduleoptions]"详情:========ansible:一个命令模式:输入整个库存或特定组-m[module]:运行给定的模块名称-a[模块选项]:指定模块参数使用Ping模块ping主机清单中的所有节点:$ansibleall-mpingnode3.2g.lab|SUCCESS=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"},"changed":false,"ping":"pong"}node1.2g.lab|SUCCESS=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"},"changed":false,"ping":"pong"}node2.2g.lab|成功=>{"ansible_facts":{"discovered_interpreter_python":"/usr/libexec/platform-python"},"changed":false,"ping":"pong"}所有系统都返回成功,但没有任何变化,成功时只返回pong您可以使用以下命令获取可用模块列表。$ansible-doc-l目前有3387个内置模块,会随着Ansible版本的增加而增加:$ansible-doc-l|wc-l3387使用命令模块在主机列表中的所有节点上执行命令:$ansibleall-mcommand-a"uptime"node3.2g.lab|改变|rc=0>>18:05:07up1:21,3个用户,平均负载:0.12、0.06、0.01node1.2g.lab|改变|rc=0>>06:35:06up1:21,4个用户,平均负载:0.01、0.03、0.05node2.2g.lab|改变|rc=0>>18:05:07up1:25,3users,loadaverage:0.01,0.01,0.00执行指定组的命令模块。检查应用组主机的内存使用情况:$ansibleapp-mcommand-a"free-m"node3.2g.lab|改变|rc=0>>totalusedfreesharedbuff/cacheavailableMem:19931065916836748Swap:142501424要在web组上运行hostnamectl命令,请使用以下格式:$ansibleweb-mcommand-a"hostnamectl"node1.2g.lab|改变|rc=0>>静态主机名:CentOS7.2daygeek.com图标名称:computer-vm机箱:vm机器ID:002f47b82af248f5be1d67b67e03514c启动ID:dc38f9b8089d4b2d9304e526e00c6a8f虚拟化:kvm操作系统:CentOSLinux7(核心)CPE/o操作系统名称::centos:centos:7内核:Linux3.10.0-957。el7.x86_64架构:x86-64node2.2g.lab|改变|rc=0>>静态主机名:node2.2g.lab图标名称:computer-vm机箱:vm机器ID:e39e3a27005d44d8bcbfcab201480b45BootID:27b46a09dde546da95ace03420fe12cb虚拟化:oracle操作系统:CentOSLinux8(Core)CPE操作系统名称:cpe:/o:centos:centos:8内核:Linux4.18.0-80.el8.x86_64架构:x86-64参考:Ansible文档