Ansible 소개 (IT Automation & Configuration Management)
IT Evolution
Increasing scale and complexity means we need admin automation Opscode gets more venture dough for its Chef From - http://goo.gl/dlcjs
Global Google Trends : Ansible vs. Puppet vs. Chef
Push Based vs. Pull Based
Comparison : Ansible vs. Puppet vs. Chef
Ansible Core & Ansible Tower
Ansible works
ㅇㅎㄴㅁㅁㅎㄹㄹㅇㅎ ㅇㄻㅇㄴ ㄴㅁㅇㄹㄴㅁㄹㅇ
What is Ansible?
Ansible Concept
Ansible 로자동화할수있는것
Ansible 도입기대효과
Ansible 에의한오토메이션
Idempotency( 멱등성 ) 멱등성 (Idempotency) 연산을여러번적용하더라도결과가달라지지않는성질 여러번적용해도결과는바뀌지않는다. 바뀌는것이없으면당연히배포되어도바뀌지않는다. 바뀌는부분이있으면그부분만반영된다. Ansible 멱등성 대부분이멱등성을제공한다. 멱등성을제공하지부분 ( 모듈 ) shell, command, file module
Ansible Architecture
Inventory 파일
Playbook 예제
playbook playbook 은 ansible 의환경설정, 배포를가능케함 YAML 문법을사용하여정의 linux 기반권한관리 (user, group) 지원 하나의 playbook 은하나또는그이상의 play 를정의하며, play 의목적은여러호스트들에잘정의된 role 과 task 를매핑하는역할을맡음 그외의기능들 반복 (with_item, with nested, until ) 조건분기 (when, register, ) 다른 playbook 참조 (include, role, ) 외부정보참조 환경변수, 파일등 (environment, lookup, vars_prompt, ) 커스텀모듈을이용한확장
YAML 형식이란
태스크 (Task) 란 정형화된작업의열거 태스크는관련지을수있었던모듈을호출 모듈은 Python 나 Bash 로기술되고있다 tasks: - name: check install httpd yum: name=httpd state=latest
모듈 (Module) 이란 특정목적을위해작성된 Ansible 백엔드 주로 Python 으로구현 대표적인모듈들 패키지관리 yum, apt 지정패키지 ( 및의존패키지 ) 설치 서비스제어 service 서비스시작 / 정지등 파일처리 File, copy, fetch, template 파일배포 (copy, template), 파일수집 (fetch) 등 커맨드실행 command, shell 외부커맨드실행과그출력결과보고등 소스코드관리 : git, subversion
Ansible Module
변수정의 (vars) 태스크섹션전에 vars: 섹션으로변수를정의 vars: hello: Hello tasks: - name: Hello World debug: msg= {{ hello }} Ansible
조건분기실행 (when) 태스크에서모듈명다음줄에서 when: 을기술하여모듈의실행조건을정의 지역변수나 vars 정의된변수에대해등호와부등호를이용하여조건식이 true 의경우에실행 tasks: - name: install Apache Web server yum: name=httpd state=latest when: ansible_os_family == 'RedHat' - name: install Apache Web server apt: name=apache2 state=latest when: ansible_os_family == 'Debian' or \ ansible_os_family == 'Ubuntu'
루프실행 (Loops) 태스크에서모듈명의다음줄에서 with_000: 으로기술하여모듈에 {{ item }} 변수를전달 with_items with_nested with_dict with_lines with_indexed_items with_ini with_flattened with_file with_fileglob with_first_found with_together with_subelements with_random_choice with_sequence
템플릿 YAML 파일뿐만아니라모든파일에서활용가능 일반적으로파일확장자명을.j2로함 Index.php.j2 Mysql. 출.j2 Template task 일때 jinja2가적용가능 (copy task는적용안됨 ) tasks: - name: deploy my.cnf template: src=my.cnf.j2 dest=/etc/my.cnf filename: my.cnf.j2 [mysqld] user = {{ mysql_user }} port = {{ mysql_port }} datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock pid-file = /var/lib/mysqld/mysqld.pid
Provisioning 제품비교 제품정의개발언어 Agent 여부통신방법 Ansible YAML Python 필요없음 (SSH) JSON Chef DSL Ruby 필요 REST / STOMP Puppet DSL Ruby 필요 HTTP SSL
Ansible 이할수있는일 설치 OS 패키지설치 : yum, apt-get, zypper 등 Language 패키지설치 : npm, bower, gem, pip 등 다운로드 get_url, wget, git, subversion, fetch 등 환경설정파일배포 실행 기타 copy, template shell, command, task, script Cloud, Clustering, Database, Crypto, Network, Remote Management, Windows 등다양한모듈을제공
Ansible Playbook 을이용한 Apache 설치 apache_setup.yml --- - name : install apache hosts : apache user: root tasks : - name : install httpd yum: name=httpd state=latest Playbook Play Tasks Handler - name : start apache service service: name=httpd state=running Modules /etc/ansible/hosts [apache] web[01:03].opennaru.com 192.168.11.3 Inventory Install $ ansible-playbook apache_setup.yml
Apache 설정파일변경 apache_setup.yml --- - name : install apache hosts : apache user: root Playbook Play tasks : - name : install httpd yum: name=httpd state=latest Template Module - name : copy httpd.conf file template: src=httpd.conf dest=/etc/httpd/conf/httpd.conf - name : start apache service service: name=httpd state=running
Apache 설정파일변경 환경변수 httpd.conf Templates 환경변수 ServerRoot "{{ SVC_HTTPD_DIR }}" # # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, instead of the default. See also the <VirtualHost> # directive. # Listen {{ HTTPD_PORT }} 환경변수
Ansible 제어문 Looping - name: add users user: name={{ item }} state=present groups=user with_items: - open - naru - admin Conditional - name: install apache apt: name=httpd state=latest when: ansible_distribution == Ubuntu - name: install apache yum: name=httpd state=latest when: ansible_distribution == RedHat Include - include: test/main.yml
Ansible Ad-hok Task 실행 $ ansible <host-pattern> [options] 특정 Host 에명령실행 $ ansible 192.168.11.3 -m ping -u root --ask-pass SSH password: 192.168.23.14 success >> { "changed": false, "ping": "pong" } 특정 Host 에명령실행 $ ansible web01.opennaru.com -m command -a /sbin /reboot --ask-pass
실제 Web / WAS 구성 다양한서비스 JBoss EWS(Apache) Apache + mod_jk / mod_cluster Virtual Host Apache + mod_jk / mod_cluster Virtual Host admin front test admin front test Machine #3 Machine #4 Domain Controller JBoss EAP 6.4.0/7.0.0 admin 230.10.1.1 admin11 (+100) admin21 (+100) front 230.10.2.1 front11 (+200) front21 (+200) front31 (+100) test 230.10.3.1 test11 (+300) test21 (+300) test31 (+200) Machine #1 Machine #2 Machine #3
실제 Web / WAS 구성 다양한구성요소 JBoss Web RHEL 7.3 JBoss EAP 7 kisreal11 kisreal12 RHEL 7.3 JBoss DataGrid jdg11 jdg12 RHEL 7.3 JBoss Web RHEL 7.3 JBoss EAP 7 kisreal21 kisreal22 RHEL 7.3 JBoss EAP - JMS jms11 jms12 RHEL 7.3 Oracle(Real DB) KHAN [apm] RHEL 7.3
[ ]
KHAN [apm] Unix2Linux 전환지원
새로운시작 산너머산
KHAN [APM] - 미들웨어설치 / 구성 / 튜닝자동화
운영환경표준화 - 개발팀요구사항
기존기술지원과 KHAN APM 의비교
고객요구사항에따른웹시스템작업
제품이나서비스에관한문의 콜센터 :02-469-5426 ( 휴대폰 : 010-2243-3394 ) 전자메일 :sales@opennaru.com