Ինչպես տեղադրել և կարգավորել Ansible-ը Ubuntu 20.04-ում


Այս ձեռնարկը գոյություն ունի ՕՀ-ի այս տարբերակների համար

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 20.04 (Կիզակետային Fossa)
  • Ubuntu 18.04 (Bionic Beaver)

Այս էջում

  1. Նախադրյալներ
  2. Տեղադրեք Ansible-ը
  3. Գույքագրման ֆայլի կարգավորում

    1. Սերվերների կազմակերպում խմբերի և ենթախմբերի
  4. Կարգավորեք SSH ստեղները

    1. Տեղադրեք SSH ստեղները հանգույցներում առկա հանրային բանալիով
  5. Փորձարկման միացում
  6. Գործարկել որոշ հիմնական հրամաններ

    1. Ստուգեք սկավառակի օգտագործումը
    2. Թիրախավորեք անհատական հյուրընկալողներին և խմբերին
    3. Թարմացրեք բոլոր սերվերները
  7. Եզրակացություն

Ansible-ը շատ հայտնի կոնֆիգուրացիայի կառավարման գործիք է, որը նախատեսված է մեծ թվով սերվերների վերահսկման գործընթացը պարզեցնելու համար: Դուք կարող եք կառավարել այնքան սերվերներ և գործարկել գործընթացները միաժամանակ մեկ հանգույցից:

Ansible-ը չի պահանջում որևէ հատուկ ծրագրակազմ, որը պետք է տեղադրվի սերվերի հանգույցներում և կարող է կառավարել դրանք SSH-ի միջոցով:

Այս ուղեցույցում մենք կսովորենք, թե ինչպես տեղադրել և կարգավորել Ansible-ը Ubuntu 20.04 սերվերի վրա:

Նախադրյալներ

  • Երկու կամ ավելի Ubuntu 20.04-ի վրա հիմնված սերվերային համակարգեր՝ տեղադրված OpenSSH սերվերով:
  • Ե՛վ սերվերը, և՛ հանգույցները հասանելի են հանրային IP հասցեների միջոցով:
  • Ansible սերվերում ստեղծված sudo-ի արտոնություններ ունեցող ոչ արմատային օգտատեր և Ansible սպասառուների վրա տեղադրված գաղտնաբառով օգտատեր:

Տեղադրեք Ansible-ը

Ansible-ի պաշտոնական պահոցը չի աջակցում Ubuntu 20.04-ը՝ այս ձեռնարկը գրելու պահին Ubuntu-ի python գրադարանում առկա սխալի պատճառով:

Բարեբախտաբար, Ubuntu-ն մատակարարվում է Ansible 2.9-ով, որը մենք կտեղադրենք: Գործարկեք հետևյալ հրամանը՝ Ansible-ը տեղադրելու համար։

$ sudo apt install ansible -y

