用中文将以下内容进行改写(仅需一种选项):Ansible是一种配置管理工具的目标-了解Ansible的最快途径即是引入

首先

本文旨在以基础设施工程师的视角,快速理解构建管理工具的目的和引入过程,以实现Ansible的目标。

另外,文明落后的SI行业中,系统基础设施的建设大致情况如下。

【目前情况】

    1. 根据设计书,创建参数表(Excel)和建设步骤手册(Excel或Word)。

 

    1. 在参考建设步骤手册的同时,执行建设工作(※1)。

 

    在运营开始后,如果发生设置更改,请在参数表(Excel)中记录更改历史。

(※1)中文领域没有构成管理工具。(虽然相同的SI可能会使用,但在像政府部门这样的遗留系统中几乎没有)最多只能用TeraTerm进行广播,并运行编写好的脚本命令。其他必要的资料如conf文件则可以通过WinSCP进行传送。

【问题点】的中文释义是什么?

    • ドキュメント作成に時間がかかる(構築手順やパラメータの妥当性確認及び、表紙、改版履歴、誤字脱字、表記ゆれ、印刷設定、PDFでの見切れチェック等体裁を整えるための作業に時間がかかる)

 

    • 大量構築時に、同じことの繰り返しの場合、指数法則的に時間がかかる

 

    • 構築時に手入力した場合のオペミス発生のリスク

 

    ドキュメントと実機の整合性確保(運用開始後に実機の設定値を変更したら、全てのドキュメントに横展開が必要(※2))

(※2) 由于SI行业是以文档为重,所以在确认服务器设置时,首先要检查分散的文档信息。如果文档的设定值存在问题,就需要检查服务器的设置。因此,如果文档有错误导致质量受到质疑,就常常需要全面检查服务器的设置。换句话说,只是开发而不认真进行维护,则会让从搭建到运营等所有相关人员陷入不幸的境地。

对于Web行业的人来说,我认为他们可能不知道在说什么,但这不是虚构的,而是SI行业的悲惨现实。DevOps和数字化转型之类的词语不存在。

实际情况是,与操作服务器所花费的时间相比,与Excel或Word战斗的时间要长得多。

构建管理工具

构成管理工具的目的

我们来思考一下构成管理工具的目标。

基础设施管理人员的最主要目标是通过提高效率来节省时间。这一点在网络行业和系统集成行业都是不变的。通过引入配置管理工具,我们可以获得以下好处。

Ansible_image.png
    • インフラ構築として、特にOS及びMWに係る作業時間が、劇的に短縮される

 

    • ドキュメントに対する文化の革命をもたらし、ドキュメントと言われていたものを駆逐することで、新たな価値を提供するための時間が手に入る(構成管理ツールの設定ファイルがドキュメントの役割を持つ)

 

    • 構成管理ツールの設定ファイルに、コメントを入れることで、変更履歴が管理できる

 

    構成管理ツールの設定ファイルを流用することで、一定の品質確保や属人化の排除により、誰が作っても同じサーバを構築することができる

因此,通过引入配置管理工具,它本身就代表了文档和手册的含义。相反,当系统配置变得复杂并变成黑盒子时,可能会变得僵化。

因此,只有明确構成管理工具的目的,理解和預測它的好處和運作流程,才能最大限地發揮其效益。

另外,通过引入配置管理工具,似乎不需要参数表格或操作手册等文件,但考虑到业务连续性计划(BCP),需要考虑将与运营相关的文件进行文档化。以运营过程被个人化且该个人离职为例,我们应该思考明确化并整备文件,以便传递工匠技能,从而减少在事故发生时的风险。

此外,当发生关乎任务成功的重大事故时,人类能否冷静地做出判断并执行操作呢?为了制定不得中断的系统并最大程度地考虑业务影响,我认为对相关操作的文件化是必要的。

在SI行业中唯一值得评价的地方是考虑了这一点并进行了设计。

构成管理工具的种类

除了Ansible之外,还有以下工具可以用于配置管理。
需要注意的是,在当今所说的配置管理工具中,有一些工具是用于自动安装的,而克隆工具是不同的(例如Norton Ghost和Clonezilla等)。

