Maitiro eSystem kune akasiyana muAnsible

ansible devops codestyle

Hey! Zita randu ndi Denis Kalyuzhny Ini ndinoshanda sainjiniya mudhipatimendi rekuvandudza otomatiki. Zuva rega rega, zvivakwa zvitsva zvekushandisa zvinoburitswa pamazana emaseva emushandirapamwe. Uye mune ino chinyorwa ini ndinogovera ruzivo rwangu rwekushandisa Ansible kune izvi zvinangwa.

Gwaro iri rinopa nzira yekuronga zvinosiyana mukutumirwa. Gwaro iri rakaitirwa avo vanotoshandisa mabasa mumabhuku avo ekutamba uye vakaverenga BestPractices, asi anotarisana nematambudziko akafanana:

  • Mushure mekuwana shanduko mukodhi, hazvibviri kuti unzwisise pakarepo kuti chii chinokonzera;
  • Kune mabasa akati wandei, uye zvinosiyana zvinoda kubatanidzwa nehumwe kukosha, asi hazvishande;
  • Kunetseka kutsanangurira vamwe mashandiro anoita mabatiro ari mumabhuku ako ekutamba

Takasangana nematambudziko aya pamapurojekiti mukambani yedu, semhedzisiro yatakasvika pamitemo yekugadzira zvinosiyana mumabhuku edu ekutamba, izvo zvakagadzirisa matambudziko aya.

Maitiro eSystem kune akasiyana muAnsible

Variables mumabasa

Basa ndechimwe Chinhu chakasiyana cheiyo deployment system. Kufanana nechero system chinhu, inofanirwa kunge iine interface yekudyidzana neyese system. Chiratidziro chakadaro chine misiyano yebasa.

Ngatitore, semuenzaniso, basa api, iyo inoisa Java application pane server. Ndezvipi zvakasiyana-siyana zvingave nazvo?

Maitiro eSystem kune akasiyana muAnsible

Variable mabasa anogona kukamurwa kuva 2 mhando zvichienderana nerudzi:

1. Свойства
    a) независимые от среды
    б) зависимые от среды
2. Связи
    a) слушатели 
    б) запросы внутри системы
    в) запросы в среду

Variable properties zvinhu zvakasiyana-siyana zvinosarudza maitiro ebasa.

Query Variables - Aya ndiwo mavhezheni ayo kukosha kwawo kunoshandiswa kuratidza zviwanikwa zvekunze kune basa.

Variable vateereri - aya ndiwo mavhezheni ayo kukosha kwawo kunoshandiswa kugadzira zvikumbiro zvakasiyana.

Kune rimwe divi, 1a, 2a, 2b zvinosiyana zvisingaenderane nenharaunda (hardware, zvekunze zviwanikwa, nezvimwewo) uye zvinogona kuzadzwa nemaitiro akasarudzika mune iyo default basa. Nekudaro, hazvigoneke kuzadza akasiyana emhando 1.b uye 2.c nehunhu kunze kwe 'muenzaniso', sezvo achizochinja kubva pakamira kuenda kumira zvichienderana nenharaunda.

Code style

  • Zita rakasiyana rinofanira kutanga nezita rebasa. Izvi zvinozoita kuti zvive nyore kuona mune ramangwana kuti mutsauko unobva kupi uye kuti unokonzeresa chii.
  • Paunenge uchishandisa zvinoshanduka mumabasa, iwe unofanirwa kuve nechokwadi chekutevera musimboti we encapsulation uye kushandisa zvinosiyana zvinotsanangurwa mungave mune iro basa pacharo kana mumabasa anoenderana neazvino.
  • Dzivisa kushandisa maduramazwi kune zvakasiyana. Ansible haakubvumidze kuti uwedzere zviri nyore hunhu hwemunhu muduramazwi.

    Muenzaniso wekusiyana kwakashata:

    myrole_user:
        login: admin
        password: admin

    Pano login ndiyo yakazvimirira yakasiyana, uye password ndiyo inotsamira yakasiyana. Asi
    sezvo zvabatanidzwa kuita duramazwi, uchafanirwa kuzvitsanangura zvizere
    Nguva dzose. Zvinova zvisina kunaka. Zviri nani neiyi nzira:

    myrole_user_login: admin
    myrole_user_password: admin

Variables mu deployment playbooks

