python一般的なインフラストラクチャ管理ツール

23603 ワード


Fabric
Fabricはシステム管理タスクを簡素化するライブラリです.ChefとPuppetは管理サーバとシステムライブラリに注目する傾向があり、Fabricは導入などのアプリケーションレベルのタスクに注目しています.
Fabricのインストール:
$ pip install fabric

次のコードは、memory_usagedeployの2つのタスクを作成します.前者は各マシンにメモリ使用量を出力します.後者はsshを各サーバに、cdを私たちのエンジニアリングディレクトリに、仮想環境をアクティブにし、最新のコードライブラリを引き出し、アプリケーションサーバを再起動します.
from fabric.api import cd, env, prefix, run, task

env.hosts = ['my_server1', 'my_server2']

@task
def memory_usage():
    run('free -m')

@task
def deploy():
    with cd('/var/www/project-env/project'):
        with prefix('. ../bin/activate'):
            run('git pull')
            run('touch app.wsgi')

上記のコードをファイルfabfile.pyに保存し、メモリの使用を確認できます.
$ fab memory_usage
[my_server1] Executing task 'memory'
[my_server1] run: free -m
[my_server1] out:              total     used     free   shared  buffers   cached
[my_server1] out: Mem:          6964     1897     5067        0      166      222
[my_server1] out: -/+ buffers/cache:     1509     5455
[my_server1] out: Swap:            0        0        0

[my_server2] Executing task 'memory'
[my_server2] run: free -m
[my_server2] out:              total     used     free   shared  buffers   cached
[my_server2] out: Mem:          1666      902      764        0      180      572
[my_server2] out: -/+ buffers/cache:      148     1517
[my_server2] out: Swap:          895        1      894

and we can deploy with:
$ fab deploy

追加のプロパティには、パラレル実行、リモート・プログラムとのインタラクション、ホスト・パケットが含まれます.
Fabricドキュメント
Salt
Saltはオープンソースの基礎管理ツールです.センタノード(プライマリホスト)から複数のホスト(スレーブマシン)へのリモートコマンド実行をサポートします.また、単純なテンプレートファイルを使用して複数のサーバを構成できるシステム文もサポートされています.
SaltはPython 2.6と2.7をサポートし、pipでインストールできます.
$ pip install salt

プライマリ・サーバと任意の数のスレーブを構成した後、スレーブで任意のshellコマンドまたはプリフォームされた複雑なコマンドのモジュールを使用できます.
次のコマンドはpingモジュールを使用して、使用可能なすべてのスレーブをリストします.
$ salt '*' test.ping

ホストフィルタリングは、スレーブidをマッチングするか、粒子系(grains system)を使用することによって行われる.パーティクル(grains)システムは、オペレーティングシステムのバージョンやCPUアーキテクチャなどの静的ホスト情報を使用して、Saltモジュールにホスト分類コンテンツを提供する.
次のコマンドラインでは、パーティクルシステムを使用して、CentOSを実行するすべてのスレーブを列挙します.
$ salt -G 'os:CentOS' test.ping

Saltはステータスシステムも提供しています.ステータスはスレーブを構成するために使用できます.
たとえば、Apacheサーバをインストールして起動するには、マシンから次のステータスファイルを読み込むように指示されます.
apache:
  pkg:
    - installed
  service:
    - running
    - enable: True
    - require:
      - pkg: apache

ステータスファイルはYAML、Jinja 2テンプレートシステム、または純Pythonで作成できます.
Saltドキュメント
Psutil
Psutilは、CPU、メモリ、ハードディスク、ネットワーク、ユーザ、プロセスなど、異なるシステム情報を取得するインタフェースです.
次は、サーバのオーバーロードに注目する例です.いずれかのテスト(ネットワーク、CPU)に失敗した場合、メールが送信されます.
#          :
from psutil import cpu_percent, net_io_counters
#     :
from time import sleep
#   email    :
import smtplib
import string
MAX_NET_USAGE = 400000
MAX_ATTACKS = 4
attack = 0
counter = 0
while attack <= MAX_ATTACKS:
    sleep(4)
    counter = counter + 1
    # Check the cpu usage
    if cpu_percent(interval = 1) > 70:
        attack = attack + 1
    # Check the net usage
    neti1 = net_io_counters()[1]
    neto1 = net_io_counters()[0]
    sleep(1)
    neti2 = net_io_counters()[1]
    neto2 = net_io_counters()[0]
    # Calculate the bytes per second
    net = ((neti2+neto2) - (neti1+neto1))/2
    if net > MAX_NET_USAGE:
        attack = attack + 1
    if counter > 25:
        attack = 0
        counter = 0
