Gitlab CIおよびAnsibleを使用したインフラストラクチャのローカルコマンドサーバーのグローバル設定の変更[コンセプト]




この記事では、Gitlab CIおよびAnsibleを使用した大規模インフラストラクチャのローカルコマンドサーバーでグローバル設定を変更する機能/アイデア/コンセプトについて説明します。







20の開発チームと1つの管理者/ DevOpsチームがあるとします。 すべてのサーバーで管理者パスワードを変更する方法は? エンタープライズルート証明書をすべてのサーバーに追加する方法 等







どのような問題を解決しますか?



典型的な状況:

グローバル管理者/ DevOpsがいます。

グローバル設定(NTP、DNS、プロキシなど)があります

ローカル開発チームがあります:TeamA、TeamB、TeamC、TeamDなど。

チームのサーバーにしかアクセスできない開発者がいます。

グローバル管理者、グローバル設定を追加/更新する方法は?













グローバル設定がプライベートリポジトリのローカルコマンド設定とは別に保存されるという事実により、タスクは複雑になります。







会社全体にサーバーがほとんどない場合は、シンプルモードでAnsibleを起動できます。すべてのサーバーのグローバル管理者とグローバル設定の更新を一度に開始します。







大規模なインストールでは、企業は通常Puppet、Chefを使用します。







コンセプト



大規模なインフラストラクチャのローカルコマンドサーバーのグローバル設定を変更するには、gitサブモジュールメカニズムを提案します。







ローカル設定のリポジトリは、グローバル設定のgitサブモジュールを使用します。







以下は、グローバル設定を持つプライベートリポジトリをローカルコマンドリポジトリに接続する概略図です。













Puppet、Chef、Saltのインフラストラクチャでgitサブモジュールを使用してグローバル設定を更新するという概念を使用できますが、記事ではAnsibleの例を示します。







たとえば、tomcat、mysql、nginxをインストールし、teamと呼ばれるチームでグローバル設定を適用します。







gitlabには一般的な設定を含む共通グループがあります。







共通グループには、管理者、sysctl設定などを含むベースブートストラッププロジェクトがあります。







通常、会社には複数の開発部門があります-多くの場合、それらはチームと呼ばれます。







gitlabでは、チームグループを作成します(独自のチーム名があります)。







チームグループでは、アプリケーション、データベース、ロードバランサーのプロジェクトを作成します。







base-bootstrap、アプリケーション、データベース、ロードバランサーのスクリーンショット:













base-bootstrapリポジトリは、gitサブモジュールとしてアプリケーション、データベース、ロードバランサーリポジトリに含まれています。







リポジトリ内のアプリケーション、データベース、ロードバランサーがbase-bootstrapサブモジュールの更新を開始するたびに。







その後、base-bootstrapからのansible-playbookとbase-bootstrapからのansible-playbookがアプリケーション、データベース、ロードバランサーサーバーに適用されます。













つまり、base-bootstrapに新しい管理者を追加するか、base-bootstrapのシステム設定を変更すると、アプリケーション、データベース、ロードバランサーで、base-bootstrapの新しい設定がアプリケーション、データベース、ロードバランサーに適用されます。







準備する



Ansibleに関する初心者向けの記事を読む必要があります。







#開始可能な場所







#Ansibleガイド







dockerがインストールされた状態でgitlabとgitlab-runnerをデプロイする必要があります。







ここでは、例としてdocker executorを使用します-Shell executorを使用できます。







gitlabとgitlab-runnerをデプロイする方法:







#SouthbridgeによるGitlab-CIの記事







#GitLab CIでのDockerの継続的な統合と展開







3つのサーバー(たとえば、ubuntu上)が必要です:アプリケーション、データベース、ロードバランサー。







アプリケーション、データベース、ロードバランサーは一般的な名前です。







すべての例は、他のソフトウェアで拡張、改善、使用することができます-この記事は一般的な原則を示しています。







実装方法



テスト用のリポジトリとすべてのコードは、 https//github.com/patsevanton/ansible-gitlab-habrから取得できます







ユーザー名/パスワードを使用してサーバーにアクセスする場合、目的のグループ(この場合はチーム)でuserpassword変数を作成し(変更する必要がある場合は、コード内の変数も変更する必要があります)、パスワードを指定します(パスワードパスワードはコードで使用されます)







エンドサーバーでsudo権限を持つ必要なユーザーを作成することを忘れないでください(ユーザーコードはコードで使用されます)。







SSHキーを使用してサーバーにアクセスする場合は、チームグループにSSH_PRIVATE_KEY変数を作成し、サーバーに接続するユーザーの秘密キーを追加する必要があります。







