FrÄn "startup" till tusentals servrar i ett dussin datacenter. Hur vi jagade tillvÀxten av Linux-infrastrukturen

Om din IT-infrastruktur vĂ€xer för snabbt, kommer du förr eller senare att stĂ„ inför valet – att linjĂ€rt öka personalresurserna för att stödja den, eller att börja automatisera. Fram till en viss punkt levde vi i den första paradigmen, och sedan började den lĂ„nga vĂ€gen mot Infrastructure-as-Code.

FrÄn "startup" till tusentals servrar i ett dussin datacenter. Hur vi jagade tillvÀxten av Linux-infrastrukturen

SjÀlvklart Àr NSPK inte en startup, men en sÄdan atmosfÀr rÄdde i företaget under de första Ären, och det var mycket intressanta Är. Jag heter Dmitrij Kornev, jag har i över 10 Är stöttat Linux-infrastruktur med höga tillgÀnglighetskrav. Jag gick med i NSPK i januari 2016 och fick tyvÀrr inte uppleva företagets början, men jag kom in pÄ en tid med stora förÀndringar.

Överlag kan man sĂ€ga att vĂ„rt team levererar tvĂ„ produkter för företaget. Första produkten Ă€r infrastrukturer. E-posten mĂ„ste gĂ„, DNS mĂ„ste fungera, och domĂ€nkontrollerna mĂ„ste slĂ€ppa in er pĂ„ servrar som inte fĂ„r falla. Företagets IT-landskap Ă€r enormt! Detta Ă€r affĂ€rs- och mission-critical system, vissa har tillgĂ€nglighetskrav pĂ„ 99,999. Den andra produkten Ă€r sjĂ€lva servrarna, bĂ„de fysiska och virtuella. De befintliga mĂ„ste övervakas och nya mĂ„ste regelbundet levereras till kunder frĂ„n mĂ„nga avdelningar. I den hĂ€r artikeln vill jag fokusera pĂ„ hur vi utvecklade infrastrukturen som ansvarar för livscykeln servrar.

Framstegens början

I början av vÄr resa sÄg vÄr teknikstack ut sÄ hÀr:
OS CentOS 7
DomÀnkontroller FreeIPA
Automatisering – Ansible(+Tower), Cobbler

Allt detta var fördelat pÄ 3 domÀner, spridda över flera datacenter. I ett datacenter fanns kontorssystem och testmiljöer, i de andra PROD.

Skapandet av servrar sÄg vid nÄgot tillfÀlle ut sÄ hÀr:

FrÄn "startup" till tusentals servrar i ett dussin datacenter. Hur vi jagade tillvÀxten av Linux-infrastrukturen

I mallen för VM CentOS minimal och den nödvÀndiga minimigrÀnsen som en korrekt /etc/resolv.conf, resten kommer via Ansible.

CMDB – Excel.

Om servern Ă€r fysisk, installeras operativsystemet direkt istĂ€llet för att kopiera en virtuell maskin till den, med hjĂ€lp av Cobbler – MAC-adresserna för den mĂ„lservern lĂ€ggs till i Cobbler-konfigurationen, servern fĂ„r IP-adress via DHCP, och sedan installeras operativsystemet.

I början försökte vi till och med göra nÄgon slags configuration management i Cobbler. Men med tiden började det orsaka problem med portabilitet av konfigurationer bÄde till andra datacenter och i Ansible-kod för att förbereda VM.

MÄnga av oss uppfattade Ansible som en bekvÀm utvidgning av Bash och var inte försiktiga med att anvÀnda konstruktioner med shell, sed. I stort sett var det Bashsible. Detta ledde till att om en playbook av nÄgon anledning inte fungerade pÄ servern, var det enklare att ta bort servern, justera playbooken och köra om. Det fanns i praktiken ingen versionering av skripten, inte heller nÄgon bÀrbarhet i konfigurationerna.

