HCRM博客

如何在CentOS上使用Ansible实现自动化管理?

Ansible在CentOS上的安装与使用

一、Ansible简介

如何在CentOS上使用Ansible实现自动化管理?-图1
(图片来源网络,侵权删除)

1 什么是Ansible?

Ansible是一款开源的自动化运维工具,用于配置管理、应用部署、任务执行和多机器的编排操作,它使用SSH协议进行远程命令执行,无需在被管理节点上安装客户端代理。

2 Ansible的优点

无代理架构:直接通过SSH协议连接远程主机,不需要在被控端安装任何软件。

声明式语言:使用YAML格式编写剧本(Playbooks),易于阅读和维护。

模块化设计:丰富的模块库,可以扩展功能。

并行执行:支持对多台机器并发执行任务,提高效率。

二、在CentOS上安装Ansible

如何在CentOS上使用Ansible实现自动化管理?-图2
(图片来源网络,侵权删除)

1 先决条件

确保系统具有互联网连接,并且具备非root用户的sudo权限。

2 安装步骤

2.2.1 启用EPEL仓库

Ansible官方软件包包含在EPEL(Extra Packages for Enterprise Linux)仓库中,因此需要先启用EPEL仓库。

  • sudo dnf install https://dl.fedoraproject.org/pub/epel/epelreleaselatest8.noarch.rpm y

2.2.2 安装Ansible

  • sudo dnf install ansible y

2.2.3 验证安装

  • ansible version

输出示例:

  • ansible 2.9.x
  • config file = None
  • configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  • ansible python module location = /usr/lib/python3.8/sitepackages/ansible
  • executable location = /usr/bin/ansible
  • python version = 3.8.x (default, Nov 1 2023, 00:00:00) [GCC]

三、配置Ansible主机清单

1 创建主机清单文件

Ansible通过一个静态的主机清单文件来管理多个主机,该文件通常位于/etc/ansible/hosts

  • [webservers]
  • 192、168.1.10
  • 192、168.1.11
  • [dbservers]
  • 192、168.1.12
  • 192、168.1.13

2 生成SSH密钥并分发

为了实现免密登录,需要在所有目标主机上分发Ansible服务器的SSH公钥。

  • 在Ansible服务器上生成SSH密钥对
  • sshkeygen
  • 将公钥复制到目标主机
  • sshcopyid user@192.168.1.10
  • sshcopyid user@192.168.1.11
  • sshcopyid user@192.168.1.12
  • sshcopyid user@192.168.1.13

四、基本使用

1 检查主机连通性

使用ping模块测试Ansible服务器与目标主机的网络连通性。

  • ansible all m ping

输出示例:

  • 192、168.1.10 | SUCCESS => {
  • "changed": false,
  • "ping": "pong"
  • }
  • 192、168.1.11 | SUCCESS => {
  • "changed": false,
  • "ping": "pong"
  • }

2 运行简单命令

使用command模块在目标主机上执行命令,查看所有Web服务器的内核版本。

  • ansible webservers m command a "uname r"

输出示例:

  • 192、168.1.10 | CHANGED | rc=0 >>
  • 4、15.074generic
  • 192、168.1.11 | CHANGED | rc=0 >>
  • 4、15.074generic

3 复制文件到远程主机

使用copy模块将文件从控制节点复制到远程主机,将本地的/tmp/example.txt文件复制到所有数据库服务器的/tmp/目录下。

  • ansible dbservers m copy a "src=/tmp/example.txt dest=/tmp/"

输出示例:

  • 192、168.1.12 | CHANGED | rc=0 >>
  • 192、168.1.13 | CHANGED | rc=0 >>

4 安装软件包

使用yum模块在所有Web服务器上安装nginx

  • ansible webservers m yum a "name=nginx state=present"

输出示例:

  • 192、168.1.10 | CHANGED | rc=0 >>
  • 192、168.1.11 | CHANGED | rc=0 >>

五、高级用法及最佳实践

5.1 使用Playbooks进行复杂任务编排

Playbooks是Ansible用来编排多个任务的文件,使用YAML格式编写,创建一个名为websetup.yml的Playbook,用于配置Web服务器。

  • name: Setup Web Servers
  • hosts: webservers
  • tasks:
  • name: Ensure nginx is installed
  • yum:
  • name: nginx
  • state: present
  • notify: Start Nginx
  • name: Start and enable Nginx service
  • service:
  • name: nginx
  • state: started
  • enabled: yes
  • handlers:
  • name: Start Nginx
  • service:
  • name: nginx
  • state: restarted

执行Playbook:

  • ansibleplaybook i /etc/ansible/hosts websetup.yml

2 使用角色组织Playbooks

角色是Playbooks的进一步抽象,允许你将被复用的代码组织在一起,创建一个名为webserver的角色。

  • 创建角色目录结构
  • mkdir p roles/webserver/tasks
  • 创建main.yml文件定义任务
  • vim roles/webserver/tasks/main.yml

编辑main.yml文件:

  • name: Install Nginx
  • yum:
  • name: nginx
  • state: present

然后在Playbook中使用该角色:

  • name: Provision Web Servers with a role
  • hosts: webservers
  • roles:
  • webserver

执行Playbook:

  • ansibleplaybook i /etc/ansible/hosts playbook_with_roles.yml

3 使用变量和Facts管理动态数据

Ansible允许使用变量和Facts来管理动态数据,可以在Playbooks或Inventory文件中定义变量,定义一个变量来存储Nginx的版本号。

  • name: Install specific version of Nginx using variable
  • hosts: webservers
  • vars:
  • nginx_version: "1.20.11~stretch"
  • tasks:
  • name: Ensure specific version of Nginx is installed
  • apt:
  • name: "nginx={{ nginx_version }}"
  • state: present

使用Facts获取有关远程主机的信息,获取所有主机的内存信息:

  • ansible all m command a "free m" o json | jq '.' > facts.json

六、常见问题及FAQs

6.1 问题一:如何修改Ansible的配置文件?

Ansible的配置文件通常位于/etc/ansible/ansible.cfg~/.ansible.cfg,可以使用文本编辑器打开并进行修改,例如设置默认的Inventory文件路径

  • [defaults]
  • inventory = /etc/ansible/hosts

6.2 问题二:如何在Ansible中处理密码提示?

对于需要密码的操作,可以使用askbecomepass选项手动输入密码,或者在受限环境下使用Vault加密敏感数据。

  • ansibleplaybook i /etc/ansible/hosts playbook.yml askbecomepass askvaultpass

本站部分图片及内容来源网络,版权归原作者所有,转载目的为传递知识,不代表本站立场。若侵权或违规联系Email:zjx77377423@163.com 核实后第一时间删除。 转载请注明出处:https://blog.huochengrm.cn/pc/20076.html

分享:
扫描分享到社交APP
上一篇
下一篇