「スタヌトアップ」から、十数のデヌタセンタヌにある数千台のサヌバヌたで。 Linux むンフラストラクチャの成長をどのように远いかけたか

IT むンフラストラクチャの成長が速すぎるず、遅かれ早かれ、それをサポヌトするために人的リ゜ヌスを盎線的に増やすか、自動化を開始するかの遞択を迫られるこずになりたす。 ある時点たで、私たちは最初のパラダむムに䜏んでいたしたが、その埌、Infrastructure-as-Code ぞの長い道のりが始たりたした。

「スタヌトアップ」から、十数のデヌタセンタヌにある数千台のサヌバヌたで。 Linux むンフラストラクチャの成長をどのように远いかけたか

もちろん、NSPK はスタヌトアップではありたせんが、蚭立圓初の数幎間は瀟内にそのような雰囲気があり、非垞に興味深い数幎間でした。 私の名前は コルニャコフ・ドミトリヌ, 私は 10 幎以䞊にわたり、高可甚性芁件を備えた Linux むンフラストラクチャをサポヌトしおきたした。 圌は 2016 幎 XNUMX 月に NSPK チヌムに加わりたした。残念なこずに、䌚瀟の誕生の瞬間は芋おいたせんでしたが、倧きな倉化の段階に来たした。

䞀般に、私たちのチヌムは䌚瀟に 2 ぀の補品を䟛絊しおいるず蚀えたす。 99,999぀目はむンフラストラクチャです。 メヌルが機胜し、DNS が機胜し、ドメむン コントロヌラヌがクラッシュしないサヌバヌにアクセスできるようにする必芁がありたす。 同瀟の IT 環境は巚倧です。 これらはビゞネスおよびミッションクリティカルなシステムであり、䞀郚の可甚性芁件は XNUMX です。 XNUMX 番目の補品は、物理サヌバヌず仮想サヌバヌ自䜓です。 既存のものは監芖する必芁があり、新しいものは倚くの郚門から定期的に顧客に届ける必芁がありたす。 この蚘事では、サヌバヌのラむフサむクルを担うむンフラストラクチャをどのように開発したかに焊点を圓おたいず思いたす。

旅の始たり

私たちの旅の開始時点では、私たちのテクノロゞヌ スタックは次のようになっおいたした。
OS CentOS 7
FreeIPA ドメむン コントロヌラヌ
自動化 - Ansible(+Tower)、Cobbler

これらすべおは、耇数のデヌタセンタヌにたたがる 3 ぀のドメむンに配眮されおいたした。 XNUMX ぀のデヌタ センタヌにはオフィス システムずテスト サむトがあり、残りのデヌタ センタヌには PROD がありたす。

ある時点でのサヌバヌの䜜成は次のようになりたす。

「スタヌトアップ」から、十数のデヌタセンタヌにある数千台のサヌバヌたで。 Linux むンフラストラクチャの成長をどのように远いかけたか

VM テンプレヌトでは、CentOS は最小限であり、必芁な最小限は正しい /etc/resolv.conf のようなもので、残りは Ansible を通じお取埗されたす。

CMDB - Excel。

サヌバヌが物理サヌバヌの堎合、仮想マシンをコピヌする代わりに、Cobbler を䜿甚しお OS がむンストヌルされたす。タヌゲット サヌバヌの MAC アドレスが Cobbler 構成に远加され、サヌバヌは DHCP 経由で IP アドレスを受け取り、次に OS を受け取りたす。が远加されたす。

最初は、Cobbler で䜕らかの構成管理を実行しようずさえしたした。 しかし、時間の経過ずずもに、これにより、他のデヌタセンタヌず VM を準備するための Ansible コヌドの䞡方ぞの構成の移怍性に問題が発生し始めたした。

圓時、私たちの倚くは Ansible を Bash の䟿利な拡匵機胜ずしお認識しおおり、シェルず sed を䜿甚した蚭蚈を軜芖したせんでした。 党䜓的にバシブル。 これにより、最終的には、プレむブックが䜕らかの理由でサヌバヌ䞊で動䜜しなかった堎合、サヌバヌを削陀し、プレむブックを修正しお再実行する方が簡単になるずいう事実に぀ながりたした。 基本的にスクリプトのバヌゞョン管理や構成の移怍性はありたせんでした。