構成管理ツール概要Kickstart自動インストール(RHEL系)Preseed自動インストール(Debian GNU/Linux系)PuppetRubyで記述されたサーバ、クライアント型アプリケーションFAI自動インストール(Debian GNU/Linux系)ChefRubyで記述されたサーバ、クライアント型アプリケーション

Ansible简介

Ansible是由RedHat开发的开源配置管理工具。
它有两个版本:社区版和RedHat支持的企业版。在企业版的Ansible Tower中,可以使用Web浏览器的GUI进行操作。

Ansible的特点是可以自动化处理与IT基础设施相关的各种任务。虽然有人称之为配置管理工具,也有人称之为自动化软件,但本文将将其视为配置管理工具来处理。

スクリーンショット 2019-01-21 00.59.43.png

架构

Ansible_image2.png

Ansible 设计时确保了冪等性。
它不是针对管理目标服务器进行“执行什么”的描述,而是描述目标服务器应具备的“状态应该是怎样的”。

エージェントレスなため、基本的にPythonが使用可能でSSHの通信ができればよい
Ansibleにおける一連の処理はPlaybookという単位にまとめられ、PlaybookはYAML形式で記述される
モジュールにより、AWS/Azure/GCP/OpenStackをはじめとするクラウド関連モジュール等の拡張が可能

対応OS

Red Hat Enterprise Linux
CentOS
Debian
Ubuntu
FreeBSD
Mac OS X
ネットワーク機器(Cisco IOS等)

YAML (YAML Ain’t Markup Language)

YAML是一种类似于JSON的数据格式之一。
通过缩进来表示层次结构,并将对象序列化为字符串进行写入。

优点/缺点

优点

    • Chef等他の構成管理ツールでは、独自記述言語を採用しているため学習コストが高いが、AnsibleではYAMLを使用しているので導入が容易

 

    • モジュールによる拡張がしやすい。利用できるモジュールは公式サイトで確認できる

 

    既存の資産(シェルスクリプト)も流用できるので、スモールスタートできる

缺点

    他の構成管理ツールと比較すると、複雑な処理を表現しにくいという面があり、「多段の条件分岐」「反復構造」を記述する場合には、複雑な表記になりやすい

引入Ansible

可以在各种Linux发行版上安装Ansible。
本文介绍了在macOS和Linux(Centos)上安装的步骤。

苹果操作系统

在macOS系统中,需要先安装Homebrew作为前提条件。
请使用Homebrew运行以下命令。

在本地安装ansible

在安装完成后,使用ansible命令进行操作确认。
在以下情况下,使用“-m”来指定模块,并使用“-a”来指定模块的参数。
值得注意的是,shell模块会根据名称在/bin/sh上执行给定参数的命令。

