在不同系统上使用相同的软件/组件来构建和管理分布式基础设施

在这篇文章中,我们解释了如何使用相同的软件/组件在各个系统上构建和管理分布式基础架构。

本博客是从英文版本翻译过来的。原文请点击这里查看。我们使用了部分机器翻译。如果有翻译错误,请您指出,将不胜感激。

阿里巴巴云科技分享是阿里巴巴云的激励计划,旨在鼓励在云社区内共享技术知识和最佳实践。

对于IT管理人员和DevOps工程师来说,最大的挑战是确保所有环境始终具备相同的组件,并以敏捷的方式准备环境。

根据情况而定,由于环境在地理上分散,我们需要以不影响现有基础设施的方式来部署变更,并确保满足SLO(服务水平目标)、SLI(服务水平指标)和SLA(服务水平协议)的交付。

这篇博客文章面向在IT管理领域具有一定经验或中级水平的读者。

在这里,我将回答以下问题。

    • 構成管理とは?

 

    • 構成管理を実装するには?

 

    • Ansible とは何か?

 

    • 構成管理で Ansible はどのように役立つか?

 

    • Ansible Playbookとは何か?

 

    • Ansible Playbookの書き方

 

    • Ansible Playbook を使ったサーバの設定

 

    • Ansible Galaxyとは?

 

    Ansible Galaxyを使ったサーバの設定

根据维基百科的定义,“配置管理是指在整个生命周期中确立和维护产品性能、功能、物理属性与产品要求、设计和操作信息的一致性。”

从 DevOps 的角度来看,需要确保开发环境与生产环境和用户验收测试服务器完全一致。这样可以减少因为环境不同而导致的结果差异。

开始的第一步是创建所有需求的清单。以下是清单基线文件的示例。

image.png

在清单文件中,有一些最重要的组件。

1、操作系统的名称和版本
2、Web/应用程序/数据库服务器的名称和版本
作为最佳实践,您应该保存文件的所有修订版本。您可以使用GitHub、Bitbucket、Google Drive或Alibaba云对象存储服务(OSS)。在本博客文章中,我们将使用阿里巴巴云的OSS。配置文件应小于5GB,并且由于数据传输量较少,您基本上可以自由管理文件。以下是保存在OSS上的配置文件的一个示例配置。

image.png

现在,我们已经确定了需求,接下来将使用Ansible进行自动化。Ansible是一个开源的IT自动化工具,能够提高IT基础设施的稳定性、可靠性和一致性。

为什么选择Ansible?

    • Ansible はプッシュ技術で動作し、リモートサーバにインストールするための特別なクライアントは必要ありません。必要なのはSSH接続だけです。

 

    • Ansibleには1300以上のモジュールとプラグインがあり、Webサーバ、データベースサーバ、ネットワーク、セキュリティ、docker、Kubernetes、ストレージ、ネットワーク、監視などをサポートしています。

 

    • Ansibleは非常に大きなコミュニティのサポートを受けています。

 

    • AnsibleはYAMLを使って入力を取得し、リモートシステムを設定しています。

 

    • Ansibleには強力なオーケストレーション機能が搭載されています。VM のプロビジョニングからアプリケーションのデプロイまでをサポートしてくれます。

 

    Ansibleは適応が簡単です。スクリプトの作成と実行に特別なスキルは必要ありません。

前提

让我们先尝试使用 Ansible。基本要求如下所示。

1、需要一台主机系统来安装Ansible。
2、需要拥有可通过SSH访问的一台服务器(根据此博客文章的要求,有两台服务器)。

image.png

为了演示目的,我们将使用基于Ubuntu的阿里巴巴云弹性计算服务(ECS)服务器。

其他提示

在撰寫時,有些地區的默認映像可能還無法使用Ubuntu 18.04。若要準備兩台搭載Ubuntu 18.04的伺服器,您可以使用自定義映像選項來實現此目的。

    1. 在一台服务器上安装16.04版本。

 

    1. 将服务器升级到18.04版本。

 

    服务器升级完成后,进行移动以创建镜像。
image.png
    创建图像后,将此图像用作安装的自定义图像。
image.png

安装Ansible

步骤1:安装Ansible(在主机系统上/Ansible系统上)。

由于Ansible不是一个直接可用的软件包,所以可能需要安装Ansible的ppa。请执行以下命令。

sudo apt-get update
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible

步骤2:验证版本(请测试是否正常运行)

Ansible 的版本是什么?

image.png

第三步:更新配置文件。

