IT ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æé·ãéããããšãé ããæ©ãããããããµããŒãããããã«äººçãªãœãŒã¹ãçŽç·çã«å¢ããããèªååãéå§ãããã®éžæãè¿«ãããããšã«ãªããŸãã ããæç¹ãŸã§ãç§ãã¡ã¯æåã®ãã©ãã€ã ã«äœãã§ããŸãããããã®åŸãInfrastructure-as-Code ãžã®é·ãéã®ããå§ãŸããŸããã
ãã¡ãããNSPK ã¯ã¹ã¿ãŒãã¢ããã§ã¯ãããŸããããèšç«åœåã®æ°å¹Žéã¯ç€Ÿå
ã«ãã®ãããªé°å²æ°ããããéåžžã«èå³æ·±ãæ°å¹Žéã§ããã ç§ã®ååã¯
äžè¬ã«ãç§ãã¡ã®ããŒã ã¯äŒç€Ÿã« 2 ã€ã®è£œåãäŸçµŠããŠãããšèšããŸãã 99,999ã€ç®ã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã§ãã ã¡ãŒã«ãæ©èœããDNS ãæ©èœãããã¡ã€ã³ ã³ã³ãããŒã©ãŒãã¯ã©ãã·ã¥ããªããµãŒããŒã«ã¢ã¯ã»ã¹ã§ããããã«ããå¿ èŠããããŸãã å瀟㮠IT ç°å¢ã¯å·šå€§ã§ãã ãããã¯ããžãã¹ããã³ããã·ã§ã³ã¯ãªãã£ã«ã«ãªã·ã¹ãã ã§ãããäžéšã®å¯çšæ§èŠä»¶ã¯ XNUMX ã§ãã XNUMX çªç®ã®è£œåã¯ãç©çãµãŒããŒãšä»®æ³ãµãŒããŒèªäœã§ãã æ¢åã®ãã®ã¯ç£èŠããå¿ èŠããããæ°ãããã®ã¯å€ãã®éšéããå®æçã«é¡§å®¢ã«å±ããå¿ èŠããããŸãã ãã®èšäºã§ã¯ããµãŒããŒã®ã©ã€ããµã€ã¯ã«ãæ ãã€ã³ãã©ã¹ãã©ã¯ãã£ãã©ã®ããã«éçºãããã«çŠç¹ãåœãŠãããšæããŸãã
æ ã®å§ãŸã
ç§ãã¡ã®æ
ã®éå§æç¹ã§ã¯ãç§ãã¡ã®ãã¯ãããžãŒ ã¹ã¿ãã¯ã¯æ¬¡ã®ããã«ãªã£ãŠããŸããã
OS CentOS 7
FreeIPA ãã¡ã€ã³ ã³ã³ãããŒã©ãŒ
èªåå - Ansible(+Tower)ãCobbler
ããããã¹ãŠã¯ãè€æ°ã®ããŒã¿ã»ã³ã¿ãŒã«ãŸããã 3 ã€ã®ãã¡ã€ã³ã«é 眮ãããŠããŸããã XNUMX ã€ã®ããŒã¿ ã»ã³ã¿ãŒã«ã¯ãªãã£ã¹ ã·ã¹ãã ãšãã¹ã ãµã€ãããããæ®ãã®ããŒã¿ ã»ã³ã¿ãŒã«ã¯ PROD ããããŸãã
ããæç¹ã§ã®ãµãŒããŒã®äœæã¯æ¬¡ã®ããã«ãªããŸãã
VM ãã³ãã¬ãŒãã§ã¯ãCentOS ã¯æå°éã§ãããå¿ èŠãªæå°éã¯æ£ãã /etc/resolv.conf ã®ãããªãã®ã§ãæ®ã㯠Ansible ãéããŠååŸãããŸãã
CMDB - Excelã
ãµãŒããŒãç©çãµãŒããŒã®å Žåãä»®æ³ãã·ã³ãã³ããŒãã代ããã«ãCobbler ã䜿çšã㊠OS ãã€ã³ã¹ããŒã«ãããŸããã¿ãŒã²ãã ãµãŒããŒã® MAC ã¢ãã¬ã¹ã Cobbler æ§æã«è¿œå ããããµãŒããŒã¯ DHCP çµç±ã§ IP ã¢ãã¬ã¹ãåãåãã次㫠OS ãåãåããŸãããè¿œå ãããŸãã
æåã¯ãCobbler ã§äœããã®æ§æ管çãå®è¡ããããšããããŸããã ããããæéã®çµéãšãšãã«ãããã«ãããä»ã®ããŒã¿ã»ã³ã¿ãŒãš VM ãæºåããããã® Ansible ã³ãŒãã®äž¡æ¹ãžã®æ§æã®ç§»æ€æ§ã«åé¡ãçºçãå§ããŸããã
åœæãç§ãã¡ã®å€ã㯠Ansible ã Bash ã®äŸ¿å©ãªæ¡åŒµæ©èœãšããŠèªèããŠãããã·ã§ã«ãš sed ã䜿çšããèšèšã軜èŠããŸããã§ããã å šäœçã«ãã·ãã«ã ããã«ãããæçµçã«ã¯ããã¬ã€ããã¯ãäœããã®çç±ã§ãµãŒããŒäžã§åäœããªãã£ãå ŽåããµãŒããŒãåé€ãããã¬ã€ããã¯ãä¿®æ£ããŠåå®è¡ããæ¹ãç°¡åã«ãªããšããäºå®ã«ã€ãªãããŸããã åºæ¬çã«ã¹ã¯ãªããã®ããŒãžã§ã³ç®¡çãæ§æã®ç§»æ€æ§ã¯ãããŸããã§ããã
ããšãã°ããã¹ãŠã®ãµãŒããŒã®æ§æãå€æŽããããšèããŸããã
- è«çã»ã°ã¡ã³ã/ããŒã¿ã»ã³ã¿ãŒå ã®æ¢åãµãŒããŒã®æ§æãå€æŽããŸãã XNUMX æ¥ã§å®äºããªãå ŽåããããŸããã¢ã¯ã»ã·ããªãã£èŠä»¶ãšå€§æ°ã®æ³åã«ããããã¹ãŠã®å€æŽãäžåºŠã«é©çšããããšã¯ã§ããŸããã ãŸããäžéšã®å€æŽã¯ç Žå£çãªãã®ã«ãªãå¯èœæ§ãããããµãŒãã¹ãã OS èªäœã«è³ããŸã§ãäœããåèµ·åããå¿ èŠããããŸãã
- Ansible ã§ä¿®æ£ãã
- Cobbler ã§ä¿®æ£ããŸã
- åè«çã»ã°ã¡ã³ã/ããŒã¿ã»ã³ã¿ãŒã«å¯Ÿã㊠N åç¹°ãè¿ããŸã
ãã¹ãŠã®å€æŽãã¹ã ãŒãºã«é²ããããã«ã¯ãå€ãã®èŠå ãèæ ®ããå¿ èŠããããå€æŽã¯åžžã«çºçããŸãã
- Ansible ã³ãŒããæ§æãã¡ã€ã«ã®ãªãã¡ã¯ã¿ãªã³ã°
- 瀟å ã®ãã¹ããã©ã¯ãã£ã¹ã®å€æŽ
- äºä»¶ã»äºæ ã®åæçµæã«åºã¥ãå€æŽ
- 瀟å å€ã®ã»ãã¥ãªãã£åºæºã®å€åã ããšãã°ãPCI DSS ã¯æ¯å¹Žæ°ããèŠä»¶ã§æŽæ°ãããŸãã
ã€ã³ãã©ã¹ãã©ã¯ãã£ã®æé·ãšæ ã®å§ãŸã
ãµãŒããŒ/è«çãã¡ã€ã³/ããŒã¿ã»ã³ã¿ãŒã®æ°ãå¢å ããããã«äŒŽãæ§æãšã©ãŒã®æ°ãå¢å ããŸããã ããæç¹ã§ãæ§æ管çãéçºããå¿ èŠããã XNUMX ã€ã®æ¹åæ§ãèŠããŠããŸããã
- ãªãŒãã¡ãŒã·ã§ã³ã ç¹°ãè¿ãã®äœæ¥ã«ããã人çãšã©ãŒã¯å¯èœãªéãåé¿ããå¿ èŠããããŸãã
- åçŸæ§ã ã€ã³ãã©ã¹ãã©ã¯ãã£ãäºæž¬å¯èœã§ããã°ã管çãã¯ããã«ç°¡åã«ãªããŸãã ãµãŒããŒã®æ§æãšãã®æºåã®ããã®ããŒã«ã¯ã©ãã§ãåãã§ããå¿ èŠããããŸãã ããã¯è£œåããŒã ã«ãšã£ãŠãéèŠã§ãããã¹ãåŸãã¢ããªã±ãŒã·ã§ã³ããã¹ãç°å¢ãšåæ§ã«æ§æãããéçšç°å¢ã«ç§»è¡ããããšãä¿èšŒãããå¿ èŠããããŸãã
- æ§æ管çãžã®å€æŽã®ã·ã³ãã«ããšéææ§ã
ããã€ãã®ããŒã«ãè¿œå ããå¿ èŠããããŸãã
ç§ãã¡ã¯ãç¹ã«ãã®çµã¿èŸŒã¿ CI/CD ã¢ãžã¥ãŒã«ã®ããã«ãã³ãŒã ãªããžããªãšã㊠GitLab CE ãéžæããŸããã
ç§å¯ã®ä¿ç®¡åº« - Hashicorp Vaultã çŽ æŽããã API ã®ããã«ã
ãã¹ãæ§æãš Ansible ããŒã« â Molecule+Testinfraã ansible mitogen ã«æ¥ç¶ãããšããã¹ããå€§å¹ ã«é«éåãããŸãã åæã«ãç§ãã¡ã¯èªåå±éçšã«ç¬èªã® CMDB ãšãªãŒã±ã¹ãã¬ãŒã¿ãŒãæžãå§ããŸãã (Cobbler äžã®å³) ããããã¯ãŸã£ããå¥ã®è©±ã§ãããç§ã®ååãšãããã®ã·ã¹ãã ã®äž»ãªéçºè ãå°æ¥èªãããšã«ãªããŸãã
ç§ãã¡ã®éžæ:
åå + ãã¹ãã€ã³ãã©
Ansible + ã¿ã¯ãŒ + AWX
World of Servers + DITNET (èªç€Ÿéçº)
ã³ãã©ãŒ
Gitlab + GitLab ã©ã³ããŒ
ãã·ã³ãŒãä¿ç®¡åº«
ãšããã§ãansibleã®ããŒã«ã«ã€ããŠã æå㯠17 ã€ã ãã§ããããæ°åã®ãªãã¡ã¯ã¿ãªã³ã°ã®åŸãXNUMX åã«ãªããŸãããã¢ããªã¹ãåªçã®ããŒã«ã«åå²ããåå¥ã«èµ·åã§ããããã«ããããšã匷ããå§ãããŸããããã«ãã¿ã°ãè¿œå ã§ããŸãã ãããã¯ãŒã¯ããã®ã³ã°ãããã±ãŒãžãããŒããŠã§ã¢ãååãªã©ã®æ©èœããšã«åœ¹å²ãåå²ããŸããã äžè¬ã«ãç§ãã¡ã¯ä»¥äžã®æŠç¥ã«åŸããŸããã ãããå¯äžã®çå®ã ãšäž»åŒµããããã§ã¯ãããŸããããç§ãã¡ã«ãšã£ãŠã¯ããŸããããŸããã
- ããŽãŒã«ãã³ ã€ã¡ãŒãžããããµãŒããŒãã³ããŒããã®ã¯æªã§ããäž»ãªæ¬ ç¹ã¯ãã€ã¡ãŒãžãçŸåšã©ã®ãããªç¶æ ã«ããã®ãæ£ç¢ºã«ããããªãããšãšããã¹ãŠã®å€æŽããã¹ãŠã®ä»®æ³åãã¡ãŒã ã®ãã¹ãŠã®ã€ã¡ãŒãžã«åæ ãããããšã§ãã
- ããã©ã«ãã®æ§æãã¡ã€ã«ã®äœ¿çšã¯æå°éã«ããã¡ã€ã³ã®ã·ã¹ãã ãã¡ã€ã«ãæ
åœããä»ã®éšéãšåæããŸããããšãã°ã次ã®ããã«ãªããŸãã
- /etc/sysctl.conf ã¯ç©ºã®ãŸãŸã«ããŠãããŸããèšå®ã¯ /etc/sysctl.d/ ã«ã®ã¿ååšããå¿ èŠããããŸãã ãããã¡ã€ã«ã§ã¯ããã©ã«ãããå¥ã®ãã¡ã€ã«ã§ã¯ã¢ããªã±ãŒã·ã§ã³çšã«ã«ã¹ã¿ã ããŸãã
- ãªãŒããŒã©ã€ã ãã¡ã€ã«ã䜿çšã㊠systemd ãŠããããç·šéããŸãã
- ãã¹ãŠã®æ§æããã³ãã¬ãŒãåããããããå®å šã«å«ããŸããå¯èœã§ããã°ãPlaybook ã« sed ãŸãã¯ãã®é¡äŒŒç©ãå«ããªãã§ãã ããã
- æ§æ管çã·ã¹ãã ã®ã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããŸãã
- ã¿ã¹ã¯ãè«çãšã³ãã£ãã£ã«åå²ããã¢ããªã¹ãããŒã«ã«æžãæããŸãã
- ãªã³ã¿ãŒã䜿ããïŒ Ansible-lintãyaml-lint ãªã©
- ã¢ãããŒããå€ããŸãããïŒ ãã·ãã«ã§ã¯ãããŸããã ã·ã¹ãã ã®ç¶æ ã説æããå¿ èŠããã
- ãã¹ãŠã® Ansible ããŒã«ã«ã€ããŠãååå ã§ãã¹ããäœæããXNUMX æ¥ã« XNUMX åã¬ããŒããçæããå¿ èŠããããŸãã
- ç§ãã¡ã®å Žåããã¹ã (100 以äžãããŸã) ãæºåããåŸãçŽ 70000 åã®ãšã©ãŒãèŠã€ãããŸããã ãããä¿®æ£ããã®ã«æ°ãæããããŸããã
ç§ãã¡ã®å®è£
ããã§ãAnsible ããŒã«ã®æºåãæŽãããã³ãã¬ãŒãåããããªã³ã¿ãŒã«ãã£ãŠãã§ãã¯ãããŸããã ãããŠãgitããã©ãã§ãçºçããŸãã ããããããŸããŸãªã»ã°ã¡ã³ããžã®ä¿¡é Œæ§ã®é«ãã³ãŒãé ä¿¡ã®åé¡ã¯æªè§£æ±ºã®ãŸãŸã§ããã ã¹ã¯ãªãããšåæããããšã«ããŸããã 次ã®ããã§ã:
å€æŽãå°çãããšãCI ãèµ·åããããã¹ã ãµãŒããŒãäœæãããããŒã«ãå±éãããååã«ãã£ãŠãã¹ããããŸãã ãã¹ãŠãæ£åžžã§ããã°ãã³ãŒã㯠prod ãã©ã³ãã«ç§»åããŸãã ãã ãããã·ã³å ã®æ¢åã®ãµãŒããŒã«æ°ããã³ãŒããé©çšããããšã¯ãããŸããã ããã¯ãã·ã¹ãã ã®é«å¯çšæ§ã®ããã«å¿ èŠãªäžçš®ã®ã¹ããããŒã§ãã ãããŠãã€ã³ãã©ã¹ãã©ã¯ãã£ã巚倧åãããšã倧æ°ã®æ³åãåããŸããããšããã®å€åãç¡å®³ã§ãããšç¢ºä¿¡ããŠããŠããæ²æšãªçµæãæãå¯èœæ§ããããŸãã
ãµãŒããŒãäœæããããã®ãªãã·ã§ã³ãå€æ°ãããŸãã æçµçã«ã¯ã«ã¹ã¿ã Python ã¹ã¯ãªãããéžæããŸããã 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}}"
ãããç§ãã¡ãå°éããçµæã§ãããã·ã¹ãã ã¯çãç¶ããçºå±ãç¶ããŸãã
- ãµãŒããŒãã»ããã¢ããããããã® 17 ã® Ansible ããŒã«ã å圹å²ã¯ãåå¥ã®è«çã¿ã¹ã¯ (ãã®ã³ã°ãç£æ»ããŠãŒã¶ãŒèªèšŒãç£èŠãªã©) ã解決ããããã«èšèšãããŠããŸãã
- 圹å²ãã¹ãã åå + ãã¹ãã€ã³ãã©ã
- ç¬èªéçº: CMDB + Orchestratorã
- ãµãŒããŒã®äœææéã¯çŽ 30 åã§ãèªååãããŠãããå®è³ªçã«ã¿ã¹ã¯ ãã¥ãŒããç¬ç«ããŠããŸãã
- ãã¹ãŠã®ã»ã°ã¡ã³ã (ãã¬ã€ããã¯ããªããžããªãä»®æ³åèŠçŽ ) ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®ç¶æ /ååãåãã
- ãµãŒããŒã®ã¹ããŒã¿ã¹ãæ¯æ¥ãã§ãã¯ããæšæºãšã®äžäžèŽã«é¢ããã¬ããŒããçæããŸãã
ç§ã®è©±ãããããæ ãå§ããããšããŠãã人ãã¡ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã ã©ã®èªååã¹ã¿ãã¯ã䜿çšããŠããŸãã?
åºæïŒ habr.com