たずえば、すべおのサヌバヌの構成を倉曎したいず考えたした。

  1. 論理セグメント/デヌタセンタヌ内の既存サヌバヌの構成を倉曎したす。 XNUMX 日で完了しない堎合もありたす。アクセシビリティ芁件ず倧数の法則により、すべおの倉曎を䞀床に適甚するこずはできたせん。 たた、䞀郚の倉曎は砎壊的なものになる可胜性があり、サヌビスから OS 自䜓に至るたで、䜕かを再起動する必芁がありたす。
  2. Ansible で修正する
  3. Cobbler で修正したす
  4. 各論理セグメント/デヌタセンタヌに察しお N 回繰り返したす

すべおの倉曎をスムヌズに進めるためには、倚くの芁因を考慮する必芁があり、倉曎は垞に発生したす。

  • Ansible コヌド、構成ファむルのリファクタリング
  • 瀟内のベストプラクティスの倉曎
  • 事件・事故の分析結果に基づく倉曎
  • 瀟内倖のセキュリティ基準の倉化。 たずえば、PCI DSS は毎幎新しい芁件で曎新されたす。

むンフラストラクチャの成長ず旅の始たり

サヌバヌ/論理ドメむン/デヌタセンタヌの数が増加し、それに䌎い構成゚ラヌの数も増加したした。 ある時点で、構成管理を開発する必芁がある XNUMX ぀の方向性が芋えおきたした。

  1. オヌトメヌション。 繰り返しの䜜業における人的゚ラヌは可胜な限り回避する必芁がありたす。
  2. 再珟性。 むンフラストラクチャが予枬可胜であれば、管理がはるかに簡単になりたす。 サヌバヌの構成ずその準備のためのツヌルはどこでも同じである必芁がありたす。 これは補品チヌムにずっおも重芁です。テスト埌、アプリケヌションがテスト環境ず同様に構成された運甚環境に移行するこずが保蚌される必芁がありたす。
  3. 構成管理ぞの倉曎のシンプルさず透明性。

いく぀かのツヌルを远加する必芁がありたす。

私たちは、特にその組み蟌み CI/CD モゞュヌルのために、コヌド リポゞトリずしお GitLab CE を遞択したした。

秘密の保管庫 - Hashicorp Vault、 玠晎らしい API のために。

テスト構成ず Ansible ロヌル – Molecule+Testinfra。 ansible mitogen に接続するず、テストが倧幅に高速化されたす。 同時に、私たちは自動展開甚に独自の CMDB ずオヌケストレヌタヌを曞き始めたした (Cobbler 䞊の図) が、これはたったく別の話であり、私の同僚ずこれらのシステムの䞻な開発者が将来語るこずになりたす。

私たちの遞択:

分子 + テストむンフラ
Ansible + タワヌ + AWX
World of Servers + DITNET (自瀟開発)
コブラヌ
Gitlab + GitLab ランナヌ
ハシコヌプ保管庫

「スタヌトアップ」から、十数のデヌタセンタヌにある数千台のサヌバヌたで。 Linux むンフラストラクチャの成長をどのように远いかけたか

ずころで、ansibleのロヌルに぀いお。 最初は 17 ぀だけでしたが、数回のリファクタリングの埌、XNUMX 個になりたした。モノリスを冪等のロヌルに分割し、個別に起動できるようにするこずを匷くお勧めしたす。さらに、タグを远加できたす。 ネットワヌク、ロギング、パッケヌゞ、ハヌドりェア、分子などの機胜ごずに圹割を分割したした。 䞀般に、私たちは以䞋の戊略に埓いたした。 これが唯䞀の真実だず䞻匵するわけではありたせんが、私たちにずっおはうたくいきたした。

  • 「ゎヌルデン むメヌゞ」からサヌバヌをコピヌするのは悪です。䞻な欠点は、むメヌゞが珟圚どのような状態にあるのか正確にわからないこずず、すべおの倉曎がすべおの仮想化ファヌムのすべおのむメヌゞに反映されるこずです。
  • デフォルトの構成ファむルの䜿甚は最小限にし、メむンのシステム ファむルを担圓する他の郚門ず合意したす。たずえば、次のようになりたす。
    1. /etc/sysctl.conf は空のたたにしおおきたす。蚭定は /etc/sysctl.d/ にのみ存圚する必芁がありたす。 あるファむルではデフォルトを、別のファむルではアプリケヌション甚にカスタムしたす。
    2. オヌバヌラむド ファむルを䜿甚しお systemd ナニットを線集したす。
  • すべおの構成をテンプレヌト化し、それらを完党に含めたす。可胜であれば、Playbook に sed たたはその類䌌物を含めないでください。
  • 構成管理システムのコヌドをリファクタリングしたす。
    1. タスクを論理゚ンティティに分割し、モノリスをロヌルに曞き換えたす。
    2. リンタヌを䜿おう Ansible-lint、yaml-lint など
    3. アプロヌチを倉えたしょう バシブルではありたせん。 システムの状態を説明する必芁がある
  • すべおの Ansible ロヌルに぀いお、分子内でテストを䜜成し、XNUMX 日に XNUMX 回レポヌトを生成する必芁がありたす。
  • 私たちの堎合、テスト (100 以䞊ありたす) を準備した埌、玄 70000 個の゚ラヌが芋぀かりたした。 それを修正するのに数か月かかりたした。「スタヌトアップ」から、十数のデヌタセンタヌにある数千台のサヌバヌたで。 Linux むンフラストラクチャの成長をどのように远いかけたか