Paunenge uchigadzira bhuku rekutamba rekutumirwa (rinozonzi bhuku rekutamba), tinotevedzera mutemo wekuti rinofanira kuiswa mune imwe nzvimbo inochengeterwa. Zvakafanana nemabasa: imwe neimwe mune yayo git repository. Izvi zvinokutendera kuti unzwisise kuti mabasa uye bhuku rekutamba zvinhu zvakasiyana zvakazvimirira zveiyo deployment system, uye shanduko mune chimwe chinhu haifanire kukanganisa kushanda kwechimwe. Izvi zvinowanikwa nekushandura iyo default values ​​yezvinosiyana.

Paunenge uchigadzira bhuku rekutamba, kupfupisa, zvinokwanisika kupfuudza zvimiro zvekusarudzika zvekusiyana kwenzvimbo munzvimbo mbiri: mumabhuku ekutamba akasiyana uye mune eventory akasiyana.

mydeploy                        # Каталог деплоя
├── deploy.yml                  # Плейбук деплоя
├── group_vars                  # Каталог переменных плейбука
│   ├── all.yml                 # Файл для переменных связи всей системы
│   └── myapi.yml               # Файл переменных свойств группы myapi
└── inventories                 #
    └── prod                    # Каталог окружения prod
        ├── prod.ini            # Инвентори файл
        └── group_vars          # Каталог для переменных инвентори
            └── myapi           #
                ├── vars.yml    # Средозависимые переменные группы myapi
                └── vault.yml   # Секреты (всегда средозависимы) *

* - Variables uye Vaults

Musiyano ndewekuti mavara ekutamba anogara achishandiswa pakufonera mabhuku ekutamba ari padanho rakafanana nayo. Izvi zvinoreva kuti izvi zvakasiyana-siyana zvakakura pakushandura hunhu hwekusarudzika hwezvakatipoteredza-zvakazvimiririra zvinosiyana. Sezvineiwo, vhezheni yezvinyorwa zvinongo shandiswa kune yakatarwa nharaunda, iyo yakanakira nharaunda-chaiwo mutsauko.

Izvo zvakakosha kuti uzive kuti kusiyanisa kwekutanga hakukubvumire iwe kupfuudza mavheti kutanga mumadhizaini ebhuku rekutamba wozopatsanura mune imwe hesera.

Izvi zvinoreva kuti nechekare padanho rino zvakakosha kuti usarudze kuti shanduko yacho inoenderana nenharaunda here kana kuti kwete uye woiisa panzvimbo yakakodzera.

Semuyenzaniso, mune imwe purojekiti, iyo shanduko ine chekuita nekugonesa SSL yaive yakatsamira nharaunda kwenguva yakareba, sezvo isu takatadza kugonesa SSL nekuda kwezvikonzero zvatisingakwanisi kutonga pane imwe yemastand. Mushure mekunge tagadzirisa dambudziko iri, rakave rakazvimiririra nharaunda uye rakatamira kune zvinyorwa zvebhuku rekutamba.

Property Variables for Groups

Ngatiwedzerei modhi yedu muMufananidzo 1 nekuwedzera 2 mapoka emaseva ane akasiyana Java application, asi aine akasiyana marongero.

Maitiro eSystem kune akasiyana muAnsible

Ngatimbofungidzira kuti bhuku rekutamba richataridzika sei mune iyi kesi:

- hosts: myapi
  roles:
    - api

- hosts: bbauth
  roles:
    - auth

- hosts: ghauth
  roles:
    - auth

Tine mapoka matatu mubhuku rekutamba, saka zvinokurudzirwa kugadzira nhamba imwechete yemafaira eboka mugroup_vars eventory variables uye playbook variables. Rimwe faira reboka mune iyi rondedzero itsanangudzo yechimwe chikamu chepamusoro application mubhuku rekutamba. Paunovhura faira reboka muzvinyorwa zvebhuku rekutamba, unobva waona misiyano yese kubva pamaitiro ekutanga emabasa akaiswa paboka. Inventory variables: kusiyana kwemaitiro eboka kubva pamira kusvika pakamira.

Code Style

  • Edza kusashandisa host_vars kusiyanisa zvachose, sezvo vasingatsananguri hurongwa, asi chete nyaya yakakosha, iyo mune ramangwana ichatungamira kumibvunzo: "Sei muenzi uyu akasiyana nevamwe?", mhinduro kune iyo isiri iyo. nguva dzose nyore kuwana.

