在今天的文章中,我将一步一步地介绍如何使用 Ansible 来自动化部署 Elastic Stack。对于对 Ansible 还不是很熟的开发者来说,可以通过本教程对 Ansible 有一个初步的了解。
什么是 Ansible?
Ansible 是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible 是基于 paramiko 开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是 ansible 所运行的模块,ansible 只是提供一种框架。ansible 不需要在远程主机上安装 client/agents,因为它们是基于 ssh 来和远程主机通讯的。ansible 目前已经已经被红帽官方收购,是自动化运维工具中大家认可度最高的,并且上手容易,学习简单。是每位运维工程师必须掌握的技能之一。
在今天的实验中,我将使用一个本地的 Mac OS 及一个 本地的 Ubuntu OS 20.04 来进行展示。在实际的使用中,你可以使用云上的服务器来进行操作,虽然部署稍微有所不同。
我将在 Mac OS 上安装 Ansible。我将使用 Ansible 通过远程将 Webserver, Elasticsearch 及 Kibana 部署到 Ubuntu OS 机器上。
安装 Ansible
在 Mac OS 上安装 Ansible 非常之简单。我们首先必须安装 Python,然后我们可以使用如下的命令来进行安装:
pip3 install ansible
等安装过后,我们可以使用如下的命令来查看 ansible 的帮助信息:
ansible --help
建立 ssh 连接
远程安装是使用 ssh 实现的。为了能够使得 ansible 能够正常工作,我们必须把本地的 ssh 的证书拷贝到远程的机器上, 这样使得在通信的时候,不再需要密码。针对一些云平台,我们可以把本地 ansible 的机器的证书复制到相关的配置即可。如果你还没有自己的 ssh 配置,请在你的机器上按照如下的步骤来生成证书。针对我的情况,我在 MacOS 机器上先使用如下的命令来生产 ssh 证书:
ssh-keygen
上面的命令将在本机的 .ssh 目录中生成如下的证书:
-
$
pwd
-
/Users/liuxg/.ssh
-
$
ls
-
id_rsa.pub id_rsa
在上面,我们可以看到新生成的 id_rsh.pub 以及 id_rsa 证书。其中 id_rsh.pub 是公钥证书。我们使用如下的命令把该证书拷贝到 Ubuntu OS 的机器中:
ssh-copy-id remote_user@remote_IP
针对我的情况:
ssh-copy-id liuxg@ubuntu
在上面, liuxg 是我在 Ubuntu OS 上的账号。
-
$ ssh-copy-id liuxg@ubuntu
-
/usr/bin/ssh-copy-id: INFO: attempting to log in
with the
new
key(s),
to filter
out
any that
are already installed
-
/usr/
bin/ssh-copy-
id: INFO:
1
key(s) remain
to be installed
-- if you are prompted now it is to install the new keys
-
liuxg@ubuntu
's password:
-
-
Number of key(s) added: 1
-
-
Now try logging into the machine, with: "ssh 'liuxg@ubuntu
'"
-
and check to make sure that only the key(s) you wanted were added.
通过上面的命令,我们可以在 Ubuntu OS 的 .ssh 目录中查看大如下的一个叫作 authorized_keys 的文件:
-
$ cd .ssh
-
$ pwd
-
/home/liuxg/.ssh
-
liuxg@liuxgu
:~/.ssh$ ls
-
authorized_keys id_rsa.pub id_rsa
可以打开这个文件。你可以看到它和在 Mac OS 里的 id_rsa.pub 里的内容是完全一样的。这说明 Mac OS 上的证书已经被成功拷贝过来了。
紧接着,我们在 Mac OS 机器上打入如下的命令:
ssh liuxg@ubuntu
从上面我们可以看出来,我们没有输入任何的密码就可以直接登录 Ubuntu OS 的机器了。这说明我们的配置是成功的。
小试牛刀 - 部署一个 Webserver
在这节中,我们将使用 ansible 从 MacOS 部署一个 apache 的 Webserver 到 Ubuntu 机器中。
对于 ansible 还不是很熟的开发者来说,我们先来部署一个简单的 Webserver 来熟悉一下 ansible 的部署。首先我们创建一个如下的目录:
-
cd
-
mkdir -p ansible/elasticsearch
-
cd ansible/elasticsearch
在上面,我们在用户的 home 目录中创建一个叫做 ansible/elasticsearch 的目录。这个目录就是我们的 elasticsearch 项目的工作目录。在这个目录下,我们先创建一个叫做 inventory 的子目录,并在这个目录下创建一个叫做 hosts.yml 的文件。hosts.yml 文件的内容如下:
-
[elk]
-
192
.168
.0
.4
-
-
[webservers]
-
192
.168
.0
.4
-
-
[all]
-
192
.168
.0
.4
在上面,你可以依据自己的配置修改上面的 IP 地址。如上图所示,我将部署 ELK 到 elk 所描述的服务器上,同时,我将部署 Webserver 到 webservers 所表示的服务器上。如果我们想把一个配置部署到所有的机器上,我们可以选择 all。这里的服务是一个列表,我们可以添加更多的服务器单上面的列表中。
我们同时也在 elasticsearch 目录下创建另外两个子目录:playbooks 及 roles:
-
$
pwd
-
/Users/liuxg/ansible/elasticsearch
-
$
ls
-
inventory playbooks roles
接下来,我们进入 roles 目录,并打入如下的命令:
-
$
pwd
-
Users/liuxg/ansible/elasticsearch/roles
-
$
ansible-galaxy init webserver
这样在 roles 目录下就生产了一个叫做 webserver 的子目录:
在 webserver 的目录中,它创建了一个模板目录及文件。我们打开 files 子目录,并创建一个如下的文件:
index.html
-
<html>
-
<body>
-
<h1>This is a sample web page
</h1>
-
</body>
-
</html>
上面的 index.html 文件就是将来我们在 apache 服务器启动后所需要展示的文件。接下来,我们打开 tasks 文件目录:
我们打开 main.yml 文件,并输入如下的内容:
main.yml
-
---
-
# tasks file for webserver
-
-
-
name:
install
apache2
-
apt:
-
name:
apache2
-
state:
latest
-
update_cache:
yes
-
-
-
name:
deploy
index.html
-
copy:
-
src:
index.html
-
dest:
/var/www/html/index.html
-
-
-
name:
starting
apache2
-
service:
-
name:
apache2
-
state:
started
-
enabled:
yes
如上所示,在 main.yml 文件中,我们创建了三个 task。在上面的 name 中它显示了任务的内容。这个名字是描述性的,供我们自己参考。在每个 task 下面,有执行的命令。这些命令组成了需要完成的功能。在上面,我们做了三件事:
- 安装最新的 apache2
- 把本地的 index.html 文件拷贝到目标机器的相应目录中
- 启动 apache 服务,从而使得 web server 正常工作
接下来,我们在 playbooks 目录下创建一个叫做 deploy-webserver.yml 的文件:
deploy-webserver.yml
-
---
-
# This playbook will deploy webserver
-
-
hosts:
webservers
-
become:
yes
-
roles:
-
-
../roles/webserver
如上所示,我们将把 webserver 部署到 webservers 所描述的服务器中。这些 webservers 是我们在之前介绍的 inventory/hosts.yml 中描述的。这个 playbook 将使用 roles/webserver 角色。
接下来,我们使用如下的命令来部署 webserver:
ansible-playbook -K -i inventory/hosts.yml playbooks/deploy-webserver.yml
请注意在上面我们使用 -K 参数。这个是因为在远程机器 Ubuntu OS 上,安装时需要我们提供 sudo 命令的密码才可以完成。如果你想不输入密码,你可以参考文章 “How to set and use sudo password for Ansible Vault”。
上面命令的显示结果为:
上面显示所有的命令运行是成功的。
我们可以在 MacOS 电脑的浏览器中打入如下的命令来检查我们的 apache 服务器是否已经安装成功了 http://ubuntu:80:
上面显示我们的 apache 服务器已经完全成功了。通过这个简单的教程,我们了解了如何使用 ansible 来进行远程部署。
到目前为止,我们已经成功地部署了一个 webserver。我们回顾一个整个步骤:
- 安装 ansible
- 创建 hosts.yml 文件
- 创建 roles,并更新 tasks
- 创建 playbook
- 部署
在接下来教程中,我们将按照上面的步骤来分别安装 Elasticsearch。请阅读文章 “如何使用 Ansible自动化部署 Elastic Stack (二)”。
参考:
【1】elastic/ansible-elasticsearch
转载:https://blog.csdn.net/UbuntuTouch/article/details/113067307