在不同系统上使用相同的软件/组件来构建和管理分布式基础设施
在这篇文章中,我们解释了如何使用相同的软件/组件在各个系统上构建和管理分布式基础架构。
本博客是从英文版本翻译过来的。原文请点击这里查看。我们使用了部分机器翻译。如果有翻译错误,请您指出,将不胜感激。
阿里巴巴云科技分享是阿里巴巴云的激励计划,旨在鼓励在云社区内共享技术知识和最佳实践。
对于IT管理人员和DevOps工程师来说,最大的挑战是确保所有环境始终具备相同的组件,并以敏捷的方式准备环境。
根据情况而定,由于环境在地理上分散,我们需要以不影响现有基础设施的方式来部署变更,并确保满足SLO(服务水平目标)、SLI(服务水平指标)和SLA(服务水平协议)的交付。
这篇博客文章面向在IT管理领域具有一定经验或中级水平的读者。
在这里,我将回答以下问题。
-
- 構成管理とは?
-
- 構成管理を実装するには?
-
- Ansible とは何か?
-
- 構成管理で Ansible はどのように役立つか?
-
- Ansible Playbookとは何か?
-
- Ansible Playbookの書き方
-
- Ansible Playbook を使ったサーバの設定
-
- Ansible Galaxyとは?
- Ansible Galaxyを使ったサーバの設定
根据维基百科的定义,“配置管理是指在整个生命周期中确立和维护产品性能、功能、物理属性与产品要求、设计和操作信息的一致性。”
从 DevOps 的角度来看,需要确保开发环境与生产环境和用户验收测试服务器完全一致。这样可以减少因为环境不同而导致的结果差异。
开始的第一步是创建所有需求的清单。以下是清单基线文件的示例。
在清单文件中,有一些最重要的组件。
1、操作系统的名称和版本
2、Web/应用程序/数据库服务器的名称和版本
作为最佳实践,您应该保存文件的所有修订版本。您可以使用GitHub、Bitbucket、Google Drive或Alibaba云对象存储服务(OSS)。在本博客文章中,我们将使用阿里巴巴云的OSS。配置文件应小于5GB,并且由于数据传输量较少,您基本上可以自由管理文件。以下是保存在OSS上的配置文件的一个示例配置。
现在,我们已经确定了需求,接下来将使用Ansible进行自动化。Ansible是一个开源的IT自动化工具,能够提高IT基础设施的稳定性、可靠性和一致性。
为什么选择Ansible?
-
- Ansible はプッシュ技術で動作し、リモートサーバにインストールするための特別なクライアントは必要ありません。必要なのはSSH接続だけです。
-
- Ansibleには1300以上のモジュールとプラグインがあり、Webサーバ、データベースサーバ、ネットワーク、セキュリティ、docker、Kubernetes、ストレージ、ネットワーク、監視などをサポートしています。
-
- Ansibleは非常に大きなコミュニティのサポートを受けています。
-
- AnsibleはYAMLを使って入力を取得し、リモートシステムを設定しています。
-
- Ansibleには強力なオーケストレーション機能が搭載されています。VM のプロビジョニングからアプリケーションのデプロイまでをサポートしてくれます。
- Ansibleは適応が簡単です。スクリプトの作成と実行に特別なスキルは必要ありません。
前提
让我们先尝试使用 Ansible。基本要求如下所示。
1、需要一台主机系统来安装Ansible。
2、需要拥有可通过SSH访问的一台服务器(根据此博客文章的要求,有两台服务器)。
为了演示目的,我们将使用基于Ubuntu的阿里巴巴云弹性计算服务(ECS)服务器。
其他提示
在撰寫時,有些地區的默認映像可能還無法使用Ubuntu 18.04。若要準備兩台搭載Ubuntu 18.04的伺服器,您可以使用自定義映像選項來實現此目的。
-
- 在一台服务器上安装16.04版本。
-
- 将服务器升级到18.04版本。
- 服务器升级完成后,进行移动以创建镜像。
- 创建图像后,将此图像用作安装的自定义图像。
安装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 的版本是什么?
第三步:更新配置文件。
从Ansible的角度来看,主要有两个重要的配置文件。
-
- ansible.cfg はその名の通り ansible に関連するすべての設定が含まれています。
-
- hosts ファイルには、すべてのホストファイルのリストが含まれています。
- Ansible はリモートコンピュータに接続するために root ユーザを使用します。ベストプラクティスとして、ログインユーザとして root を使用するのは良くありません。
如果要在服务器配置中使用其他用户代替根用户,请更新配置文件以使用替代用户。
更新远程登录用户,需更新ansible.cfg文件中的remote_user部分。在我的情况下,用户名为alibabacloud,更新后的配置如下:
远程用户 = 阿里云
下一步是更新主机文件,但建议将服务器分组在逻辑组下。这不仅可以使系统管理更顺畅,还有助于提供高级网络分段。您可以使用域名或IP地址之一来实现主机文件的条目。以下是包含所需条目的主机文件示例。
步骤四:确认连接
执行 ping 命令,以确认连接是否正常工作。
ansible WebServer -m ping -e 'ansible_python_interpreter=/usr/bin/python3'
在添加主机之前,先执行ping。
在添加主机和用户之后执行ping命令。
在Ansible的最新版本中,需要使用Python3作为解释器,因此需要传递-e ‘ansible_python_interpreter=/usr/bin/python3’。可以通过在主机清单文件中添加python解释器变量来覆盖默认的python版本。
[WebServer:vars]
'ansible_python_interpreter=/usr/bin/python3'
步骤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,即可立即完成两个服务器的准备工作。
建议始终检查应用于Playbook的更改。要实现这一点,请使用–check参数运行Playbook。这将执行在服务器上运行脚本的干扰操作。
如果在执行脚本期间无法按照预期执行或无法获得预期结果,则可能需要对脚本进行调试。通过以 -vvvv 的方式执行脚本,可以获得详细的执行输出。这可以帮助我们找到问题所在。
Ansible 的运行方式
请看一下下面的视频。
注意: 所有在这里解释的脚本都可以从 https://github.com/ankyit/ansible-demo 访问到。
阿里巴巴云计算在日本设有两个数据中心,并拥有超过60个可用区,是2019年加特纳报告评选的亚太地区第一云基础设施服务提供商。
更多关于阿里巴巴云计算的详细信息,请点击这里。
阿里巴巴云计算日本官方页面。