一、前言
该篇是对ansible实训第二天内容的归纳总结,主要包括ansible的一些基本问题以及ansible的部署安装。
二、理论部分
Q1:什么是ansible
Ansible是一种自动化IT工具,它可以帮助管理和自动化IT基础架构。使用Ansible,管理员可以通过编写Playbooks和Roles来描述所需状态,然后Ansible将自动处理配置更改,软件安装以及任何其他任务。 Ansible是免费,开源的,支持多平台,可横向扩展,并且易于学习。它可以用于许多用例,例如配置管理,应用程序部署,云基础架构管理等。
Q2:ansible为什么要做ssh免密
在Ansible中,SSH免密是一个很常见的需求,因为它可以简化管理任务并提高安全性。当使用Ansible执行任务时,系统需要使用SSH连接到管理主机上的所有受控主机。为了实现自动化,Ansible需要在这些主机之间进行通信,如果每次运行Playbook时都需要输入密码,那么这将会非常耗时和繁琐。因此,Ansible通常会要求管理员在Ansible主机和受控主机之间设置SSH免密连接,以便自动化任务可以在几秒钟内完成,而无需人工干预。除了提高效率外,SSH免密还可以提高安全性,因为它允许加密数据传输,并指定仅允许特定用户和主机之间的连接。这使得Ansible变得更加安全和可靠,同时也更方便和易于管理。
Q3:ansible无需代理
Ansible不需要代理,它可以直接与受控主机进行通信。这是因为Ansible使用SSH协议进行通信,并通过SSH连接到受控主机来执行命令。这意味着任何机器上的SSH客户端都可以被用来连接到受控主机,而无需安装任何代理或其他额外的软件。
与其他自动化工具不同,Ansible不需要在受控主机上运行任何代理或客户端程序。这使得Ansible变得更加轻量级,易于部署和管理。此外,因为没有代理,Ansible的安全性也更高,因为没有额外的软件需要维护和更新,也不需要担心代理可能成为攻击目标的问题。因此,Ansible是一种非常灵活和安全的自动化工具,可以帮助管理员轻松管理他们的IT基础设施。
Q4:ansible的优点
1. 跨平台支持:Ansible是一款跨平台的自动化工具,可以轻松管理不同操作系统、云服务和网络设备等不同的平台。这意味着管理员可以在同一套工具中管理不同平台上的应用程序和主机,而不必为不同平台选择不同的工具。
2. 人类可读的自动化:Ansible使用YAML格式的语法,可以轻松理解、维护和修改Ansible Playbook和清单文件。管理员无需编写复杂的脚本,可以使用可读性强的文本语言描述任务和操作。这使得整个运维过程更加透明和容易理解。
3. 完美描述应用:Ansible提供了大量的模块,可以轻松部署、配置和管理应用程序。这些模块对应于如Docker、Kubernetes等应用模式,可以大幅减少部署时间和规范化部署过程。Ansible Playbook能够以同一种方式描述应用程序的部署和配置,无论应用部署在哪种环境中都是一样的。
4. 支持动态清单:Ansible清单允许管理员添加、删除、变更主机和组信息。通过支持动态清单,Ansible可以实现灵活的自动化工作,例如动态的扩展和缩小集群容量。动态清单的支持使得Ansible可以应对大规模、复杂的情况下的自动化工作。
总之,Ansible的跨平台支持、人类可读的自动化、完美描述应用和支持动态清单等特性使其成为一款优秀的
Q5:ansible的方式
Ansible是一款开源自动化工具,提供了多种方式来管理和配置主机和应用程序。以下是Ansible的主要方式:
1. 命令行方式:这是最简单的一种方式,使用ansible命令从控制节点管理远程主机。可以使用ansible命令执行单个任务或更复杂的操作,如Playbook等。
2. Playbook方式:Playbook是一种基于YAML的脚本语言,可以用于定义多项任务和操作顺序。和命令行方式不同,它允许管理员在一个文件中定义多项任务,可以使用一种可读性较强的方式描述任务流程。
3. Ansible Tower:Ansible Tower是一个具有GUI的企业级版本,可以在Web界面上执行Playbook,并提供一些额外的功能,如任务计划、队列等。可以使用它对远程主机进行管理和任务调度。
4. API方式:Ansible还提供API,可用于编写脚本或插件执行自动化、无需手动调整。API方式可用于集成其他工具、插件和第三方服务,执行更灵活的操作和任务。
总之,Ansible提供了多种方式来管理和配置主机和应用程序,使管理员能够根据应用场景选择最适合自己的方法。这也是Ansible在自动化管理领域备受青睐的原因之一。
Q6:ansible的安装
在controller安装ansible,同时要在所有的受管理节点上安装python;
Q7:ansible的各文件作用
ansible安装完成后默认配置路径在/etc/ansible这个目录下
文件名 | 文件作用 |
---|---|
ansible.cfg | 配置文件 |
hosts | 清单文件 |
Q8:什么是ansible清单
Ansible清单(Inventory)是一个文本文件,它定义了Ansible需要执行操作的目标主机和主机组。清单中包含的信息包括主机名或IP地址、主机组、变量以及其他有关主机的信息,如SSH端口、用户名等。在Ansible中,清单是一个非常重要的概念,它定义了所有需要执行操作的主机。
Ansible清单不仅可以用于指定单个主机,还可以用于定义主机组。通过定义主机组,可以让Ansible将一组主机作为一个整体来处理。这样,可以在一次操作中同时对这些主机执行命令,或者将它们作为一个单独的角色来定义和管理。
清单还可以有多个组,并且可以支持嵌套和动态清单。动态清单是一个由脚本生成的清单,可以根据需要自动添加和删除主机和组。这使得清单能够适应不断变化的环境,从而使自动化管理变得更加容易。
总而言之,Ansible清单是指定需要管理的主机和主机组的一种方式,它是Ansible中进行自动化管理的重要组成部分。
Q9:常见的ansible.cfg文件的配置指令
ansible.cfg文件不必需要从/etc下复制过来,同样可以使用创建文件手写的方式进行,常见的ansible的ansible.cfg中配置指令如下:
指令 | 作用 |
---|---|
inventory | 指定Ansible要使用的主机清单文件的位置 |
remote_use | 指定在远程系统上执行Ansible任务时要使用的用户名 |
private_key_file | 指定连接到远程主机时要使用的私钥文件 |
host_key_checking | 指定Ansible是否应该检查主机密钥,以确保连接的主机是预期的主机 |
ask_pass | 如果设置为True ,则在执行Ansible任务时,Ansible会提示您输入远程系统的密码 |
become | 如果设置为True ,则Ansible会尝试使用sudo身份执行命令 |
become_method | 指定Ansible在远程主机上使用的身份转换方法。默认是sudo |
become_user | 指定在执行命令期间要使用的远程用户身份。默认是root |
become_ask_pass | 如果设置为True ,则在切换到sudo用户时,Ansible会提示您输入sudo用户的密码 |
sudo_user | 指定在主机上以sudo身份执行任务时要使用的用户 |
三、ansible的部署
注意,以下ansible部署中,安装、修改配置文件等所有操作均在普通用户下进行!!!
注意,以下ansible部署中,安装、修改配置文件等所有操作均在普通用户下进行!!!
注意,以下ansible部署中,安装、修改配置文件等所有操作均在普通用户下进行!!!
Step1:ansible的安装
在controller下使用如下命令进行ansible的安装:
sudo yum install -y epel-release
sudo yum install -y ansible
安装后效果如下图:
Step2:在controller的用户目录下,创建文件夹ansible
使用如下命令进行文件夹的安装:
mkdir ansible
创建完成后如下图:
Step3:将/etc/ansible/ansible.cfg文件拷贝到刚刚创建的文件夹
该操作在创建的文件夹下进行,使用如下命令进行安装:
cp /etc/ansible/ansible.cfg .
注意,一定不要忘记最后的“ .”,这表明将前面的文件拷贝到当前目录下
注意,一定不要忘记最后的“ .”,这表明将前面的文件拷贝到当前目录下
注意,一定不要忘记最后的“ .”,这表明将前面的文件拷贝到当前目录下
拷贝完成后效果如下:
Step4:在该ansible文件夹下创建inventory,并写入以下内容(使用vim即可):
使用vim修改,指令为vim inventory。
[teacher]
node1
[student]
node2
创建并修改完成后的文件如下:
Step5:修改ansible.cfg配置文件(使用vim即可)
同样使用vim修改即可,指令为vim ansible.cfg。
具体修改需求如下:
inventory = /home/user/ansible/inventory 并把注释取消,注意,home后的文件夹应为进行ssh登录的用户文件夹
ask pass = False 并把注释取消
host key_checking = False 并把注释取消
remote_user = username 注意,“=”修改为实际进行ssh免密登录的用户名
[privilege_escalation] 下的注释全部取消
请注意实际的False和True,部分与原配置文件不同,需要修改后取消注释;部分相同,只需要取消注释即可。
该五行配置文件实际修改后在文件中显示如下:
四、ansible的常见临时命令
Ansible临时命令是在主控节点上执行的单个Ansible模块(例如复制文件、执行命令等)的命令行。 使用这些临时命令,可以快速执行常见操作,而不必编写Playbooks。 临时命令可以针对某些或所有主机执行,可以在远程主机上执行某些操作,也可以用来具体测试某些任务。
① ansible运行临时命令的语法为:
ansible host-pattern -m module [-a 'module arguments'] [-i inventory]
其各个元素的含义如下:
ansible
: 表示要运行Ansible命令。host-pattern
: 是目标主机的模式,可以是一个主机名、一个IP地址、一个主机组,或是一个使用通配符的主机模式。-m module
: 指定要运行的Ansible模块名称。-a 'module arguments'
: 指定要传递给模块的参数。-i inventory
: 指定Ansible要使用的inventory文件的路径。
② ansible的常见临时命令如下:
命令 | 含义 |
---|---|
ansible webserver1 -m user -a 'name=testuser password=aaa state=present' | 添加普通用户 ‘testuser’ 到主机 ‘webserver1’ 上: |
ansible webserver1 -m user -a 'name=testuser state=absent remove=yes' | 删除普通用户 ‘testuser’ 从主机 ‘webserver1’ 上 |
ansible webserver1 -m group -a 'name=testgroup state=present' | 添加用户组 ‘testgroup’ 到主机 ‘webserver1’ 上: |
ansible webserver1 -m group -a 'name=testgroup state=absent' | 删除用户组 ‘testgroup’ 从主机 ‘webserver1’ 上: |
ansible webserver1 -m apt -a 'name=nginx state=present' | 安装包 ‘nginx’ 到主机 ‘webserver1’ 上 |
ansible webserver1 -m apt -a 'name=nginx state=absent' | 卸载包 ‘nginx’ 从主机 ‘webserver1’ 上: |
ansible webserver1 -m service -a 'name=nginx state=started' | 检查主机 ‘webserver1’ 上的服务 ‘nginx’ 是否已启动 |
ansible webserver1 -m service -a 'name=nginx state=stopped' | 停止主机 ‘webserver1’ 上的服务 ‘nginx’ |
ansible webserver1 -m copy -a 'src=/src/myfile.txt dest=/tmp' | 拷贝本地文件 ‘/src/myfile.txt’ 到远程主机 ‘webserver1’ 上的目录 ‘/tmp’ |
ansible webserver1 -m command -a 'uname -a' | 执行命令 ‘uname -a’ 在主机 ‘webserver1’ 上 |
asnible all -m setup | 列出所有 Ansible 变量 |