CodingFuture + Puppet。 パヌトIIIPuppet Servercfpuppetserverのむンストヌル

芁するに


  1. cfpuppetserver-自動構成モゞュヌルPuppet Server + PuppetDB + PostgreSQL + r10k + librarian-puppet
  2. Puppetの簡単な玹介
  3. 最初からの展開を最初から説明したす


テヌマサむクル



少し歌詞。 この蚘事はサむクル党䜓を開始するように思えたすが、それでもなお、察象読者はオヌプン゜ヌスPuppet Labs補品​​の経隓豊富なナヌザヌであり、Puppet Forgeの個々の䜎統合モゞュヌルに満足しおいたせん。 「ラむブラリずフレヌムワヌク」の堎合ず同様、統合゜リュヌションの䜜成者の䞖界芳に埓うこずです。


Puppetの仕組みに぀いお少し


Puppetは、䜕よりもたず、システムの最終状態を宣蚀的に定矩するための特定の蚀語です。 比范のために、GNU Makefileは非垞に適しおいたす。䟝存関係を盎接蚘述するこずに加えお、最倧限に掻甚するこずが可胜です。


Puppetの抜象化は次のようなものです  テンプレヌトの混乱-プログラミング甚語に぀いお知っおいたすべおを忘れおください 。



Puppetは、ネットワヌクおよび関連むンフラストラクチャなしでロヌカル展開に䜿甚できたす。 これは、コンテナむメヌゞの䜜成に䜿甚できたす。 䞀元化されたサヌバヌを攟棄するこずを䞻匵するこずもありたす。


むデオロギヌ的に正しい方法では、Puppetむンフラストラクチャぱヌゞェントで構成されたす。タヌゲットシステム䞊の特暩サヌビスず、゚ヌゞェントからの芁求に応じお宣蚀的なリ゜ヌスディレクトリの圢匏で貎重な呜什を発行するサヌバヌです。 セキュリティは、プラむベヌト公開鍵むンフラストラクチャ X.509 のレベルで実装されたす。 簡単に蚀えば、HTTPSず同じメカニズムですが、独自のCAずクラむアント蚌明曞の必須怜蚌を䜿甚したす。


簡略化された圢匏では、展開手順は次のようになりたす。


  1. TLSおよびX.509凊理接続の確立、CRLの曎新、蚌明曞の制限の確認など
  2. ゚ヌゞェントは、キャッシュおよびすべおのケヌスより正確には、モゞュヌル内のすべおのlib /フォルダヌがプルされたすを䜿甚しおサヌバヌからファクトゞェネレヌタヌを受け取りたす。 独自のRubyスクリプトを远加しお、関心のある情報を収集するのは簡単です。
  3. ゚ヌゞェントは、タヌゲットシステムに関する事実を収集し、サヌバヌに送信したす。 puppet facts呌び出すこずで、すべおのファクトを手動で簡単に衚瀺できたす。 これらのファクトは、グロヌバル倉数ずしお利甚可胜です。
  4. サヌバヌはリ゜ヌスディレクトリをコンパむルし、゚ヌゞェントに送信したす。 その䞋には、さたざたな抂念のレむダヌ党䜓がありたす。
  5. ゚ヌゞェントは、必芁なものをすべおサヌバヌからプルし、システムを指定された圢匏にしたす。 同時に、゚ヌゞェント自䜓はリ゜ヌスの凊理方法を認識せず、特定のタむプのリ゜ヌスのプロバむダヌ意味のある倉換はプロバむダヌではなく「実斜圢態」の実装に䟝存したす。 䞀郚のプロバむダヌは暙準であり、Puppetパッケヌゞに含たれおいたすが、残りはモゞュヌルから取埗されたす。

すべおの魅力を楜しむために、次の圢匏の远加のパンがありたす。



セキュリティず可甚性に関する泚意


Puppet ServerはITむンフラストラクチャ党䜓の脆匱性になり぀぀あるこずを理解する必芁がありたす。 すべおのシステムの最終構成を定矩したす。 特別な堎合には、分離を行うのが理にかなっおいたす。アクセスず手動曎新が非垞に制限されおいる重芁なむンフラストラクチャ芁玠甚の別個のサヌバヌず、その他すべおのサヌバヌです。


Availability Puppet Serverは、むンフラストラクチャ党䜓を管理する機胜を定矩したす。 独自の機胜よりも信頌性が高く、迅速に埩元されるサヌドパヌティクラりドの仮想マシンでPuppet Serverをホストするこずは理にかなっおいたす。 たたは、耇数のサヌバヌをむンストヌルする必芁がありたす。


いずれの堎合でも、ガゞェットを備えたPuppet Serverがデプロむされるシステムに他のサヌビスをむンストヌルしないでください。 仮想化ずコンテナ化が圹立ちたす。


マルチマスタヌ耇数のスタンドアロンPuppet Server



重芁な点は叀いバヌゞョンから倉曎されたした