#   attack  4,          email
TO = "you@your_email.com"
FROM = "webmaster@your_domain.com"
SUBJECT = "Your domain is out of system resources!"
text = "Go and fix your server!"
BODY = string.join(("From: %s" %FROM,"To: %s" %TO,"Subject: %s" %SUBJECT, "",text), "\r
") server = smtplib.SMTP('127.0.0.1') server.sendmail(FROM, [TO], BODY) server.quit()

psutilベースで広く拡張されているtopと同様に、カスタマー・サービス・エンドの監視能力を持つ完全な端末アプリケーションをglanceと呼びます.
Ansible
Ansibleはオープンソースシステムの自動化ツールです.PuppetまたはChefに比べて最大の利点は、クライアント上のエージェントを必要としないことです.Playbooksは、テンプレートとしてJinja 2を使用するYAML形式で記述されたAnsibleの構成、導入、および作成言語です.
AnsibleはPython 2.6と2.7をサポートし、pipを使用してインストールできます.
$ pip install ansible

Ansible requires an inventory file that describes the hosts to which it has access. Below is an example of a host and playbook that will ping all the hosts in the inventory file. Ansibleには、ホストがどこを通っているかを記述するリストファイルが必要です.以下はホストとplaybookの例で、リストファイルにすべてのホストがpingされます.
インベントリファイルの例は、hosts.ymlです.
[server_name]
127.0.0.1

Playbookの例は、ping.yml
---
- hosts: all

  tasks:
    - name: ping
      action: ping

Playbookを実行するには、次の手順に従います.
$ ansible-playbook ping.yml -i hosts.yml --ask-pass

Ansible playbookはhosts.ymlですべてのサーバをpingします.グループ化されたサーバを選択してAnsibleを使用することもできます.Ansibleの詳細については、Ansible Docsを参照してください.
An Ansible tutorialもAnsibleに慣れるための素晴らしい詳細なガイドです.
Chef
Chefはシステムのクラウドインフラストラクチャ自動化フレームワークであり、サーバの導入と物理、仮想、またはクラウド端末への応用を簡単にします.構成管理を選択することができます.それは主にRubyを使用してインフラストラクチャコードを作成します.
Chefクライアントは、インフラストラクチャを構成する各サーバ上で実行されます.これらのクライアントは、システムが均等で想定された状態であることを確認するために、定期的にChefサーバをチェックします.各サーバは独自のChefクライアントを持っているため、各サーバは独自の構成を行い、この分散方法はChefを拡張可能な自動化プラットフォームにします.
Chefは、cookbookで実装されたカスタムレシピ(構成要素)を使用して動作します.Cookbookは通常、インフラストラクチャの選択肢としてChefサーバにパッケージとして格納されます.簡単なChefサーバの作成方法については、Digital Ocean tutorial seriesのChefに関するセクションを参照してください.
簡単なcookbookを作成するには、knifeコマンドを使用します.
knife cookbook create cookbook_name

Getting started with ChefはChef初心者にとって良いスタートポイントであり、多くのコミュニティがcookbookを維持しており、良い参考にすることができます.独自のインフラストラクチャ構成要件に対応するには、Chef Supermarketを参照してください.
Chef文書Puppet
PuppetはPuppet LabsからのIT自動化と構成管理ソフトウェアであり、システム管理者がITインフラストラクチャの状態を定義できるようにし、優雅な方法で物理と仮想マシンの群れを管理することができます.
Puppetはオープンソース版とエンタープライズ版として入手できます.そのモジュールは、システムのステータスを自動化または定義するために使用される小さな共有可能なコードユニットです.Puppet Forgeは、コミュニティによって作成されたモジュールウェアハウスで、オープンソースとエンタープライズ版向けのPuppetです.
Puppetエージェントは、その状態を監視または変更する必要があるノードにインストールされます.特定のサーバであるPuppet Masterはエージェントノードの組織を担当する.
エージェントノードは、オペレーティングシステム、カーネル、アーキテクチャ、ipアドレス、ホスト名など、システムの基本情報をPuppet Masterに送信します.次に,Puppet Masterはノード生成情報を持つディレクトリをコンパイルし,各ノードがどのように構成すべきかを通知し,エージェントに送信する.エージェントは、前述のディレクトリの変更を実行し、Puppet Masterにレポートを送信します.
FacterはPuppetが取得した基本システム情報を伝達するための興味深いツールです.これらの情報はPuppetモジュールを記述する際に変数として参照することができる.
$ facter kernel
Linux
$ facter operatingsystem
Ubuntu

Puppetでモジュールを記述するのは非常にストレートです.Puppetリスト(manifest)はPuppetモジュールを構成しています.Puppetリストは、拡張子.ppで終了します.次はPuppetの「Hello World」の例です.
notify { 'This message is getting logged into the agent node':

    #As nothing is specified in the body the resource title
    #the notification message by default.
}

ここではもう一つのシステムベースの論理の例である.注意オペレーティングシステム情報は、変数としてどのように使用されるかに注意し、変数の前に接頭辞記号$が付加される.同様に、他の情報、例えばホスト名は$hostnameで参照することができる.
notify{ 'Mac Warning':
    message => $operatingsystem ? {
        'Darwin' => 'This seems to be a Mac.',
        default  => 'I am a PC.',
    },
}

Puppetにはさまざまなリソースタイプがあり、必要に応じてパッケージ-ファイル-サービス(package-file-service)モデルを使用して構成管理の主なタスクを引き受けることができます.次のPuppetコードは、OpenSSH-Serverパッケージがシステムにインストールされていることを確認し、sshdプロファイルが変更されるたびにsshdサービスを再起動します.
package { 'openssh-server':
    ensure => installed,
}

file { '/etc/ssh/sshd_config':
    source   => 'puppet:///modules/sshd/sshd_config',
    owner    => 'root',
    group    => 'root',
    mode     => '640',
    notify   =>  Service['sshd'], # sshd will restart
                                  # whenever you edit this
                                  # file
    require  => Package['openssh-server'],

}

service { 'sshd':
    ensure    => running,
    enable    => true,
    hasstatus => true,
    hasrestart=> true,
}

詳細については、Puppet Labsドキュメントを参照してください.
Blueprint
処理対象
Write about Blueprint
Buildout¶
Buildoutはオープンソースソフトウェアコンポーネントツールです.BuildoutはPythonによって書かれています.スクリプトの構成と構築の分離の原則を実現しました.Buildoutは、主にソフトウェアを開発または導入しているPython egg形式の依存関係をダウンロードおよび設定するために使用されます.任意の環境でタスクを構築するためのガイド(recipe、元は「レシピ」、引用は「ガイド」)が作成され、多くのものがすでに利用されています.