Kukurukurirana Variables

Nekudaro, ndozvinoita midziyo yakasiyana-siyana, asi zvakadini nekusiyana kwekutaurirana?
Musiyano wavo ndewekuti vanofanira kuva nechirevo chimwe chete mumapoka akasiyana.

Pakutanga zvakanga zvakadaro pfungwa shandisa chigadzirwa chinotyisa se:
hostvars[groups['bbauth'][0]]['auth_bind_port'], asi vakabva varamba
nekuti ine disavantages. Chekutanga, bulkiness. Chechipiri, kutsamira pane mumwe munhu anotambira muboka. Chechitatu, tisati tatanga kutumirwa, zvinodikanwa kuunganidza chokwadi kubva kune vese vanogamuchira kana isu tisingadi kuwana kukanganisa kweiyo isina kutsanangurwa vhezheni.

Nekuda kweizvozvo, zvakasarudzwa kushandisa shanduko dzekutaurirana.

Kukurukurirana Variables - Aya ndiwo akasiyana ari ebhuku rekutamba uye anodiwa kubatanidza zvinhu zvehurongwa.

Nhaurirano siyana dzinogarwa mune general system variables group_vars/all/vars uye zvinoumbwa nekubvisa zvose zvinosiyana-siyana zvevateereri kubva muboka rega rega, uye nekuwedzera zita reboka iro muteereri akabviswa kubva pakutanga kwekuchinja.

Izvi zvinovimbisa kufanana uye kusapindirana kwemazita.

Ngatiedzei kusunga zvinosiyana kubva pamuenzaniso uri pamusoro:

Maitiro eSystem kune akasiyana muAnsible

Ngatimbofungidzira kuti isu tine zvinosiyana zvinoenderana nemumwe:

# roles/api/defaults:
# Переменная запроса
api_auth1_address: "http://example.com:80"
api_auth2_address: "http://example2.com:80"

# roles/auth/defaults:
# Переменная слушатель
auth_bind_port: "20000"

Ngatiiise muzvinhu zvakajairika group_vars/all/vars vateereri vese, uye wedzera zita reboka kune zita:

# group_vars/all/vars
bbauth_auth_bind_port: "20000"
ghauth_auth_bind_port: "30000"

# group_vars/bbauth/vars
auth_bind_port: "{{ bbauth_auth_bind_port }}"

# group_vars/ghauth/vars
auth_bind_port: "{{ ghauth_auth_bind_port }}"

# group_vars/myapi/vars
api_auth1_address: "http://{{ bbauth_auth_service_name }}:{{ bbauth_auth_bind_port }}"
api_auth2_address: "http://{{ ghauth_auth_service_name }}:{{ ghauth_auth_bind_port }}"

Iye zvino, nekushandura kukosha kwekubatanidza, tichava nechokwadi chokuti chikumbiro chichaenda kune imwe nzvimbo iyo chiteshi chiripo.

Code Style

  • Sezvo mabasa nemapoka ari akasiyana ehurongwa zvinhu, anofanirwa kuve nemazita akasiyana, ipapo maratidziro ekubatanidza anozonyatso ratidza kuti ndeaya eboka remaseva, uye kwete kune chikamu muhurongwa.

Mafaira anoenderana nenharaunda

Mabasa anogona kushandisa mafaera akasiyana kubva kunharaunda nenzvimbo.

Muenzaniso wemafaira akadaro SSL zvitupa. Zvichengete muchimiro chemavara
mune vhezheni haina kunyatso batsira. Asi zviri nyore kuchengetedza nzira kwavari mukati mekusiyana.

Semuenzaniso, tinoshandisa dhizaini api_ssl_key_file: "/path/to/file".

Sezvo zviri pachena kuti chitupa kiyi chichachinja kubva kunharaunda kuenda kune zvakatipoteredza, iyi inoenderana-inotenderera nharaunda, zvinoreva kuti inofanirwa kunge iri mufaira.
group_vars/myapi/vars inventory yezvinosiyana, uye ine kukosha 'somuenzaniso'.