Ստուգեք ձեր տեղադրումը` գործարկելով հետևյալ հրամանը.

$ ansible --version
ansible 2.9.6
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/username/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.8.5 (default, Jan 27 2021, 15:41:15) [GCC 9.3.0]

Գույքագրման ֆայլի կարգավորում

Որպեսզի կարողանաք միանալ բազմաթիվ հոսթներին, ձեզ անհրաժեշտ է ֆայլ, որը կգրանցի հանգույցների մանրամասները: Այս ֆայլը կոչվում է Գույքագրման ֆայլ:

Կախված նրանից, թե քանի սերվեր եք ցանկանում վերահսկել, Ansible-ի Inventory ֆայլը նաև թույլ է տալիս դրանք դասավորել խմբերով և ենթախմբերով: Կարող եք նաև սահմանել հարմարեցված փոփոխականներ, որոնք կիրառելի են հյուրընկալողների կամ խմբերի ընտրության համար, որոնք կարող են հետագայում օգտագործվել հրահանգները փոխանցելիս:

Ansible-ը առաքվում է լռելյայն Inventory ֆայլով, որը հասանելի է /etc/ansible/hosts հասցեում: Բացեք այն Nano խմբագրիչով:

$ sudo nano /etc/ansible/hosts

Տեղադրեք հետևյալ կոդը ֆայլի ներքևում.

[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113

[all:vars]
ansible_python_interpreter=/usr/bin/python3

servers բաժինը սահմանում է այն հանգույցների ցանկը, որոնց ցանկանում եք միանալ: Դուք կարող եք ստեղծել նույնքան խմբեր՝ մի քանի խմբերում սերվերներ կազմակերպելու համար:

all:vars խումբը սահմանում է ansible_python_interpreter պարամետրը գույքագրման բոլոր հոսթերների վրա: Այն վստահեցնում է, որ Ansible-ն օգտագործում է Python 3 գործարկվող Python 2-ի փոխարեն, որը հեռացվել է Ubuntu-ի վերջին տարբերակներից:

Երբ ավարտեք, պահեք և փակեք ֆայլը՝ սեղմելով CTRL+X, ապա Y և ENTER՝ ձեր փոփոխությունները հաստատելու համար:

Նշում. Դուք կարող եք նաև ստեղծել ձեր սեփական Inventory ֆայլը ձեր ընտրած ցանկացած վայրում, որն այնուհետև կարող եք փոխանցել՝ օգտագործելով -i պարամետրը Ansible հրամանները գործարկելիս:

Դուք կարող եք ստուգել ձեր գույքագրման ցուցակը հետևյալ հրամանով.

$ ansible-inventory --list -y
all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 203.0.113.111
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 203.0.113.112
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 203.0.113.113
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

Սերվերների կազմակերպում խմբերի և ենթախմբերի

Սա օգտակար հուշում է, եթե դուք ունեք շատ սերվերներ, որոնց որոշ սերվերներ կատարում են հատուկ գործառույթներ: Օրինակ, դուք կարող եք օգտագործել այս մեթոդը վեբ սերվերները և տվյալների բազայի սերվերները առանձին խմբավորելու համար: Դուք նույնիսկ կարող եք հոսթինգը դարձնել բազմաթիվ խմբերի մաս: Դուք նույնիսկ կարող եք հոսթինգը դարձնել բազմաթիվ խմբերի մաս: Դրան հասնելու համար ձեր գույքագրման ֆայլը պետք է նման լինի հետևյալին.

[webservers]
203.0.113.111
203.0.113.112

[dbservers]
203.0.113.113
server_hostname

[development]
203.0.113.111
203.0.113.113

[production]
203.0.113.112
server_hostname

Կարգավորեք SSH ստեղները

Որպեսզի Ansible-ը կարողանա միանալ սերվերներին, դուք պետք է կարգավորեք SSH ստեղները ձեր Ansible սերվերի և գույքագրման ֆայլում նշված հոստերերի միջև: Սա կաշխատի միայն այն դեպքում, եթե Ansible հաճախորդները չունեն միացված հանրային բանալին և ունենան արմատային հաշիվ միացված գաղտնաբառով:

Օգտագործեք հետևյալ քայլերը՝ Ansible-ի և նրա հանգույցների համար SSH բանալի ստեղծելու և կարգավորելու համար:

Ստեղծեք բանալին Ansible-ի համար:

$ ssh-keygen -t rsa -b 4096 -C "Ansible key"

Պատճենեք հանրային բանալին ձեր հաշիվների վրա հեռավոր սերվերների վրա: Դրա համար մենք կօգտագործենք ssh-copy-id հրամանը:

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email 
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email 
$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email 

Այսքանը: Այժմ Ansible-ը պետք է կարողանա խոսել ձեր սերվերների հետ:

Տեղադրեք SSH ստեղները հանգույցներում առկա հանրային բանալիով

Եթե հաճախորդներն արդեն ունեն միացված հանրային բանալիներ, ապա դուք պետք է կատարեք որոշակի լրացուցիչ քայլեր: Դրա համար դուք պետք է ստեղծեք նոր օգտվողի համար հասանելի միայն Ansible-ի կողմից յուրաքանչյուր հանգույցի սերվերի վրա: Այդ օգտվողը կունենա sudo արտոնություններ, որոնք հասանելի կլինեն առանց գաղտնաբառի և հասանելի կլինեն միայն ձեր ansible սերվերից:

ansible օգտվող ստեղծելու համար գործարկեք հետևյալ հրամանը.

$ sudo adduser ansible

Ընտրեք ուժեղ գաղտնաբառ և մնացած բոլոր դաշտերը դատարկ թողեք:

Այժմ կարգավորեք այս օգտվողին առանց գաղտնաբառի sudo մուտքը հետևյալ հրամանի միջոցով.

$ echo "ansible ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ansible

Այժմ, երբ դուք ավելացրել և կազմաձևել եք նոր օգտվողին, կարող եք պատճենել SSH բանալին ձեր ansible սերվերից դեպի հանգույց սերվեր՝ օգտագործելով հետևյալ հրամանը:

$ ssh-copy-id [email 

Ձեզանից կպահանջվի գաղտնաբառ անսխալ օգտագործողի համար: Մուտքագրեք այն և SSH ստեղնը կպատճենվի:

Հաջորդը, անջատեք գաղտնաբառի վրա հիմնված մուտքը ansible օգտագործողի համար հանգույցի սերվերում:

$ sudo usermod -L ansible

Այժմ ձեր հանգույցի սերվերը հասանելի է միայն Ansible սերվերից, քանի որ միայն այդ սերվերն ունի դրա համար հանրային բանալին, և դուք չեք կարող օգտագործել այն sudo արտոնություններով անմիջապես հանգույցի սերվերի վրա, քանի որ գաղտնաբառի մուտքն անջատված է:

Դուք ստիպված կլինեք կրկնել այս քայլերը յուրաքանչյուր հանգույցի սերվերի համար: Նաև այս ձեռնարկում փոխարինեք root օգտվողին ansible օգտվողով:

Փորձարկման միացում

Գույքագրման ֆայլը և SSH ստեղները կարգավորելուց հետո մենք պետք է ստուգենք՝ արդյոք Ansible-ը կարող է միանալ սերվերներին:

Կապը ստուգելու համար մուտքագրեք հետևյալ հրամանը: Այս հրամանը կփորձարկի կապը բոլոր սերվերների հետ գույքագրման ֆայլից:

$ ansible all -m ping -u root

Այս հրամանը օգտագործում է Ansible-ի ping մոդուլը՝ բոլոր սերվերների վրա կապի թեստ գործարկելու համար: Դուք պետք է ստանաք հետևյալ արդյունքը.

server1 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

Եթե առաջին անգամն է, որ օգտագործում եք Ansible-ը, ձեզանից կպահանջվի հաստատել բոլոր սերվերների իսկությունը: Երբ ձեզ հուշում են, մուտքագրեք այո և սեղմեք ENTER՝ հաստատելու համար:

Գործարկել որոշ հիմնական հրամաններ

Եկեք գործարկենք մի քանի հիմնական հրամաններ սերվերների վրա՝ օգտագործելով Ansible: Սերվերի վրա որևէ հրաման գործարկելու համար օգտագործվում է հետևյալ ձևաչափը.

$ ansible all -a "command" -u <username>

Ստուգեք սկավառակի օգտագործումը

Նախ, եկեք ստուգենք սկավառակի օգտագործումը մեր բոլոր սերվերների վրա:

$ ansible all -a "df -h" -u root
server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           798M  624K  798M   1% /run
/dev/vda1       155G  2.3G  153G   2% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           395M  608K  394M   1% /run
/dev/vda1        78G  2.2G   76G   3% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           395M     0  395M   0% /run/user/0

Թիրախավորեք անհատական հյուրընկալողներին և խմբերին

Մինչ այժմ մենք հրամաններ էինք գործարկում բոլոր հեռավոր սերվերների վրա միանգամից։ Բայց դա միշտ չէ, որ այդպես է։ Միայն մեկ սերվերի վրա հրաման գործարկելու համար դուք պետք է օգտագործեք հետևյալ ձևաչափը.

$ ansible server1 -a "uptime" -u root
server1 | CHANGED | rc=0 >>
 21:38:26 up 11 min,  2 users,  load average: 0.00, 0.20, 0.19

Վերոնշյալ հրամանը ստուգում է server1-ի գործարկման ժամանակը գույքագրման խմբից:

Կարող եք նաև թիրախավորել բազմաթիվ սերվերներ՝ օգտագործելով հետևյալ ձևաչափը.

$ ansible server1:server2 -m ping -u root

Դուք կարող եք նաև թիրախավորել խմբեր կամ ենթախմբեր անմիջապես գույքագրման ֆայլից:

$ ansible groupname -m ping -u <username>

Թարմացրեք բոլոր սերվերները

Այս ձեռնարկի համար մենք ենթադրում ենք, որ բոլոր հեռավոր սերվերները աշխատում են Debian կամ Ubuntu OS-ով:

Գործարկեք հետևյալ հրամանը՝ ձեր բոլոր սերվերների վրա ծրագրակազմը թարմացնելու համար:

$ ansible all -m apt -a "update_cache=yes upgrade=yes" -u root

-m պարամետրը սահմանում է Ansible-ի գործարկման մոդուլը: -a վերաբերում է առնչվող մոդուլի արգումենտներին կամ հրամաններին: Այստեղ մենք օգտագործում ենք Ansible-ի apt մոդուլը սերվերները թարմացնելու համար ճիշտ այնպես, ինչպես մեր վերջին օրինակում օգտագործեցինք ping մոդուլը: update_cache թարմացնում է APT քեշը սերվերի վրա և upgrade=yes-ն ասում է Ansible-ին գործարկել apt upgrade հրամանը:

Ձեր CentOS սերվերները թարմացնելու համար կարող եք օգտագործել նույն հրամանը՝ apt-ը փոխարինելով yum-ով, իսկ Fedora սերվերների համար կարող եք փոխարինել apt dnf:

Եթե դուք օգտագործում եք ansible օգտվողը, ինչպես նշված է վերևում, դուք պետք է փոփոխեք ansible հրամանը, որպեսզի գործարկվի sudo-ի բարձր արտոնություններով:

$ ansible server2 -m apt -a "update_cache=yes upgrade=yes" -K -b -u ansible

Այստեղ -K-ը պահանջում է արտոնությունների ընդլայնման գաղտնաբառ: -b-ն իրականացնում է անիմաստ գործողությունը become-ով, որը թույլ է տալիս լինել այլ օգտվող: Երկու փոփոխականները համակցված թույլ են տալիս ansible-ին աշխատել բարձրացված sudo արտոնություններով: Դուք պետք է օգտագործեք սա բոլոր հրամանների համար, որոնք պահանջում են sudo արտոնություններ:

Երբեմն, այս թարմացման հրամաններից մի քանիսը կարող են պահանջել վերաբեռնում, այնպես որ գործարկեք հետևյալ հրամանը՝ ձեր բոլոր սերվերները վերագործարկելու համար:

$ ansible all -a "reboot" -u root

Սրանք ընդամենը մի քանի հիմնական հրամաններ էին, որոնք կարող եք գործարկել Ansible-ի միջոցով:

Եզրակացություն

Դա ավարտում է Ubuntu 20.04-ի վրա հիմնված Ansible-ի տեղադրման և կազմաձևման մեր ձեռնարկը: Եթե ունեք հարցեր, տեղադրեք դրանք ստորև ներկայացված մեկնաբանություններում: