Vun engem "Startup" bis Dausende vu Serveren an enger Dosen Rechenzentren. Wéi mir de Wuesstum vun der Linux Infrastruktur gejot hunn

Wann Är IT Infrastruktur ze séier wiisst, wäert Dir fréier oder spéider mat engem Choix konfrontéiert sinn: linear d'Mënscherechter erhéijen fir se z'ënnerstëtzen oder d'Automatisatioun unzefänken. Bis zu engem Moment hu mir am éischte Paradigma gelieft, an dunn huet de laange Wee op Infrastructure-as-Code ugefaang.

Vun engem "Startup" bis Dausende vu Serveren an enger Dosen Rechenzentren. Wéi mir de Wuesstum vun der Linux Infrastruktur gejot hunn

Natierlech ass NSPK keen Startup, awer sou eng Atmosphär huet an der Firma an den éischte Joere vu senger Existenz regéiert, an dat waren ganz interessant Joeren. Mäin Numm ass Kornyakov Dmitry, Ech hunn Linux Infrastruktur mat héijer Disponibilitéit Ufuerderunge fir iwwer 10 Joer ënnerstëtzt. Hien ass an der NSPK Equipe am Januar 2016 an, leider, gesinn net ganz Ufank vun der Firma d'Existenz, mä koum an enger Etapp vu groussen Ännerungen.

Am Allgemengen kënne mir soen datt eis Team 2 Produkter fir d'Firma liwwert. Déi éischt ass d'Infrastruktur. E-Mail soll funktionnéieren, DNS soll funktionnéieren, an Domain Controller sollten Iech op Servere loossen déi net solle Crash. D'IT Landschaft vun der Firma ass enorm! Dëst si Geschäfts- a Missiounskritesch Systemer, d'Disponibilitéitsufuerderunge fir e puer sinn 99,999. Dat zweet Produkt ass d'Servere selwer, kierperlech a virtuell. Bestehend mussen iwwerwaacht ginn, an neier musse regelméisseg u Clienten aus villen Departementer geliwwert ginn. An dësem Artikel wëll ech konzentréieren op wéi mir d'Infrastruktur entwéckelt hunn, déi fir de Server Liewenszyklus verantwortlech ass.

Start vun der Rees

Um Ufank vun eiser Rees huet eisen Technologiestack esou ausgesinn:
OS CentOS 7
FreeIPA Domain Controller
Automatioun - Ansible (+Tower), Cobbler

All dëst war an 3 Domainen, verdeelt iwwer verschidden Datenzenteren. An engem Rechenzentrum ginn et Bürosystemer an Testplazen, am Rescht gëtt et PROD.

Serveren op engem Punkt erstellen huet sou ausgesinn:

Vun engem "Startup" bis Dausende vu Serveren an enger Dosen Rechenzentren. Wéi mir de Wuesstum vun der Linux Infrastruktur gejot hunn

An der VM Schabloun ass CentOS minimal an de erfuerderleche Minimum ass wéi déi richteg /etc/resolv.conf, de Rescht kënnt duerch Ansible.

CMDB - Excel.

Wann de Server kierperlech ass, anstatt déi virtuell Maschinn ze kopéieren, gouf d'OS op et mat Cobbler installéiert - d'MAC Adressen vum Zilserver ginn an d'Cobbler Configuratioun bäigefüügt, de Server kritt eng IP Adress iwwer DHCP, an dann den OS gëtt dobäi.

Am Ufank hu mir souguer probéiert eng Aart vu Konfiguratiounsmanagement am Cobbler ze maachen. Awer mat der Zäit huet dëst ugefaang Probleemer mat der Portabilitéit vu Konfiguratiounen ze bréngen souwuel an aner Datenzenteren an den Ansible Code fir VMs virzebereeden.

Zu där Zäit hu vill vun eis Ansible als eng praktesch Verlängerung vu Bash ugesinn an hunn net op Designen mat Shell a Sed gespuert. Allgemeng Bashsible. Dëst huet schlussendlech zu der Tatsaach gefouert datt wann d'Playbook aus iergendengem Grond net um Server funktionnéiert, et méi einfach war de Server ze läschen, d'Playbook ze fixéieren an et erëm ze lafen. Et war wesentlech keng Versioun vu Skripte, keng Portabilitéit vu Konfiguratiounen.