Till exempel ville vi Àndra en konfiguration pÄ alla servrar:

  1. Ändrar konfigurationen pĂ„ befintliga servrar i den logiska segmentet/datacentret. Ibland inte pĂ„ en dag – tillgĂ„ngskrav och storhetens lag tillĂ„ter inte att alla Ă€ndringar tillĂ€mpas pĂ„ en gĂ„ng. Vissa Ă€ndringar kan potentiellt vara destruktiva och krĂ€ver omstart av nĂ„got – frĂ„n tjĂ€nster till sjĂ€lva operativsystemet.
  2. Fixar i Ansible
  3. Fixar i Cobbler
  4. Upprepa N gÄnger för varje logiskt segment/datacenter

För att alla Àndringar ska gÄ smidigt mÄste man ta hÀnsyn till mÄnga faktorer, och Àndringar sker hela tiden.

  • Refaktorering av ansible-kod, konfigurationsfiler
  • Ändring av interna bĂ€sta metoder
  • Ändringar efter utvĂ€rdering av incidenter/olyckor
  • Ändring av sĂ€kerhetsstandarder, bĂ„de interna och externa. Till exempel PCI DSS kompletteras varje Ă„r med nya krav.

TillvÀxt av infrastrukturen och början av resan

Antalet servrar/logiska domÀner/datacenter ökade, liksom antalet fel i konfigurationerna. Vid nÄgot tillfÀlle kom vi fram till tre omrÄden som vi behövde utveckla konfigurationshantering Ät:

  1. Automatisering. SÄ mycket som möjligt, bör vi undvika den mÀnskliga faktorn i repetitiva operationer.
  2. Repetitivitet. Det Ă€r mycket enklare att hantera infrastrukturen nĂ€r den Ă€r förutsĂ€gbar. Konfigurationen av servrar och verktyg för deras förberedelse bör vara densamma överallt. Det Ă€r ocksĂ„ viktigt för produktteam – applikationen mĂ„ste garanteras hamna i produktionsmiljö efter testning, instĂ€lld pĂ„ samma sĂ€tt som testmiljön.
  3. Enkelhet och transparens i att göra Àndringar i konfigurationshanteringen.

Det kvarstÄr bara att lÀgga till ett par verktyg.

Som kodförvaring valde vi GitLab CE, inte minst för dess inbyggda CI/CD-moduler.

För hemlighetslagring – Hashicorp Vault, ocksĂ„ för dess utmĂ€rkta API.

Testkonfigurationer och Ansible-roller – Molecule + Testinfra. Tester gĂ„r mycket snabbare om du ansluter mitogen till Ansible. Samtidigt började vi skriva vĂ„r egen CMDB och orkestrator för automatisk distribution (pĂ„ bilden ovanför Cobbler), men det Ă€r en helt annan historia som min kollega och huvudutvecklare av dessa system kommer att berĂ€tta om i framtiden.

VÄrt val:

Molecule + Testinfra
Ansible + Tower + AWX
VĂ€rlden av servrar + DITNET (Egen utveckling)
Cobbler
Gitlab + GitLab-runner
Hashicorp Vault

FrÄn "startup" till tusentals servrar i ett dussin datacenter. Hur vi jagade tillvÀxten av Linux-infrastrukturen

