プログラマーとして数年間、会社のサーバーを管理する必要があったので、Opsの技術をいろいろと調べ、2010年にはPuppetやChefなど、当時は応用が効かないと思っていたツールを調べました。 しかし、Devopsの概念が広まるにつれ、Puppetが有名になっていきました:
puppetなし、devopsなし。 |
数ヶ月ごとにPuppetのドキュメントに目を通すのは、大きなタイミングを逃すことを恐れて怖くなりますが、毎回結論はその時と同じです。
サーバー・ソフトウェアのインストールにおける最大の悩みは、次のようなものです:
様々な依存パッケージは厄介で複雑であり、それらをダウンロードしてインストールするのは非常に困難です。 |
この痛みに対処するため、さまざまなソフトウェアが開発されています:
- Redhat/centos yum
- apt-get for ubuntu/debian
- Javaのmaven、pythonのpip、rubyのgemなど!
これらのツールはうまく機能し、基本的に問題は解決しました。
つまり、Redhat上でPuppetを実行するとup2dateでソフトウェアを更新し、Ubuntu上でPuppetを実行するとapt-getでソフトウェアをダウンロードします。
パペットとは何ですか?
私の考えでは、Puppetには主に2つの機能があります:
- ソフトウェアのインストール・スクリプトを書くときに使う方言;
- サーバクラスタ操作ツールは、1台のマシン上でN台のサーバに実行/ダウンロード/インストールを命令することができます。
第一に、Puppetの記述構文は非常に複雑で、テキストを記述するためのMarkdownと比べると、Puppetの構文は非常にトリッキーで、習得に多くの時間がかかり、記憶するのが困難です。
あるソフトウェアをインストールするために、シェルコマンドで書かれたインストールスクリプトは50行しかないかもしれません。
ソフトウェアインストーラによってソフトウェアインストールの最大の問題は解決されているので、puppetにできることはほとんどありません。
ありがたいことに、Example(42)のみなさんが、すでに書かれたpuppetのexample42/puppet-modules束を提供してくれました。
ポイント2、一般人にとっては、トロイの木馬のように複数のサーバーを一括操作できるのはとてもクールです! でも、SAにとっては日常業務。
最も一般的な方法は、ログインマシンとして使用するサーバーを見つけ、 ssh keygen を使用して他のすべてのサーバーに接続することです。 sshd のインストーラには ssh-copy-id スクリプトが付属しており、それを実行してパスワードを一度入力すれば接続できます。
ログインマシンにウェブサーバーをインストールし、ウェブサーバーのhttpドキュメントの下に各種ソフトウェア/パッケージ/インストールディレクトリを置き、使いたいときにwget -O。
複数のサーバーにソフトウェアをデプロイするには、for ip in ip_lists :ssh ip -e "" のようなシェルを書けばOKです。
pythonで一括インストールスクリプトを書くのであれば、psshやFabricなどのパッケージを使えばいいのですが、これらはすべて、サーバ間のssh keygenログインを事前に解除する必要があります。
ssh keygenでサーバーに侵入するのはセキュリティ上のリスクがあります。しかし、それを突き破らずに直接ログインすれば、システム管理者のコンピュータは火薬庫になるだけなので、リスクはありません。
はんけつをくだす
Puppetは、ソフトウェアのインストールにおける最大の難点から逃れ、ほとんど何もできず、急な学習曲線で、鶏のひっかき傷にすらなりません。