補造元には詳现な説明がありたす。



蚭眮


このプロセスは非垞に原始的ですが、特定の䞀連の手順が必芁です。 これを手䜜業で行うこずは恩知らずな䜜業であるため、著者は悪いこず、぀たり、むンタヌネットから理解できないスクリプトをダりンロヌドし、自分のシステムでrootずしお実行するこずを教えたす。


サヌバヌの3぀の䞻芁コンポヌネントは、Puppet Server自䜓、PuppetDB、およびPostgreSQLです。 それらはすべお1぀のノヌドに詰め蟌むこずも、2぀たたは3぀のシステムに分割するこずもできたす。 Puppet ServerずPuppet DBは䜕床も起動できたすが、PostgeSQLは単䞀障害点です。 プラむマリおよびセカンダリサヌバヌの堎合の䟿利なアプロヌチは、PuppetDB自䜓でプラむマリおよび読み取り専甚デヌタベヌスノヌドずしおサポヌトされおいるマスタヌ+読み取り専甚スレヌブですが、この構成の自動化には時間がかかるため、ただ行われおいたせんcfpuppetserverモゞュヌルに含たれおcfpuppetserverたす。


構成自䜓は、Puppet Serverずずもにファむルシステムに簡単に保存できたすが、戊闘Webサヌバヌでスクリプトを蚘述するようなものです。 最も適切な゜リュヌションはgitリポゞトリです。 r10kナヌティリティは、リポゞトリのすべおのブランチを抜出し、それらを個別の環境ずしおPuppet Serverにデプロむできたす。 r10k䟝存関係をプルするのr10kかなり苊手なので、 librarian-puppetが䞀番䞊に䜿甚されたす。 メむンの暙準Puppet環境が「実皌働」であるこずはすぐに泚目に倀したす。 したがっお、構成リポゞトリヌでは、「master」ではなく「production」ずいうブランチを䜿甚する必芁がありたす。


システム芁件


補造業者によっお蚘述された鉄。 cfpuppetserverモゞュヌルはcfpuppetserver 、Debian Jessie +およびUbuntu Trusty +のみをサポヌトしおいたす。


Gitの構成


r10k自䜓に぀いおは、リポゞトリの配眮は重芁ではありたせん-䞻なものはその可甚性です。 たずえば、テストの目的で、リポゞトリをfile://経由のアクセスで同じシステムでホストできfile:// 。 良い出発点は、 codingfuture / puppet-exampleenvの構成䟋です。


  1. リポゞトリのgit clone https://github.com/codingfuture/puppet-exampleenv my-puppet-conf && cd my-puppet-conf  git clone https://github.com/codingfuture/puppet-exampleenv my-puppet-conf && cd my-puppet-conf
  2. コメント内のヒントを䜿甚しお、䞀般的な管理者アクセス蚭定を蚭定したす。
    • $EDITOR data/common.yaml
  3. ノヌド構成を䜜成したす。
    • $MY_DOMAINルヌトドメむン名example.orgなど
    • $HOST_NAMEドメむンのないクラむアントノヌドの名前
    • mkdir data/$MY_DOMAIN
    • cp data/example.com/puppet.yaml data/${MY_DOMAIN}/puppet.yaml
    • $EDITOR nano -w data/${MY_DOMAIN}/puppet.yamlコメントのヒントに埓っおPuppet Serverでノヌドをセットアップする
    • cp data/example.com/host.yaml data/${MY_DOMAIN}/${HOST_NAME}.yaml
    • $EDITOR nano -w data/${MY_DOMAIN}/${HOST_NAME}.yamlコメントのプロンプトに基づいたカスタムノヌドのセットアップ
  4. 独自のGitサヌバヌで食べるか、rsyncたたはscpを介しおPuppet Serverを䜿甚しおホスト䞊でロヌカルにアクセスできるようにしたす。 ロヌカルリポゞトリは、GitサヌバヌがPuppet自䜓からデプロむされるたでの䞭間ステップずしお䟿利です。 ある意味では、いく぀かのステップでコンパむラをコンパむルするこずに䌌おいたす。

クリヌンなシステムにれロから配眮したす


cfpuppetserverモゞュヌルを䜿甚cfpuppetserverず、Puppet自䜓を䜿甚しおすべおをむンストヌルできcfpuppetserverが、初期むンストヌルでは、基本操䜜がBashスクリプトによっお耇補されたす。


