HCRM博客

如何使用Ansible在CentOS上进行自动化管理?

AnsiBLe在CentOS上的安装与使用

一、Ansible简介

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

1 什么是Ansible?

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

2 Ansible的优点

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

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

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

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

二、在CentOS上安装Ansible

如何使用Ansible在CentOS上进行自动化管理?-图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
上一篇
下一篇