使用Ansible在本地执行命令”hostname”。

 [WARNING]: Unable to parse /etc/ansible/hosts as an inventory source

 [WARNING]: No inventory was parsed, only implicit localhost is available

 [WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match
'all'

localhost | CHANGED | rc=0 >>
ホスト名

如果没有初始的库存文件,将显示警告。
因此,我们会创建一个名为”/etc/ansible/hosts”的库存文件。

创建一个名为/etc/ansible/的目录。
进入/etc/ansible/目录。
使用sudo命令打开hosts文件。

在企业中,库存文件可以通过定义组来进行管理。在组的下面,使用IP地址或者主机名来描述需要管理的主机。接着,在主机后面可以添加一些选项进行描述。

在以下情况下,[localhost]代表已安装Ansible的Mac本机,[web]代表在Mac的Virtualbox上创建的虚拟机。值得注意的是,ansible_connection选项提供了有关连接到目标主机的连接方式的信息。

    /etc/ansible/hosts
[localhost]
127.0.0.1 ansible_connection=local

[web]
192.168.N.N

再次执行将取消警告。

127.0.0.1 | CHANGED | rc=0 >>
ホスト名

接下来,我们将创建一个playbook。
playbook需要以YAML格式进行描述,所以请注意缩进。

以下是一个示例,作为验证,在Mac的VirtualBox上创建的虚拟机上安装Apache。

请在终端中输入sudo vi playbook.yml

    playbook.yml
- hosts: web
  tasks:
    - name: install package
      yum:
        name: httpd
        state: latest

    - name: start service
      systemd:
        name: httpd
        state: started
        enabled: yes

执行ansible-playbook命令。
使用-i参数指定包含清单的文件,-u参数指定用户,-k参数在执行命令时启动密码输入提示。

ansible-playbook -i hosts -u root -k playbook.yml:
使用ansible-playbook命令执行playbook.yml文件,主机为hosts,用户名为root,需要输入密码。

SSH password: 

PLAY [web] ***************************************************************************************************************

TASK [Gathering Facts] ***************************************************************************************************
ok: [192.168.N.N]

TASK [install package] ***************************************************************************************************
changed: [192.168.N.N]

PLAY RECAP ***************************************************************************************************************
192.168.N.N            : ok=2    changed=1    unreachable=0    failed=0 

为了确保冪等性,Ansible在任务(TASK)没有改变时显示”OK”,在任务有变化时显示”changed”。

    リモートホストの実行結果
RECAP意味ok定義された状態となっているchanged定義された状態に変更が行われたunreachableリモートホストへの接続に失敗したfailedタスクの実行に失敗(エラー)

Linux(CentOS)可以用汉语表达为”Linux系统(CentOS版本)”。

在Linux(CentOS)中,您可以使用以下命令进行安装。

使用yum命令安装并且确认epel-release和ansible:
yum -y安装epel-release
yum -y安装ansible

库存和playbook的创建步骤是相同的。
另外,如果您没有进行过SSH连接,会显示以下消息。
在这种情况下,通过进行SSH连接可以创建“~/.ssh/known_hosts”文件,并且可以进行SSH连接。

TASK [Gathering Facts] ***************************************************************************************************
fatal: [192.168.N.N]: FAILED! => {"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."}
    to retry, use: --limit @/root/playbook.retry

提示 (Tí Shì)

执行ansible-playbook命令

    • 構文チェック

 

    • ansible-playbook -i hosts playbook.yml –syntax-check

実行されるタスクの一覧を表示
ansible-playbook -i hosts playbook.yml –list-tasks

verboseオプション(-vvv)で詳細情報の表示及び、実行結果をJSONで返す
ansible-playbook -i hosts -u root -k playbook.yml -vvv

ansible-doc命令

    • モジュール確認

 

    ansible-doc -l

其他

    • 複数のファイルに分けたタスクを一つにまとめる場合は、”include”という記法を使う

 

    Ansible Containerを使用してコンテナを作成することができる

应用

    • 障害検知した場合、Ansibleを起動して、障害発生時の一時対応自動化

 

    • AnsibleとTerraformの両立(インスタンスの追加及び削除等リソースの構築はTerraformで行う)

 

    Serverspecを使ってテストの自動化

最后

以下是有关Ansible的总结。

Ansible可以根据系统逐渐实现自动化,从小范围开始。然而,在进行自动化时,会出现新的问题,如确认Playbook的合理性和在工具执行后查看服务器日志等。换句话说,这涉及到确保质量问题,但这是关于持续集成的话题,我们将在下次讨论。

Ansible_image3.png

通过引入Ansible,过去被视为常识的基础架构操作手册和参数表将被编码化,而基础架构工程师的工作流程和方法将发生180度的变化。

就像在工业革命中,蒸汽机的发展一样,最近几年来,基础设施领域正通过集装箱技术和配置管理工具等自动化技术而发生了重大变革。

然而,在SI行业的一个角落中,系统仍然是以绝对的瀑布模式开始,采用传统的开发方法进行构建和运维。

由于处于这种情况下,为了不被时代抛弃,我将学习自动化。

请提供更多上下文。

    • GitHub

 

    • Ansible公式ドキュメント

 

    Red Hat Ansible Automation
bannerAds