Centos-admin.ru:Ansibleを知る

画像



これは、多くのコードを備えた既製の命令ではなく、アルゴリズムと私たちが達成した結果の説明です。



それで、少し前に、新しいクライアントができました。 彼には、私たちにとって非典型的な要件がいくつかありました。サーバーの構成にansibleを使用するため、サイトのコンテンツはgitに保存され、各サイトは独自の仮想マシン上にあります。 「顧客は常に正しい」という標準的なスキームに適合しなかったため、これらはすべてうまくいきませんでした。そして、新しいスキームの開発を開始しました。 しかし、まず最初に。



初期データ:私たちのサイトに転送する必要がある30以上のサイトを持っているクライアントがいます。 各サイトは個別のコンテナに配置する必要があります(OpenVZコンテナを使用します)。 1つの外部IPのみが使用されます。 Ansibleはサーバーの構成に使用されます。 各サイトには、構成ファイルを含むアーカイブがあります。 サイトのコンテンツはgitにあります。



そして、私たちは創造し始めました...私たちがやったこと、あなたはカットの下で見ることができます。 今後、新しいサイトの出番はいくつかのチームに委ねられると思います。



アーカイブの形式で、新しいコンテナを展開するためのテンプレートがいくつかあります。 まず、これらのテンプレートにいくつかの変更を加えるか、またはユーザーとキーを追加しました。 これにより、ターンの直後に、ansibleを使用してコンテナを設定するための追加の手順が不要になりました。



ansibleでは、いくつかのロールを作成しましたが、すべてを説明するのではなく、最も興味深いロールについてのみ説明します。





create_vmは、実際にはVMを作成して構成する役割です。



もう少し。



この役割は、コンテナがインストールされるホストマシンに適用されます。 すぐに予約を行うと、host_varsはどこでも積極的に使用されます。 host_varsのホストマシンには、vm_number変数が1つしかありません。 この変数には、プレイブックが実行された後、最後のコンテナ+1の数が含まれます。この数は1増加します。また、プレイブックでは、この役割に「vars_promt」が使用されます。 これは、私たちにとって興味深く思えた最初のものであり、メカニズムはいくつかの場所で説明されています。 vars_promtを使用すると、プレイブックを再生するときに変数をインタラクティブに設定できます。将来、これらの変数にはテンプレート、タスクなどでアクセスできます。 これらの変数には、サイト名、gitリポジトリ(サイトコンテンツが格納されている場所)、サイトの構成ファイルが配置されているアドレスなど、各サイトの一意のデータを入れます。



次のような結果になりました。

<spoiler title="new_vm.yml"> - name: Create new vm hosts: ds remote_user: ansible sudo: true roles: - new_vm vars_prompt: conf_url: " url c      " area_fqdn: "  " git_repo: "  git " </spoiler>
      
      









タスクが非常に長いことが判明したため、タスク自体の説明は行いません。 それが誰かにとって興味深いものであれば、私たちはそれを送ることができます。



そして、すべてが非常に簡単で、ホストに接続でき、テンプレートアーカイブをダウンロードし、この番号のVMがないことを確認してVMを作成し、IPと名前を設定して、ホスト上のすべての手順を終了します。



さらに、ansible local_actionモジュールは非常に有用であることが判明しました。これにより、プレイブックの開始元のホストでアクションを実行できます。 Asibleは、サイトの構成ファイル(nginx、apacheなど)をダウンロードし、対話型変数に設定したリンクによって、ansibleにディレクトリ構造を作成し、ansibleのロールに新しいコンテナーを追加し、構成を分解します。 また、新しいコンテナ用にhost_varsが作成されます。このコンテナには、サイト名とgitリポジトリが設定されます。これは将来有用であり、今後必要になります。 これで、コンテナの作成が完了しました。





冒頭で述べたように、すべてのサイトに1つの白いIPしかありません。 問題ではなく、プロキシnginxを持つコンテナが作成されました。 新しいコンテナの場合、プロキシルールを追加する必要があります。 ここで、テンプレートとすべての同じ対話型変数が役立ちました。 また、新しいコンテナのプロキシ構成ファイルがテンプレートからローカルに作成されます。



ええ、それは良いことです。 プレイブックを起動することにより、すべての設定を含むコンテナーを作成します。 しかし、私たちはそこで止まりません。 そして、彼らはリポジトリからコンテンツの別のアンロードを追加しました。 content_updateロールがこれを担当します。



content_updateの役割について簡単に説明します。 Ansibleはgitリポジトリのクローンを作成し、スクリプトを使用して、サイトのコンテンツを必要な権限を持つ必要なディレクトリに分解します。 これで、実際には、コンテナの準備はほぼ終了し、新しいコンテナの構成を適用するためにプレイブックを実行するために残っています。それだけで、コンテナを顧客に転送できます。



投稿者: Magvai69システム管理者



All Articles