从Ansible的角度来看,主要有两个重要的配置文件。

    • ansible.cfg はその名の通り ansible に関連するすべての設定が含まれています。

 

    • hosts ファイルには、すべてのホストファイルのリストが含まれています。

 

    Ansible はリモートコンピュータに接続するために root ユーザを使用します。ベストプラクティスとして、ログインユーザとして root を使用するのは良くありません。

如果要在服务器配置中使用其他用户代替根用户,请更新配置文件以使用替代用户。

更新远程登录用户,需更新ansible.cfg文件中的remote_user部分。在我的情况下,用户名为alibabacloud,更新后的配置如下:

远程用户 = 阿里云

image.png

下一步是更新主机文件,但建议将服务器分组在逻辑组下。这不仅可以使系统管理更顺畅,还有助于提供高级网络分段。您可以使用域名或IP地址之一来实现主机文件的条目。以下是包含所需条目的主机文件示例。

image.png

步骤四:确认连接

执行 ping 命令,以确认连接是否正常工作。

ansible WebServer -m ping -e 'ansible_python_interpreter=/usr/bin/python3'

在添加主机之前,先执行ping。

image.png

在添加主机和用户之后执行ping命令。

image.png

在Ansible的最新版本中,需要使用Python3作为解释器,因此需要传递-e ‘ansible_python_interpreter=/usr/bin/python3’。可以通过在主机清单文件中添加python解释器变量来覆盖默认的python版本。

[WebServer:vars]
'ansible_python_interpreter=/usr/bin/python3'
image.png

步骤5:更新远程服务器

如果连接测试成功,我们将应用第一个基本命令来更新远程服务器。

ansible WebServer -m apt -a "upgrade=yes update_cache=yes" -b

在这里,我们定义了一个模块-m。为了演示,所有的服务器都是基于Ubuntu的,如果系统是基于Debian的,我们将使用”apt”而不是”apt”,将其更换为“deb”。如果系统的基础是CentOS,则将其替换为“yum”,如果是基于Fedora的,则替换为“dnf”。

-a 是模块的参数,-b 表示作为超级用户执行命令。

升级=yes 表示系统升级。如果需要升级发行版,则需要使用 upgrade=dist 命令。

update_cache=yes 相当于 apt-get update 命令。

您可以在Ansible模块页面上找到Ansible的所有模块列表。

步骤5:Ansible的剧本

无论逐个执行命令还是执行预定义的Shell脚本或Ansible脚本,都没有区别。通过在远程服务器上执行Ansible playbook,您可以将所需的所有步骤(任务)集中到一个文件中,从而解决这个问题。

脚本使用YAML文件编写,并使用与前一步骤中执行的相同的命令。

在ECS服务器上安装Web服务器。

为了更方便和易于理解,设置Web服务器需要多个步骤。让我们一步一步地进行。

创建用于安装服务器的YAML文件,并确认服务正在运行。

---
- hosts: WebServer
  tasks:
    - name: Install NginX
      apt: name=nginx state=latest
    - name: Start NginX Service
      service:
          name: nginx
          state: started

在上述脚本中,以下任务将在所有定义在WebServer下的主机上执行。

任务1:安装最新版本的NginX服务器

任务2:启动Nginx

默认的网站页面展示

现在,我们已经安装了Web服务器,接下来将展开默认的网站。在这篇博客文章中,我们将修改现有的播放书,并在服务器上展开静态的网页。

      - name: "HTML Test Deploy"
        become: true
         syncronize:    
           dest: /var/www/html
           src: ../default-site/

在上述情况下,Ansible的播放书将把/default-site文件夹与目标/var/www/html同步。

您可以通过 https://github.com/ankyit/ansible-demo/blob/master/install-nginx.yml 访问到完整的脚本内容。

假设有多个服务器,并且需要同时设置这两个服务器。要实现这一点,您可以将新的服务器条目添加到清单文件中,并运行ansible-playbook,即可立即完成两个服务器的准备工作。

image.png
image.png
image.png

建议始终检查应用于Playbook的更改。要实现这一点,请使用–check参数运行Playbook。这将执行在服务器上运行脚本的干扰操作。

如果在执行脚本期间无法按照预期执行或无法获得预期结果,则可能需要对脚本进行调试。通过以 -vvvv 的方式执行脚本,可以获得详细的执行输出。这可以帮助我们找到问题所在。

Ansible 的运行方式

请看一下下面的视频。

注意: 所有在这里解释的脚本都可以从 https://github.com/ankyit/ansible-demo 访问到。

阿里巴巴云计算在日本设有两个数据中心,并拥有超过60个可用区,是2019年加特纳报告评选的亚太地区第一云基础设施服务提供商。
更多关于阿里巴巴云计算的详细信息,请点击这里。
阿里巴巴云计算日本官方页面。