실전! 시스템관리자를위한 Ansible
IT Evolution
Increasing scale and complexity means we need admin automation Opscode gets more venture dough for its Chef From - http://goo.gl/dlcjs
WHAT IS ANSIBLE AUTOMATION?
Global Google Trends : Ansible vs. Puppet vs. Chef
Ansible 비교
ANSIBLE FEATURES
Ansible 에서의자동화의흐름
Push Based vs. Pull Based
Ansible Core & Ansible Tower Ansible AWX Ansible Tower 의오픈소스 Upstream 버전 GUI 관리환경제공
Ansible 로자동화할수있는것 프로비저닝
Ansible 도입기대효과
Ansible 에의한오토메이션
Idempotency( 멱등성 ) 멱등성 (Idempotency) 연산을여러번적용하더라도결과가달라지지않는성질 여러번적용해도결과는바뀌지않는다. 바뀌는것이없으면당연히배포되어도바뀌지않는다. 바뀌는부분이있으면그부분만반영된다. Ansible 멱등성 대부분이멱등성을제공한다. 멱등성을제공하지부분 ( 모듈 ) shell, command, file module
Ansible 핵심컴포넌트
Ansible 사용방법
ansible-playbook 커멘드실행
Inventory 파일
Playbook 예제
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 Module : 대상호스트에서실행하는라이브러리들 2,000 개이상의 Module 을제공 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.conf.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
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.y ml --- - name : install apache hosts : apache user: root tasks : - name : install httpd yum: name=httpd state=latest - name : start apache service service: name=httpd state=running Module /etc/ansible/hosts [apache] web[01:03].opennaru.com 192.168.11.3 $ ansible-playbook apache_setup.yml Playbook Play Task Handler Inventory Install
Apache 설정파일변경 apache_setup.yml --- - name : install apache hosts : apache user: root tasks : - name : install httpd yum: name=httpd state=latest Playbook Play 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 Array Loop 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 Conditional Include Include - include: test/main.yml
Ansible Ad-hok Task 실행 $ ansible <host-pattern> [options] $ ansible 192.168.11.3 -m ping -u root --ask-pass SSH password: 192.168.23.14 success >> { "changed": false, "ping": "pong" } 특정 Host 에명령실행 특정 Host 에명령실행 $ ansible web01.opennaru.com -m command -a /sbin /reboot --ask-pass
Ansible 을통한 IT 인프라운영자동화
Ansible 자동화추진방안
Ansible 을통한작업계획서대체
운영작업위임 ( 서비스화 )
Ansible 을통한전체작업의효율화
애플리케이션을위한인프라제공
[ ]
KHAN [APM] - 미들웨어설치 / 구성 / 튜닝자동화
실제 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
KHAN [apm] Ansible playbook 명령정의 설치할제품선택 제품버전선택 설치구성요소설치 / 구성명령사용자 / 패스워드 package version component command user password JBoss EAP Domain Mode JBoss EAP Standalone Mode 6.4.0 7.1.0 7.2.0 all conf init_d setup start stop root password JBoss EWS Tomcat Apache Tomcat packages sys report ping JBoss EAP HTTPD nettest deploy JBoss EWS2 HTTPD cleanup Apache HTTPD JBoss Data Grid GUI 설치구성화면 WAS 인스턴스구성
제품이나서비스에관한문의 콜센터 :02-469-5426 ( 휴대폰 : 010-2243-3394 ) 전자메일 :sales@opennaru.com