Iyo yakanyanya nyore nzira mune iyi kesi ndeyekuisa kiyi faira mu playbook repository munzira
files/prod/certs/myapi.key, ipapo kukosha kwekusiyana kuchava:
api_ssl_key_file: "prod/certs/myapi.key". Izvo zviri nyore zviri mukuti vanhu vane basa rekuendesa sisitimu pane imwe nzvimbo inomira zvakare vane yavo nzvimbo yakatsaurirwa mudura rekuchengetedza mafaera avo. Panguva imwecheteyo, zvinoramba zvichigoneka kutsanangura nzira yakakwana kune chitupa pane sevha, kana zvitupa zvinopihwa neimwe system.

Mazhinji anomira munzvimbo imwe chete

Kazhinji panodiwa kuendesa zviteshi zvakada kufanana munzvimbo imwe chete ine misiyano mishoma. Muchiitiko ichi, tinoparadzanisa zvisikwa-zvinoenderana nemamiriro ezvinhu kune izvo zvisingashanduki mukati meiyi nharaunda uye izvo zvinoshanduka. Uye isu tinoendesa iyo yekupedzisira zvakananga mumafaira ezvinyorwa ivo pachavo. Mushure mekuita uku, zvinogoneka kugadzira imwe inventory zvakananga mudhairekitori rezvakatipoteredza.

Ichashandisa zvakare iyo group_vars inventory, uye zvakare ichakwanisa kutsanangudza mamwe mavhezheni zvakananga pachayo.

Iyo yekupedzisira dhairekitori chimiro cheiyo deployment purojekiti:

mydeploy                        # Каталог деплоя
├── deploy.yml                  # Плейбук деплоя
├── files                       # Каталог для файлов деплоя
│   ├── prod                    # Католог для средозависимых файлов стенда prod
│   │   └── certs               # 
│   │       └── myapi.key       #
│   └── test1                   # Каталог для средозависимых файлов стенда test1
├── group_vars                  # Каталог переменных плейбука
│   ├── all.yml                 # Файл для переменных связи всей системы
│   ├── myapi.yml               # Файл переменных свойств группы myapi
│   ├── bbauth.yml              # 
│   └── ghauth.yml              #
└── inventories                 #
    ├── prod                    # Каталог окружения prod
    │   ├── group_vars          # Каталог для переменных инвентори
    │   │   ├── myapi           #
    │   │   │   ├── vars.yml    # Средозависимые переменные группы myapi
    │   │   │   └── vault.yml   # Секреты (всегда средозависимы)
    │   │   ├── bbauth          # 
    │   │   │   ├── vars.yml    #
    │   │   │   └── vault.yml   #
    │   │   └── ghauth          #
    │   │       ├── vars.yml    #
    │   │       └── vault.yml   #
    │   └── prod.ini            # Инвентори стенда prod
    └── test                    # Каталог окружения test
        ├── group_vars          #
        │   ├── myapi           #
        │   │   ├── vars.yml    #
        │   │   └── vault.yml   #
        │   ├── bbauth          #
        │   │   ├── vars.yml    #
        │   │   └── vault.yml   #
        │   └── ghauth          #
        │       ├── vars.yml    #
        │       └── vault.yml   #
        ├── test1.ini           # Инвентори стенда test1 в среде test
        └── test2.ini           # Инвентори стенда test2 в среде test

Kupfupisa

Mushure mekugadzirisa zvinoshanduka zvinoenderana nechinyorwa: faira imwe neimwe inoshanduka inobata basa rakati. Uye sezvo iyo faira ine mamwe mabasa, zvakave zvinogoneka kugovera mumwe munhu ane mhosva yekurongeka kwefaira rega rega. Semuenzaniso, mugadziri weiyo system deployment anove ane mutoro wekuzadza kwakaringana kwezvakasiyana-siyana zvebhuku rekutamba, ukuwo maneja uyo ane chimiro chakatsanangurwa munhevedzano ane basa rakananga rekuzadza dhairekitori yezvakasiyana.

Mabasa akave chikamu chekusimudzira chakasiyana nechawo chimiro, zvichibvumira mugadziri webasa kukudziridza hunyanzvi pane kugadzirisa basa kune sisitimu. Dambudziko iri rakanyanya kutarisana nemabasa akafanana ehurongwa hwese mumushandirapamwe.

MaSistimu maneja havachada kunzwisisa deployment code. Zvese zvinodikanwa kwavari kuti vabudirire kutumirwa kuzadza mafaera ezvakasiyana-zvinoenderana nenharaunda.

Literature

  1. Zvinyorwa

Munyori

Kalyuzhny Denis Alexandrovich

Source: www.habr.com

Voeg