Förresten om Ansible-roller. Till en början fanns det bara en, men efter flera refaktoriseringar blev det 17. Jag rekommenderar starkt att dela upp monoliten i idempotenta roller som kan köras separat, och ni kan dessutom lĂ€gga till taggar. Vi delade upp rollerna baserat pĂ„ funktionalitet – nĂ€tverk, loggning, paket, hĂ„rdvara, molekyl osv. Och i allmĂ€nhet följde vi strategin nedan. Jag pĂ„stĂ„r inte att detta Ă€r den enda sanna metoden, men det fungerade för oss.

  • Kopiera servrar frĂ„n "guldbilden" – en dĂ„lig idĂ©!De huvudsakliga nackdelarna Ă€r att du helt enkelt inte vet i vilket skick bilderna Ă€r just nu, och att alla Ă€ndringar kommer att pĂ„verka alla bilder i alla virtualiseringsfarmar.
  • AnvĂ€nd standardkonfigurationsfiler sĂ„ lite som möjligt och kom överens med andra avdelningar om att du ansvarar för de huvudsakliga systemfilerna, till exempel:
    1. LÀmna /etc/sysctl.conf tom, instÀllningarna bör ligga i /etc/sysctl.d/. Din standard i en fil, anpassningar för applikationen i en annan.
    2. AnvÀnd override-filer för att redigera systemd-enheter.
  • Mallar alla konfigurationer och lĂ€gg in dem helt, sĂ„ mycket som möjligt inga sed- eller liknande kommandon i playbooks.
  • Refaktorisera koden för konfigurationshanteringssystemet:
    1. Dela upp uppgifterna i logiska enheter och skriv om monoliten till roller.
    2. AnvÀnd linters! Ansible-lint, yaml-lint, osv.
    3. Ändra tillvĂ€gagĂ„ngssĂ€tt! Ingen bashsible. Det behöver beskrivas hur systemets tillstĂ„nd ska vara.
  • För alla Ansible-roller mĂ„ste tester skrivas i Molecule och rapporter genereras en gĂ„ng om dagen.
  • I vĂ„rt fall, efter att testerna (mer Ă€n 100) förbereddes, hittades omkring 70 000 fel. Det tog flera mĂ„nader att rĂ€tta till.FrĂ„n "startup" till tusentals servrar i ett dussin datacenter. Hur vi jagade tillvĂ€xten av Linux-infrastrukturen

VÄr implementering

SÄ, Ansible-rollerna var klara, mallade och kontrollerade av linters. Och Àven git var uppe överallt. Men frÄgan om tillförlitlig kodleverans till olika segment förblev öppen. Vi beslutade att synkronisera med skript. SÄ hÀr ser det ut:

FrÄn "startup" till tusentals servrar i ett dussin datacenter. Hur vi jagade tillvÀxten av Linux-infrastrukturen

Efter att Ă€ndringen har anlĂ€nt, startas CI, en testserver skapas, roller körs och testas med Molecule. Om allt ser bra ut, gĂ„r koden till produktionsgrenen. Men vi tillĂ€mpar inte ny kod pĂ„ existerande servrar automatiskt. Detta Ă€r en slags stoppmekanism som behövs för att sĂ€kerstĂ€lla hög tillgĂ€nglighet i vĂ„ra system. NĂ€r infrastrukturen blir enorm, spelar ocksĂ„ storhetens lag in – Ă€ven om du Ă€r sĂ€ker pĂ„ att förĂ€ndringen Ă€r harmlös, kan den leda till sorgliga konsekvenser.

Det finns mÄnga alternativ för att skapa servrar. Vi valde till slut anpassade skript i Python. Och för CI anvÀnder vi Ansible:

- name: create1.yml - Skapa en VM frÄn en mall
  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}}"

SÄ hÀr har vi kommit fram, systemet fortsÀtter att leva och utvecklas.

  • 17 Ansible-roller för serverkonfiguration. Varje roll Ă€r avsedd för att lösa en specifik logisk uppgift (loggning, revision, anvĂ€ndarautentisering, övervakning osv.).
  • Testning av roller. Molecule + TestInfra.
  • Egenutveckling: CMDB + Orkestrator.
  • Serverns skapande tar cirka 30 minuter, Ă€r automatiserat och pĂ„verkas praktiskt taget inte av köer av uppgifter.
  • Samma tillstĂ„nd/namn pĂ„ infrastrukturen i alla segment – playbooks, repository, virtualiseringselement.
  • Daglig kontroll av serverstatus med rapportgenerering om avvikelser frĂ„n standard.

Jag hoppas att min berÀttelse kommer att vara anvÀndbar för dem som Àr i början av sin resa. Vilken automatiseringsstack anvÀnder ni?

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster