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上演一出好戏
325 0
|
缓存 运维 Shell
Ansible纸上谈兵02:自动化部署时可能用到的模块
Ansible纸上谈兵02:自动化部署时可能用到的模块
177 0
|
14天前
|
运维 应用服务中间件 网络安全
自动化运维的新篇章:使用Ansible进行服务器配置管理
【10月更文挑战第34天】在现代IT基础设施的快速迭代中,自动化运维成为提升效率、确保一致性的关键手段。本文将通过介绍Ansible工具的使用,展示如何实现高效的服务器配置管理。从基础安装到高级应用,我们将一步步揭开自动化运维的神秘面纱,让你轻松掌握这一技术,为你的运维工作带来革命性的变化。
|
1月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
165 64
|
10天前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
1月前
|
运维 负载均衡 应用服务中间件
自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第34天】在现代IT运维工作中,自动化已成为提升效率、减少错误的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置管理工作。我们将通过实际案例展示如何利用Ansible的Playbooks来自动化常见任务,并讨论其对提高运维团队工作效率的影响。
|
1月前
|
运维 应用服务中间件 网络安全
自动化运维:使用Ansible进行批量服务器配置
【9月更文挑战第35天】在现代IT基础设施管理中,高效、可扩展的自动化工具是提升工作效率的关键。本文将引导您了解如何使用Ansible这一强大的自动化工具来简化和加速服务器的配置过程,确保一致性和可靠性的同时减少人为错误。通过实际案例,我们将展示如何编写Ansible Playbook以实现批量服务器配置,从而让您能够更加轻松地管理和维护您的服务器群。
|
13天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
33 4
|
11天前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible在配置管理中的应用
【10月更文挑战第37天】本文将深入探讨如何利用Ansible简化和自动化复杂的IT基础设施管理任务。我们将通过实际案例,展示如何用Ansible编写可重用的配置代码,以及这些代码如何帮助运维团队提高效率和减少人为错误。文章还将讨论如何构建Ansible playbook来自动部署应用、管理系统更新和执行常规维护任务。准备好深入了解这个强大的工具,让你的运维工作更加轻松吧!
27 2
|
12天前
|
运维 Devops 应用服务中间件
自动化运维的利器:Ansible实战指南
【10月更文挑战第36天】在快速迭代的数字时代,自动化运维成为提升效率、减少错误的关键。Ansible以其简洁性、易用性和强大的功能脱颖而出。本文将带你了解Ansible的核心组件,通过实际案例深入其应用,并探讨如何结合最佳实践优化你的自动化工作流程。无论你是新手还是有经验的运维人员,本指南都将为你提供宝贵的知识和技能。