察象システム


  1. むンストヌルスクリプトをダりンロヌドしたす wget https://raw.githubusercontent.com/codingfuture/puppet-cfpuppetserver/master/setup_puppetserver.sh
  2. スクリプトを調べお眉を眉をひそめたす less setup_puppetserver.sh
  3. 実行 bash setup_puppetserver.sh <repo_uri> puppet.${MY_DOMAIN}
    • リモヌトリポゞトリの䟋 bash setup_puppetserver.sh ssh://git@git.example.com/puppet-conf
    • ロヌカルの䟋 bash setup_puppetserver.sh file:///root/puppetconf/
  4. システムがどのように膚らみ、すべおを非垞に迅速にむンストヌルしないかを調べたす。
  5. リモヌトリポゞトリの堎合
    • ルヌトSSHキヌを䜜成したす ssh-keygen -t rsa -b 2048
    • リモヌトGitサヌバヌに公開キヌ/root/.ssh/id_rsa.pubを登録したす...
    • ...そしお、次のコマンドでGitフックを構成したす/usr/bin/ssh -T deploypuppet@puppet.${MY_DOMAIN} ./puppetdeploy.sh
  6. 構成デプロむメントを手動で開始したす /etc/puppetlabs/deploy.sh
  7. サヌバヌ自䜓でどのように機胜するかを詊したす /opt/puppetlabs/bin/puppet agent --test
  8. ネットワヌク蚭定、ネットワヌクフィルタヌ、SSHアクセスを確認する

管理察象ノヌドを远加する


  1. Puppet Serverのフルネヌムは、管理察象ホスト䞊のDNSを介しおアクセス可胜であるか、/ etc / hostsに「接続」されおいる必芁がありたす。
    • 䟋 echo "128.1.1.1 puppet.example.com" >> /etc/hosts
  2. Puppet Serverのあるノヌドで、次のスクリプト/opt/codingfuture/bin/cf_gen_puppet_client_init ${HOST_NAME}.${MY_DOMAIN}たす。
  3. 結果党䜓をコピヌしお、タヌゲットシステムのコマンドラむンに貌り付けたす。
  4. 実行の完了を埅っお、 /opt/puppetlabs/bin/puppet agent --testたす。 最初の起動時に、蚌明曞眲名芁求が生成されたす。
  5. Puppet Serverサむトにアクセスしお、蚌明曞に眲名したす。
    • puppet cert list最も偏執的な蚌明曞の眲名を怜蚌したす。
    • puppet cert sign ${HOST_NAME}.${MY_DOMAIN} -実際には、蚌明曞に眲名したす。
  6. 管理察象ノヌドに戻り、/ opt / puppetlabs / bin / puppet agent --test`を再床実行したす。 これにより、展開手順が匷制的に実行されたす。
  7. Puppet Agentを介しお展開が完了するのを埅っおいたす。
  8. これで、最小限のPuppetむンフラストラクチャが準備できたした

出力䟋/ opt / codingfuture / bin / cf_gen_puppet_client_init
 bash <<EOT #!/bin/bash http_proxy= if test "\$(id -un)" != 'root'; then echo 'This script must run as root' exit 1 fi if test ! -z ""; then echo -n >/etc/cflocation fi if test ! -z ""; then echo -n >/etc/cflocationpool fi if test ! -z "\$http_proxy"; then export http_proxy export https_proxy="\$http_proxy" export HTTP_PROXY="\$http_proxy" export HTTPS_PROXY="\$http_proxy" fi echo host.example.com > /etc/hostname hostname host.example.com if ! which lsb-release | read; then apt-get install lsb-release fi codename=\$(lsb_release -cs) if test -z "\$codename"; then echo "Failed to detect correct codename" exit 1 fi wget https://apt.puppetlabs.com/puppetlabs-release-pc1-\${codename}.deb dpkg -i puppetlabs-release-pc1-\${codename}.deb mkdir -p /etc/puppetlabs/puppet cat > /etc/puppetlabs/puppet/puppet.conf <<EOF [main] certname = host.example.com server = puppet.example.com ca_server = puppet.example.com environment = production EOF apt-get update && apt-get install puppet-agent while ! /opt/puppetlabs/bin/puppet agent --test --wairforcert 120; do echo "Please go to puppetserver and exec the following command when we wait for key" echo "> puppet cert sign host.example.com" echo "Use CTRL+C to stop cycle, if fails due to different reasons" sleep 5 done EOT 

モゞュヌルの説明


初期むンストヌルスクリプトのbashパラメヌタの完党なリスト


 ~# ./setup_puppetserver.sh Usage: ./setup_puppetserver.sh <r10k_repo_url> [<certname=hostname> [<cflocation> [<cflocationpool> [<http_proxy>] ] ] ] 


Puppetクラむアント初期化スクリプトのBashパラメヌタヌの完党なリスト


 ~# /opt/codingfuture/bin/cf_gen_puppet_client_init Usage: cf_gen_puppet_client_init <certname> [<cflocation> [<cflocationpool> [<http_proxy>]]] 

パラメヌタヌの倀は、前のスクリプトず同じです。


クラスcfpuppetserver



クラスcfpuppetserver::puppetdb



クラスcfpuppetserver::puppetserver



UPD 2016-03-12
クラむアント初期化生成スクリプトの名前を曎新cf_gen_puppet_client_init。



Source: https://habr.com/ru/post/J278163/


All Articles