Ansible纸上谈兵01:认识一下Ansible

简介: Ansible纸上谈兵01:认识一下Ansible

Why:为什么要使用Ansible


当给你6台云主机,你应该怎么去使用,或者计划如何进行统一管理,完成微服务的自动化部署?


作为一个未接触过服务集群部署的小白,第一次拿到鲲鹏的6台云主机(操作系统:OpenEuler20.03,各项软、硬件配置信息完全一致),其实是有点手足无措的。。难道还是像我们以前那样一台一台进行远程连接、配置、部署?如果只有两三台或者十来台机器,这样操作起来虽然比较繁琐但毕竟还可以接受,可以在预计的时间内完成配置与部署;可是如果集群扩大到数百台、数千台呢,若还是使用传统的运维方式就不现实了,不仅耗时费力,还容易出错。。


这里实验用的华为云鲲鹏服务器配置如下:


Huawei Kunpeng 920 2.6GHz
4vCPUs | 8GB
openEuler 20.03 64bit with ARM

共6台主机,位于北京四-鲲鹏,内网IP如下:

192.168.0.6
192.168.0.53
192.168.0.39
192.168.0.46
192.168.0.235
192.168.0.166

6台机器的分布:

image.png

市面上关于自动化的工具有不少,这里计划用几篇文章介绍下其中相对较有优势又容易上手的 Ansible


这篇文章先看下 Ansible 中的核心基础概念以及指令。


Note: 其实,很多云服务提供商的自动化部署工具、流水线等服务都是基于Ansible进行封装而开发出来的,比如我们使用的华为软开云的流水线功能,从其执行的日志的可看出,就是通过执行 PlaybookTask 一步步完成的。

image.png


What:什么是Ansible


Ansible 基于 Python 构建,是一种无需代理的自动化工具,控制端与被控端通过 SSH 协议通信完成任务执行。 Ansible 的强大之处在于它有大量的现成模块可以辅助我们实现各类简单或者复杂的操作。


Ansible官网上的模块索引

[root@ecs-kunpeng-0001 ~]# ansible-doc -l | wc -l
3681
  • 运行原理


Ansible 通过在被控端推送模块(一般是用 Python 实现),然后在被控端解析、执行这些模块来工作,这些模块临时存储在客户端节点中; Ansible 通过 SSH 协议运行这些模块,并在完成后将其删除。


  • 核心概念


  1. 控制端(Control Node):安装 Ansible 的主机称为控制端(本身也可以作为自己的被控端);只需要在控制端安装 Ansible 即可。


  1. 被控端(Managed Node):具体执行任务的主机,可以有多个被控端。


  1. 资源清单(Inventory):控制端管理的一个主机列表,默认配置在 /etc/ansible/hosts 文件中。它包含每个节点的信息,比如 IP 地址或其主机名,可进行逻辑分组(单个主机、多个主机分组),对不同的主机和不同的主机组,做不同的操作。


  1. 模块(Module):真正用于执行特定任务的基础单元,可通过 ansible-doc -l | wc -l 查看 Ansible 生态现有模块的数量。


  1. ad-hoc: 临时命令,单条指令执行,在被控端一次执行一条指令。


  1. playbook: 以YAML格式组织的指令集合,类似 Shell 脚本,在被控端一次执行多个任务;可以将 Playbook 理解为一门编程语言。


How:如何使用Ansible


  • 前提条件


  1. 在控制端与被控端都安装有Python环境;


  1. 主控端与被控端开启免密远程登录;
# 编辑/etc/hosts文件,添加集群中所有主机名
[root@ecs-kunpeng-0001 ~]# vim /etc/hosts
# 追加以下内容
192.168.0.6 control
192.168.0.53 node1
192.168.0.39 node2
192.168.0.46 node3
192.168.0.235 node4
192.168.0.166 node5
# 测试通过主机名在局域网内是否可以进行通信
[root@ecs-kunpeng-0001 ~]# ping node1
# 在控制端生成公钥与私钥
[root@ecs-kunpeng-0001 ~]# ssh-keygen -f /root/. ssh/id_rsa -N ''
# 将SSH密钥复制到局域网内的被控端主机
[root@ecs-kunpeng-0001 ~]# 
for i in node1 node2 node3 node4 node5
do
  ssh-copy-id   $i
done
# 测试是否可通过SSH免密登录
[root@ecs-kunpeng-0001 ~]# ssh node1
  • 安装Ansible

参考在华为鲲鹏openEuler20.03系统上安装Ansible


  • 配置主机清单


配置主机清单,并对其进行分组(1个控制端,3个web服务,1个数据库服务,1个缓存服务)。

# Ansible默认的配置文件位于/etc/ansible/hosts
[root@ecs-kunpeng-0001 ~]# vim /etc/ansible/hosts
# 在其中追加以下内容
[controller]
192.168.0.6
[web]
192.168.0.53
192.168.0.39
192.168.0.46
[db]
192.168.0.235
[cache]
192.168.0.166
  • 常用指令
# 列出所有主机,all是一个关键字,表示主机清单中的所有主机
[root@ecs-kunpeng-0001 ~]# ansible all --list-hosts
  hosts (6):
    192.168.0.6
    192.168.0.53
    192.168.0.39
    192.168.0.46
    192.168.0.235
    192.168.0.166
# 列出指定分组下的主机
[root@ecs-kunpeng-0001 ~]# ansible web --list-hosts
  hosts (3):
    192.168.0.53
    192.168.0.39
    192.168.0.46
