%20%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%82%92%E8%87%AA%E5%8B%95%E5%8C%96%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%3F.png)
サーバーのインストールを自動化するにはどうすればよいでしょうか? どのようなインフラストラクチャ/システムがニーズに合っているでしょうか?
当社には 10 台を超える物理サーバーがあり、100 台を超える VM が稼働しています。そのほとんどは LAMP です。多すぎるというわけではありませんが、単独で動作し続けるものではありません。すべてのサーバーに KVM 仮想化が採用されています。当社は、頻繁に変更するさまざまなカスタム アプリケーションをお客様のためにホストしています。したがって、拡張が必要なアプリケーションは 1 つだけではありません。プロジェクト チームはお客様と VM を直接操作します。これは必須事項です。
私たちが日常的に直面する問題は、VM/マシンの再インストールが、最近の変更を誰も制御できないために困難になり、不安定になるリスクがあり、人々がそれをできるだけ延期し、時間が経つにつれて問題が大きくなることです。
少なくとも 3 か月ごとに、必要に応じて再インストール手順を確立したいと思います。再インストールは、コード リポジトリとバックアップから開始する必要があります。VM の複製は行わないでください。
現在の設定でこれを手作業で行うと、3 か月ごとに約 6 人月のコストがかかると見積もっています。この時間を短縮し、プロセスの繰り返し性を高めるにはどうすればよいでしょうか。
問題は、このタスクを自動化するのに役立つソフトウェアが何かということです。できるだけ軽量である必要があります。自動化されたノード割り当ては必要ありません。再インストールをできるだけ自動化するだけで十分です。再インストールごとに人間による監視が想定されます。
当社のノードは主に LAMP で、2 つのシステムには 1 TB を超える構造化 DB データがあり、200 GB を超えるシステムがいくつかあり、約 50 の小さなカスタム VM があります。各システムの計画的なダウンタイムを簡単にスケジュールできるため、再インストール中の高可用性については問題になりません。
再インストールを可能な限り自動化する必要があります。
答え1
Ansible、Saltstack、Puppet、Chef などの構成管理フレームワークが必要です。
これは、構成の管理と適用に使用するツールです。ただし、実際のツールの選択はプロジェクトの小さな部分です。
インフラストラクチャへのすべての変更がこのツールを介して管理されるプロセスを設計および展開する必要があります。
これには以下が必要です:
- ツールの使い方を人々に教える
- ツールなしでは変更ができないようなシステムアーキテクチャの変更
- 人々の基本的な行動様式を変えることに対する抵抗に対処する
ソフトウェア スタック インフラストラクチャの統合も検討する必要があります。
各VMのソフトウェア構成が少しずつ異なる場合は、
- 異なるインストールの構成管理コードに重複したコードが多数ある
- どの構成を適用するかを選択するための複雑なロジック
これらのいずれかの要因により、メンテナンスのオーバーヘッドが大幅に増加し、最終結果は現在の状況と同じくらい苦痛になる可能性があります。
答え2
クラウドには API キーがありますか?
ほとんどのクラウドにはワンクリックLAMPイメージがあります。例:
ヴルトル:https://www.vultr.com/apps/lamp/
デジタルオーシャン:https://marketplace.digitalocean.com/apps/lamp
リノード:https://www.linode.com/docs/guides/lamp-stack-marketplace-app/
そうでない場合は、VestaCPが絶対の頼みの綱ですhttps://vestacp.com/install/
どちらも、Apache バックエンド、nginx フロントエンド、MySQL/mariadb/postgres、php/php-fpm を追加します。すべてオプションです。
/root/.ssh/authorized_keys
更新については、別のサーバーを作成し、その別のサーバーが持つ共通の SSH 公開キーをドロップして、各サーバーに自動的にログインできるようにします。たとえば、次のようになります。
INSTANCES=(
10.0.0.5
10.0.0.6
10.0.0.7
...
)
for INSTANCE in "${INSTANCES[@]}"; do
ssh root@${INSTANCE} /bin/bash -c "apt update -y && apt upgrade -y"
done
これは、Terraform、Kubernetes などの DIY とほぼ同じです。
また、GitHub には、クラウド固有のガイドが多数あります。たとえば、次のとおりです。
Digital Ocean のもう 1 つの例:https://github.com/ethanbeyer/DigitalOcean-Droplet-Setup
AWS のもの:https://github.com/elionaz/aws-LAMP/blob/master/install_lamp.sh