Zum Beispill wollte mir e puer Configuratioun op all Server änneren:

  1. Mir änneren d'Konfiguratioun op bestehend Serveren am logesche Segment / Datenzenter. Heiansdo net an engem Dag - Accessibilitéit Ufuerderunge an d'Gesetz vun grouss Zuelen erlaben net all Ännerungen op eemol applizéiert ginn. An e puer Ännerungen sinn potenziell zerstéierend a erfuerderen eppes nei ze starten - vu Servicer bis zum OS selwer.
  2. Fixéiert et an Ansible
  3. Mir fixen et am Cobbler
  4. Widderhuelen N mol fir all logesch Segment / Daten Zentrum

Fir datt all d'Ännerunge glat ginn, war et néideg vill Faktoren ze berücksichtegen, an d'Verännerunge geschéien stänneg.

  • Refactoring ansible Code, Configuratiounsdateien
  • Intern Best Practices änneren
  • Ännerungen baséiert op d'Resultater vun Analyse vun Tëschefäll / Accidenter
  • Verännert Sécherheetsnormen, souwuel intern wéi extern. Zum Beispill gëtt PCI DSS all Joer mat neien Ufuerderunge aktualiséiert

Infrastrukturwuesstem an den Ufank vun der Rees

D'Zuel vun de Serveren / logesch Domainen / Daten Zentren gewuess, a mat hinnen d'Zuel vun de Feeler an Konfiguratiounen. Irgendwann si mir op dräi Richtungen ukomm an deenen d'Konfiguratiounsmanagement muss entwéckelt ginn:

  1. Automatisatioun. Mënschleche Feeler bei repetitive Operatiounen solle sou vill wéi méiglech vermeit ginn.
  2. Widderhuelbarkeet. Et ass vill méi einfach d'Infrastruktur ze managen wann et prévisibel ass. D'Konfiguratioun vu Serveren an Tools fir hir Virbereedung sollt iwwerall d'selwecht sinn. Dëst ass och wichteg fir Produktteams - nom Test muss d'Applikatioun garantéiert sinn an engem Produktiounsëmfeld opzehalen, dat ähnlech wéi d'Testëmfeld konfiguréiert ass.
  3. Einfachheet an Transparenz fir Ännerungen an der Konfiguratiounsmanagement ze maachen.

Et bleift e puer Tools ze addéieren.

Mir hunn GitLab CE als eise Code Repository gewielt, net zulescht fir seng agebaute CI / CD Moduler.

Vault of Secrets - Hashicorp Vault, inkl. fir déi grouss API.

Testen Konfiguratiounen an ansible Rollen - Molekül + Testinfra. Tester gi vill méi séier wann Dir mat engem ansible Mitogen verbënnt. Zur selwechter Zäit hu mir ugefaang eisen eegene CMDB an den Orchester fir automatesch Deployment ze schreiwen (am Bild uewen Cobbler), awer dëst ass eng komplett aner Geschicht, déi mäi Kolleg an den Haaptentwéckler vun dëse Systemer an Zukunft erzielen.

Eise Choix:

Molekül + Testinfra
Ansible + Tower + AWX
World of Servers + DITNET (Eegen Entwécklung)
Schauber
Gitlab + GitLab Runner
Hashicorp Vault

Vun engem "Startup" bis Dausende vu Serveren an enger Dosen Rechenzentren. Wéi mir de Wuesstum vun der Linux Infrastruktur gejot hunn