# 对指定分组下的主机执行ping命令
[root@ecs-kunpeng-0001 ~]# ansible web -m ping
192.168.0.39 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.0.46 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
192.168.0.53 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
# 对所有主机执行uptime命令
[root@ecs-kunpeng-0001 ~]# ansible all -m command -a "uptime"
192.168.0.46 | CHANGED | rc=0 >>
 23:00:35 up 54 days,  7:25,  1 user,  load average: 0.00, 0.00, 0.00
192.168.0.53 | CHANGED | rc=0 >>
 23:00:35 up 54 days,  7:25,  1 user,  load average: 0.00, 0.00, 0.00
192.168.0.39 | CHANGED | rc=0 >>
 23:00:35 up 54 days,  7:25,  1 user,  load average: 0.00, 0.00, 0.00
192.168.0.6 | CHANGED | rc=0 >>
 23:00:35 up 51 days, 14:15,  5 users,  load average: 0.17, 0.17, 0.16
192.168.0.235 | CHANGED | rc=0 >>
 23:00:35 up 54 days,  7:25,  1 user,  load average: 0.00, 0.00, 0.00
192.168.0.166 | CHANGED | rc=0 >>
 23:00:36 up 54 days,  7:25,  1 user,  load average: 0.00, 0.00, 0.00
# 对指定分组下的主机执行hostname命令
[root@ecs-kunpeng-0001 ~]# ansible web -m command -a "hostname"
192.168.0.39 | CHANGED | rc=0 >>
ecs-kunpeng-0003
192.168.0.46 | CHANGED | rc=0 >>
ecs-kunpeng-0004
192.168.0.53 | CHANGED | rc=0 >>
ecs-kunpeng-0002

Note: ad-hoc命令返回信息的颜色不同,分别表示:

绿色:表示被控端没有修改;
黄色:表示被控端发生变更;
红色:表示有错误,关注提示信息;

遇到的问题:在执行每条ad-hoc命令时,每个主机会有一个警告。


[WARNING]: Platform linux on host 192.168.0.46 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See docs.ansible.com/ansible/2.9… for more information.

解决方法:有多种方法可以处理这个警告,最简单的方式是采用命令后附加参数,如下


# 附带ansible_python_interpreter参数,去掉警告信息
ansible web -m ping -e 'ansible_python_interpreter=/usr/bin/python3'


通过这篇文章,算是大概了解了 Ansible 及其特性,接下来便可以通过这个强大工具管理我们的服务集群了。



相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
缓存 Java jenkins
Ansible纸上谈兵03:Playbook上演一出好戏
Ansible纸上谈兵03:Playbook上演一出好戏
331 0
|
缓存 运维 Shell
Ansible纸上谈兵02:自动化部署时可能用到的模块
Ansible纸上谈兵02:自动化部署时可能用到的模块
184 0
|
2月前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:使用Ansible进行服务器配置管理
【10月更文挑战第34天】在现代IT基础设施的快速迭代中,自动化运维成为提升效率、确保一致性的关键手段。本文将通过介绍Ansible工具的使用,展示如何实现高效的服务器配置管理。从基础安装到高级应用,我们将一步步揭开自动化运维的神秘面纱,让你轻松掌握这一技术,为你的运维工作带来革命性的变化。
|
2月前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
1月前
|
运维 Ubuntu 应用服务中间件
自动化运维之路:使用Ansible进行服务器管理
在现代IT基础设施中,自动化运维已成为提高效率和可靠性的关键。本文将引导您通过使用Ansible这一强大的自动化工具来简化日常的服务器管理任务。我们将一起探索如何配置Ansible、编写Playbook以及执行自动化任务,旨在为读者提供一条清晰的路径,从而步入自动化运维的世界。
|
1月前
|
运维 网络安全 Python
自动化运维:使用Ansible实现批量服务器配置
在快速迭代的IT环境中,高效、可靠的服务器管理变得至关重要。本文将介绍如何使用Ansible这一强大的自动化工具,来简化和加速批量服务器配置过程。我们将从基础开始,逐步深入到更复杂的应用场景,确保即使是新手也能跟上节奏。文章将不包含代码示例,而是通过清晰的步骤和逻辑结构,引导读者理解自动化运维的核心概念及其在实际操作中的应用。
|
1月前
|
运维 Ubuntu 网络协议
自动化运维:使用Ansible进行服务器配置管理
在现代IT架构中,自动化运维已成为提升效率、减少人为错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和标准化服务器的配置管理过程。通过具体的代码示例和操作步骤,我们将展示如何快速部署应用、管理配置以及自动化日常任务,从而确保环境的一致性和可靠性。
|
2月前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
2月前
|
运维 安全 Ubuntu
自动化运维:使用Ansible进行服务器配置管理
在现代IT基础设施中,自动化运维是确保高效、稳定和安全服务的关键。本文将深入介绍如何使用Ansible这一开源工具来简化服务器配置管理工作,从基础安装到高级应用,我们将一步步展示如何通过Ansible Playbooks实现自动化部署和维护,旨在帮助读者构建更加灵活和可扩展的运维体系。
49 7
|
2月前
|
运维 Ubuntu Linux
自动化运维:使用Ansible简化日常任务
在快节奏的IT世界中,时间就是一切。本文将揭示如何通过Ansible这一强大的自动化工具来节省宝贵的时间,从而提高效率和减少人为错误。我们将深入探讨Ansible的核心概念、安装过程以及如何编写简单的playbook来自动执行常见运维任务。无论你是新手还是有经验的系统管理员,这篇文章都将为你提供实用的知识和技能,让你能够更好地控制你的服务器环境。