これはサーバーへの接続の簡単な例であるため、この記事ではセキュリティの問題については説明しません。







各リポジトリ(アプリケーション、データベース、ロードバランサー)でgitサブモジュールを作成します。







git submodule add git@gitlab.example.com:common/base-bootstrap.git git submodule add git@gitlab.example.com:team/team-users.git
      
      





共有プライベートリポジトリにアクセスするには、サブモジュールが必要です。







私たちの場合、これは、base-bootstrapの一般設定と、team-usersチームのユーザーリポジトリを持つリポジトリです。







gitlab.example.comはgitlabサーバーです。







次に、.gitmodulesでリポジトリへのパスを相対パスに変更します







例:







 [submodule "team-users"] path = team-users url = ../team-users.git [submodule "base-bootstrap"] path = base-bootstrap url = ../../common/base-bootstrap.git
      
      





ホストの各リポジトリでIPを独自のものに変更し、ansible.cfgでremote_userをユーザーに変更します。







過去数時間/数日間にコミットがなく、サーバーに新しい一般的な変更を展開する必要がある場合(たとえば、新しい管理者を追加する必要がある場合)-そのような状況では、ansible-pullがあります。







ansible-pullをセットアップして、common / base-bootstrapリポジトリをダウンロードします。







これを行うには、デプロイトークンリポジトリを追加します。







共通/ base-bootstrapリポジトリに移動してから、設定/リポジトリ/トークンの展開に移動します。







トークンを作成します。 結果のユーザー名とパスワードはbase-bootstrap / vars / cron.ymlに記録されます。







すべてが正しく機能することを確認した後、アンシブルプルの開始時間を「2分ごと」から自分に合った時間に変更する価値があると思います。







ansible-pullが落ちた場合、このサービスのCIはドロップします。これは、このサービスリポジトリにコミットするたびに開始されます(サービスがアプリケーションと呼ばれるとしましょう)







確認する



新しい管理者を作成します。



https://github.com/patsevanton/ansible-gitlab-habr/blob/master/commons/base-bootstrap/vars/users.ymlで新しい管理者を追加してみてください







Sysctlの変更



https://github.com/patsevanton/ansible-gitlab-habr/blob/master/commons/base-bootstrap/vars/sysctl.ymlで sysctl設定を追加/変更してみてください







cronへのエントリの追加



cronエントリーをhttps://github.com/patsevanton/ansible-gitlab-habr/blob/master/commons/base-bootstrap/vars/cron.ymlに追加してみてください







アプリケーションの拡張またはインストール



最初に、アプリケーションをインストールする役割を見つける必要があります。







https://galaxy.ansible.com/にアクセスして、アプリケーションをインストールする役割を見つけます。







サーバーのコンソールからロールを使用してアプリケーションをインストールしてみてください。 通常、すべての役割の説明に指示があります。







たとえば、tomcatの横にjavaをインストールしてみてください。 最初にgeerlingguy.javaロールをインストールします







 ansible-galaxy install geerlingguy.java
      
      





リポジトリと同じ標準のansible.cfgを作成します。







インベントリを作成します。







 [java] java ansible_host=IP-
      
      





プレイブックjava.ymlを作成する







 - hosts: java become: yes vars_files: - vars/main.yml roles: - { role: geerlingguy.java }
      
      





ansible-playbook java.ymlを実行します







すべてが正常に完了したら、目的のプロジェクト(この場合はアプリケーション)に追加します







geerlingguy.javaの役割は、robertdebock.tomcatの役割の後に追加されますhttps://github.com/patsevanton/ansible-gitlab-habr/blob/master/team/application/tomcat-app.yml#L11







サーバーにインストールする必要がある他のすべてのアプリケーションでも同じです。







プレイブックのテストとセキュリティ



記事を簡略化するために、パスワードの保存とテストの問題には対処していません。







プレイブックのテストに関する記事があります。

#Ansible:プレイブックのテスト(パート1)







#AnsibleロールのMoleculeおよびJenkinsとのテストおよび継続的統合







質問への回答



1)Mentat:そして、結局のところ、環境のあるアンシブルドックに書かれていないのはなぜですか? 最初の読書から、それはもう一度それを再発明する試みのように見えます。 そこで、すべてをansible-playbookのように適用すると非常に便利です-i env / teamA personalAPlaybook.yml

回答:このスキームにより、グローバル設定を変更できます。 質問で説明されているのは、ローカルコマンド設定の変更です。







PSおそらく同じ機能がAnsible Towerに実装されています。 しかし、これについては何も言えません-Ansible Towerとは連携していません。








All Articles