நல்ல நாள்
எங்களிடம் பல கிளவுட் கிளஸ்டர்கள் உள்ளன, ஒவ்வொன்றிலும் அதிக எண்ணிக்கையிலான மெய்நிகர் இயந்திரங்கள் உள்ளன. இந்த முழு வணிகத்தையும் ஹெட்ஸ்னரில் நடத்துகிறோம். ஒவ்வொரு கிளஸ்டரிலும் எங்களிடம் ஒரு முதன்மை இயந்திரம் உள்ளது, அதிலிருந்து ஒரு ஸ்னாப்ஷாட் எடுக்கப்பட்டு, கிளஸ்டரில் உள்ள அனைத்து மெய்நிகர் இயந்திரங்களுக்கும் தானாகவே விநியோகிக்கப்படும்.
இந்த திட்டம் பொதுவாக கிட்லாப்-ரன்னர்களைப் பயன்படுத்த அனுமதிக்காது, ஏனெனில் ஒரே மாதிரியான பதிவு செய்யப்பட்ட ரன்னர்கள் பல தோன்றும்போது நிறைய சிக்கல்கள் எழுகின்றன, இது ஒரு தீர்வைக் கண்டுபிடித்து இந்தக் கட்டுரை/கையேட்டை எழுதத் தூண்டியது.
இது அநேகமாக சிறந்த நடைமுறை அல்ல, ஆனால் இந்த தீர்வு முடிந்தவரை வசதியாகவும் எளிமையாகவும் தோன்றியது.
டுடோரியலுக்கு, பூனையைப் பார்க்கவும்.
முதன்மை கணினியில் தேவையான தொகுப்புகள்:
- மலைப்பாம்பு
- Git
- ssh விசைகள் கொண்ட கோப்பு
அனைத்து மெய்நிகர் கணினிகளிலும் தானியங்கி குடல் இழுவை செயல்படுத்துவதற்கான பொதுவான கொள்கை என்னவென்றால், உங்களுக்கு ஒரு இயந்திரம் தேவை, அதில் அன்சிபிள் நிறுவப்படும். இந்த இயந்திரத்தில் இருந்து, ansible git pull கட்டளைகளை அனுப்பும் மற்றும் புதுப்பிக்கப்பட்ட சேவையை மறுதொடக்கம் செய்யும். இந்த நோக்கங்களுக்காக, கிளஸ்டர்களுக்கு வெளியே ஒரு தனி மெய்நிகர் இயந்திரத்தை உருவாக்கி அதில் நிறுவியுள்ளோம்:
- மலைப்பாம்பு
- ansible
- கிட்லாப்-ரன்னர்
நிறுவன சிக்கல்களில் இருந்து - நீங்கள் gitlab-runner ஐ பதிவு செய்ய வேண்டும், ssh-keygen ஐ உருவாக்க வேண்டும், இந்த இயந்திரத்தின் பொது ssh விசையை பதிவேற்ற வேண்டும் .ssh/authorized_keys
மாஸ்டர் மெஷினில், மாஸ்டர் மெஷினில் போர்ட் 22ஐ திறக்கவும்.
இப்போது அன்சிபிளை கட்டமைப்போம்
சாத்தியமான அனைத்தையும் தானியக்கமாக்குவதே எங்கள் குறிக்கோள் என்பதால். கோப்பில் /etc/ansible/ansible.cfg
வரியை நாங்கள் அவிழ்த்து விடுவோம் host_key_checking = False
அதனால் புதிய இயந்திரங்களை உறுதிப்படுத்துமாறு அன்சிபிள் கேட்கவில்லை.
அடுத்து, நீங்கள் அன்சிபிலுக்கான சரக்குக் கோப்பை தானாக உருவாக்க வேண்டும், அதில் இருந்து நீங்கள் ஜிட் புல்லைச் செய்ய வேண்டிய இயந்திரங்களின் ஐபியை அது எடுக்கும்.
Hetzner's API ஐப் பயன்படுத்தி இந்தக் கோப்பை உருவாக்குகிறோம், உங்கள் AWS, Asure, தரவுத்தளத்தில் இருந்து ஹோஸ்ட்களின் பட்டியலை நீங்கள் எடுக்கலாம் (உங்கள் இயங்கும் இயந்திரங்களைக் காண்பிக்க எங்காவது API உள்ளது, இல்லையா?).
சரக்குக் கோப்பின் அமைப்பு Ansible க்கு மிகவும் முக்கியமானது; இது இப்படி இருக்க வேண்டும்:
[группа]
ip-адрес
ip-адрес
[группа2]
ip-адрес
ip-адрес
அத்தகைய கோப்பை உருவாக்க, நாங்கள் ஒரு எளிய ஸ்கிரிப்டை உருவாக்குவோம் (அதை அழைப்போம் vm_list
):
#!/bin/bash
echo [group] > /etc/ansible/cloud_ip &&
"ваш CLI запрос на получение IP запущенных машин в кластере" >> /etc/ansible/cloud_ip
echo " " >> /etc/ansible/cloud_ip
echo [group2] > /etc/ansible/cloud_ip &&
"ваш CLI запрос на получение IP запущенных машин в другом кластере" >> /etc/ansible/cloud_ip
அன்சிபிள் செயல்படுகிறதா மற்றும் ஐபி முகவரிகளைப் பெறுவதில் நட்புடன் இருக்கிறதா என்பதைச் சரிபார்க்க வேண்டிய நேரம் இது:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group
வெளியீட்டில் கட்டளை செயல்படுத்தப்பட்ட இயந்திரங்களின் ஹோஸ்ட்பெயர்கள் இருக்க வேண்டும்.
தொடரியல் பற்றி சில வார்த்தைகள்:
- /etc/ansible/./vm_list - இயந்திரங்களின் பட்டியலை உருவாக்கவும்
- -i - சரக்குக் கோப்பிற்கான முழுமையான பாதை
- -m - ஷெல் தொகுதியைப் பயன்படுத்த அன்சிபிள் சொல்லுங்கள்
- -a என்பது வாதம். எந்த கட்டளையையும் இங்கே உள்ளிடலாம்
- குழு - உங்கள் கிளஸ்டரின் பெயர். எல்லா கிளஸ்டர்களிலும் இதைச் செய்ய வேண்டும் என்றால், குழுவை அனைத்திற்கும் மாற்றவும்
மேலும் செல்லலாம் - எங்கள் மெய்நிகர் கணினிகளில் ஜிட் புல்லைச் செய்ய முயற்சிப்போம்:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group
வெளியீட்டில் நாம் ஏற்கனவே புதுப்பித்த நிலையில் அல்லது களஞ்சியத்திலிருந்து இறக்குவதைக் கண்டால், எல்லாம் வேலை செய்கிறது.
இப்போது இது எல்லாமே குறிக்கப்பட்டது
கிட்லாப்பில் முதன்மைக் கிளைக்குச் செல்லும்போது தானாகவே இயங்கும்படி நமது ஸ்கிரிப்டைக் கற்பிப்போம்
முதலில், நமது ஸ்கிரிப்டை மிகவும் அழகாக உருவாக்கி, அதை இயங்கக்கூடிய கோப்பில் வைப்போம் (இதை exec_pull என்று அழைப்போம்) -
#!/bin/bash
/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"
நமது கிட்லாப் சென்று திட்டத்தில் ஒரு கோப்பை உருவாக்குவோம் .gitlab-ci.yml
பின்வருவனவற்றை உள்ளே வைக்கிறோம்:
variables:
GIT_STRATEGY: none
VM_GROUP: group
stages:
- pull
- restart
run_exec_pull:
stage: pull
script:
- /etc/ansible/exec_pull 'cd /path/to/project/'$CI_PROJECT_NAME' && git pull' $VM_GROUP
only:
- master
run_service_restart:
stage: restart
script:
- /etc/ansible/exec_pull 'your_app_stop && your_app_start' $VM_GROUP
only:
- master
எல்லாம் தயார். இப்போது -
- உறுதியளிக்கவும்
- எல்லாம் வேலை செய்வதில் நான் மகிழ்ச்சியடைகிறேன்
மற்ற திட்டங்களுக்கு .yml ஐ மாற்றும்போது, மறுதொடக்கம் செய்ய சேவையின் பெயரையும், அன்சிபிள் கட்டளைகள் செயல்படுத்தப்படும் கிளஸ்டரின் பெயரையும் மாற்ற வேண்டும்.
ஆதாரம்: www.habr.com