Iwwregens, iwwer ansible Rollen. Fir d'éischt war et nëmmen eng, mee no e puer Refactoring waren et der 17. Ech recommandéieren staark de Monolith an idempotent Rollen ze briechen, déi dann separat lancéiert kënne ginn, zousätzlech kënnt Dir Tags addéieren. Mir hunn d'Rollen no Funktionalitéit opgedeelt - Netzwierk, Logbuch, Packagen, Hardware, Molekül etc. Am Allgemengen hu mir d'Strategie hei ënnen gefollegt. Ech insistéieren net datt dëst déi eenzeg Wourecht ass, awer et huet fir eis geschafft.

  • Serveren aus dem "gëllene Bild" kopéieren ass béis!Den Haaptnodeel ass datt Dir net genau wësst wat d'Biller elo sinn, an datt all Ännerungen op all Biller an all Virtualiséierungsbaueren kommen.
  • Benotzen Default Configuratioun Fichieren op e Minimum an averstanen mat aneren Departementer datt Dir fir d'Haaptrei System Fichieren responsabel sinn, zum Beispill:
    1. Loosst /etc/sysctl.conf eidel sinn, d'Astellunge sollen nëmmen an /etc/sysctl.d/ sinn. Äre Standard an enger Datei, personaliséiert fir d'Applikatioun an engem aneren.
    2. Benotzt Iwwerschrëftdateien fir systemd Eenheeten z'änneren.
  • Schabloun all Configuratioun an enthalen se ganz; wa méiglech, kee Sed oder seng Analoga a Spillbicher
  • Refactoring vum Konfiguratiounsmanagement System Code:
    1. Break Aufgaben a logesch Entitéiten of a schreift de Monolith a Rollen ëm
    2. Benotzt Linters! Ansible-lint, yaml-lint, etc
    3. Ännert Är Approche! Nee bashsible. Et ass néideg den Zoustand vum System ze beschreiwen
  • Fir all Ansible Rollen musst Dir Tester a Molekül schreiwen a Berichter eemol am Dag generéieren.
  • An eisem Fall, no der Virbereedung vun den Tester (vun deenen et méi wéi 100 sinn), goufen ongeféier 70000 Feeler fonnt. Et huet e puer Méint gedauert fir et ze fixéieren.Vun engem "Startup" bis Dausende vu Serveren an enger Dosen Rechenzentren. Wéi mir de Wuesstum vun der Linux Infrastruktur gejot hunn

Eis Ëmsetzung

Also, déi ansible Rollen ware prett, geschaaft a gepréift vu Linters. A souguer gits ginn iwwerall opgewuess. Mä d'Fro vun zouverlässeg Code Liwwerung zu verschiddene Segmenter blouf oppen. Mir hu beschloss mat Scripten ze synchroniséieren. Gesäit esou aus:

Vun engem "Startup" bis Dausende vu Serveren an enger Dosen Rechenzentren. Wéi mir de Wuesstum vun der Linux Infrastruktur gejot hunn

Nodeems d'Ännerung ukomm ass, gëtt CI gestart, en Testserver gëtt erstallt, Rollen ginn ausgerullt a vum Molekül getest. Wann alles ok ass, geet de Code an d'Prod Branche. Awer mir gëllen net neie Code op existent Serveren an der Maschinn. Dëst ass eng Zort Stopper déi néideg ass fir eng héich Disponibilitéit vun eise Systemer. A wann d'Infrastruktur enorm gëtt, kënnt d'Gesetz vun de groussen Zuelen an d'Spill - och wann Dir sécher sidd datt d'Ännerung harmlos ass, kann et zu schlëmme Konsequenze féieren.

Et ginn och vill Méiglechkeeten fir Serveren ze kreéieren. Mir hunn endlech personaliséiert Python Scripte gewielt. A fir 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}}"

Dëst ass wat mir ukomm sinn, de System leeft an entwéckelt weider.

  • 17 Ansible Rollen fir de Server opzestellen. Jiddereng vun de Rollen ass entwéckelt fir eng separat logesch Aufgab ze léisen (Protokolléieren, Audit, Benotzerautorisatioun, Iwwerwaachung, asw.).
  • Roll Testen. Molekül + TestInfra.
  • Eegent Entwécklung: CMDB + Orchestrator.
  • Server Kreatiounszäit ass ~ 30 Minutten, automatiséiert a praktesch onofhängeg vun der Taskschlaang.
  • Dee selwechte Staat / Benennung vun der Infrastruktur an alle Segmenter - Playbooks, Repositories, Virtualiséierungselementer.
  • Deeglech Kontroll vum Serverstatus mat Generatioun vu Berichter iwwer Differenzen mam Standard.

Ech hoffen, datt meng Geschicht nëtzlech ass fir déi, déi um Ufank vun hirer Rees sinn. Wéi eng Automatisatiounsstack benotzt Dir?

Source: will.com