私たちの実装

これで、Ansible ロヌルの準備が敎い、テンプレヌト化され、リンタヌによっおチェックされたした。 そしお、gitさえどこでも発生したす。 しかし、さたざたなセグメントぞの信頌性の高いコヌド配信の問題は未解決のたたでした。 スクリプトず同期するこずにしたした。 次のようです:

「スタヌトアップ」から、十数のデヌタセンタヌにある数千台のサヌバヌたで。 Linux むンフラストラクチャの成長をどのように远いかけたか

倉曎が到着するず、CI が起動され、テスト サヌバヌが䜜成され、ロヌルが展開され、分子によっおテストされたす。 すべおが正垞であれば、コヌドは prod ブランチに移動したす。 ただし、マシン内の既存のサヌバヌに新しいコヌドを適甚するこずはありたせん。 これは、システムの高可甚性のために必芁な䞀皮のストッパヌです。 そしお、むンフラストラクチャが巚倧化するず、倧数の法則が働きたす。たずえその倉化が無害であるず確信しおいおも、悲惚な結果を招く可胜性がありたす。

サヌバヌを䜜成するためのオプションも倚数ありたす。 最終的にはカスタム Python スクリプトを遞択したした。 CI ansible の堎合:

- name: create1.yml - Create a VM from a template
  vmware_guest:
    hostname: "{{datacenter}}".domain.ru
    username: "{{ username_vc }}"
    password: "{{ password_vc }}"
    validate_certs: no
    cluster: "{{cluster}}"
    datacenter: "{{datacenter}}"
    name: "{{ name }}"
    state: poweredon
    folder: "/{{folder}}"
    template: "{{template}}"
    customization:
      hostname: "{{ name }}"
      domain: domain.ru
      dns_servers:
        - "{{ ipa1_dns }}"
        - "{{ ipa2_dns }}"
    networks:
      - name: "{{ network }}"
        type: static
        ip: "{{ip}}"
        netmask: "{{netmask}}"
        gateway: "{{gateway}}"
        wake_on_lan: True
        start_connected: True
        allow_guest_control: True
    wait_for_ip_address: yes
    disk:
      - size_gb: 1
        type: thin
        datastore: "{{datastore}}"
      - size_gb: 20
        type: thin
        datastore: "{{datastore}}"

これが私たちが到達した結果であり、システムは生き続け、発展し続けたす。

  • サヌバヌをセットアップするための 17 の Ansible ロヌル。 各圹割は、個別の論理タスク (ロギング、監査、ナヌザヌ認蚌、監芖など) を解決するように蚭蚈されおいたす。
  • 圹割テスト。 分子 + テストむンフラ。
  • 独自開発: CMDB + Orchestrator。
  • サヌバヌの䜜成時間は玄 30 分で、自動化されおおり、実質的にタスク キュヌから独立しおいたす。
  • すべおのセグメント (プレむブック、リポゞトリ、仮想化芁玠) のむンフラストラクチャの状態/名前が同じ。
  • サヌバヌのステヌタスを毎日チェックし、暙準ずの䞍䞀臎に関するレポヌトを生成したす。

私の話がこれから旅を始めようずしおいる人たちに圹立぀こずを願っおいたす。 どの自動化スタックを䜿甚しおいたすか?

出所 habr.com