SlideShare ist ein Scribd-Unternehmen logo
1 von 44
염진영, IT Specialist / 오픈소스컨설팅
Ansible
- Internal Use Only -
Configuration Management System
• Provision
• Orchestration
• System 설정을 code로 관리
• 멱등성(indempotency) - 여러 번 적용해도 결과는 항상 동일
• chef, puppet, salt, ansible
- Internal Use Only -
Ansible 개요
• Configuration management tool
• Open Source
• Python 기반
• Michael DeHaan 개발(Cobbler 개발자)
• Ansible. Inc는 Redhat에 인수됨
• ssh 연결
• 순차 적용
• 수백개의 모듈 제공
• Template - jinja2
• Playbook은 yaml 사용하여, syntax 이해가 쉬움
• Agentlee 방식으로 관리 호스트에 별도 작업이
필요하지 않음
• Pull-based 방식도 지원(ansible-pull - 상용)
• Twitter가 ansible로 전환
• Web 관리 UI인 ansible-tower(상용)
- Internal Use Only -
Not support
• 최초 OS 설치에 관여할 수 없음.
• 구성 변화는 멱동으로 관리할 수 있으나, 모니터링은 할 수 없음.
• 파일 변경 추적 X
Pull-based(chef, puppet) Push-based(ansible)
Agent Agentless
1. Admin : Configuration management script 변경
2. Admin : 변경 파일을 서버로 업로드
3. Agent : 일정 시간마다 서버로 접속하여 변경이력 확인
4. Agent : 새롭게 변경된 파일 다운로드
5. Agent : 변경된 파일 실행
1. Admin : playbook(Configuration Management script) 변경
2. Admin : 새로운 playbook 실행
3. Ansible on Control : 서버로 접속하여 변경된 playbook 실행
Pull-based & Push-based
Pull-based 방식이 큰 규모의 서버 관리 및 신규 서버 추가에 더 적합하다고
하지만, ansible을 이용하여 수천대 서버를 관리하고 있으며, 서버 추가 및 삭제도 용의
- Internal Use Only -
Ansible Architecture
- Internal Use Only -
구성요소
• Inventory : 관리 대상 서버 리스트
• Modules : host에 특정 action을 수행하는 패키지화된 sctips
• play-book : 변수 및 task를 관리 호스트에 수행하기 위해 yaml 문법으로 정의된 파일
• plug-in : 확장 기능(email, logging etc)
• Custom module : 사용자가 직접 작성한 모듈
- Internal Use Only -
Modules
• Package mgmt : apt-get, yum, package
• Commands : shell, command
• File 관련 : file, copy
• Template 관련 : template
• Download : get_url, git, subversion
• Server info : setup
• Service 관리 : service
• Cloud 관리 : aws, openstack
- Internal Use Only -
연결 플러그인
• ssh, paramiko – ssh 연결
• local – localhost 연결
• winrm – windows 연결
• docker – docker에 연결
- Internal Use Only -
설치
[설치방법 1 - 패키지]
# yum install epel-release
# yum install ansible
[설치방법 2 – pip]
# yum install autoconf gcc python-devel libffi-devel openssl-devel
# pip install ansible
[update]
# yum update ansible
# pip install ansible --upgrade
관리 호스트 : python 2.6 or 2.7 이상
* 관리 대상 호스트 : python 2.4은 python-simplejson python 2.5 이상은 필요 없음
- Internal Use Only -
디렉토리 구성
/usr/lib/python2.7/site-packages/ansible/modules
Core Modules 위치
/usr/lib/python2.7/site-packages/ansible
설치 디렉토리 PATH – CentOS7 기준
/usr/lib/python2.7/site-packages/ansible/modules/system/ping.py
Ping Module 위치
/usr/lib/python2.7/site-packages/ansible/modules/commands/shell.py
Shell Module 위치
- Internal Use Only -
설정 – ansible.cfg
# vi ansible.cfg
[defaults]
inventory = hosts
host_key_checking = False
remote_user = ansible
log_path=~/ansible.log
no_log=False
no_target_syslog=False
forks = 20
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
• inventory : inveroty 파일 or 디렉토리 경로
• host_key_checking : Host_key(~/.ssh/known_host) 체크
• remote_user : ssh 접속 시 사용할 user
• log_path : ansible 실행 로그 파일 경로
• no_log :
• no_target_syslog : 관리 host의 syslog에 ansible 로그 여부
• forks : 동시 접속 노드 수(default : 5)
• privilege_escalation : sudo 관련 설정
- Internal Use Only -
ansible.cfg 순서
ANSIBLE_CONFIG=<ansible.cfg PATH>
기본 경로
홈 디렉토리
현재 디렉토리
환경 변수
- Internal Use Only -
설정 - Inventory file
• Ansible에서 관리하는 호스트 정의
• 호스트 인벤토리 기본 위치 : /etc/ansible/hosts
• --inventory PATH
위 옵션으로 임의 경로의 파일을 지정
호스트 그룹 이름
연결 방법, ssh 접속 유저, ssh 패스워드 설정
특정 호스트 그룹의 변수 설정
호스트 그룹을 서브그룹으로 다시 그룹핑
Inventory file 예제
testserver ansible_ssh_host=192.168.0.100 ansible_ssh_port=2222 ansible_ssh_user=user ansible_ssh_private_key_file=./ssh/private_key
Inventory의 Host 확인
Ad-hoc commands
# ansible <host> [options]
예제)
# ansible controllers –m shell –a “date”
# ansible controllers -m shell -a "ls -al /tmp/ansible_test.tmp”
# ansible controllers -m copy -a "src=ansible_test.tmp
dest=/tmp/ansible_test.tmp"
- Internal Use Only -
ansible 실행
Ansible 수행 시, 실행 프로세스
/usr/bin/ssh
-o ForwardX11 no
-o ForwardAgent no
-o PermitLocalCommand no
-o ClearAllForwardings yes
-o batchmode yes -C
-o ControlMaster=auto
-o ControlPersist=60s
-o StrictHostKeyChecking=no
-o KbdInteractiveAuthentication=no
-o PreferredAuthentications=gssapi-with-
mic,gssapi-keyex,hostbased,publickey
-o PasswordAuthentication=no
-o User=centos
-o ConnectTimeout=10
-o ControlPath=/root/.ansible/cp/d8ac695b15
-o Protocol 2
-s -- 192.168.2.131 sftp
ansible_ssh_user
ansible_connection
ansible.cfg 및 inventory 설정에 따라 ‘–o ‘에 설정되는
ssh-client 옵션들이 변경됨.
- ansible_connection : ssh 세션 재활용
- ansible_python_interpreter : host의 python path가
/usr/bin/python이 아닌 경우 설정 필요
- Internal Use Only -
YAML
Json과 비슷한 포맷
--- : dash 3개는 document의 시작을 알림
# : 주석
String : 따음표를 사용하지 않아도 됨.
단, 변수를 표현할 때 사용
ex) {{ 변수 }}
YAML JSON
List - Value1
- Value2
[
“Value1”,
“Value2”
]
Dictionary key1: value1
key2: value2
{
“key1”: “value1”,
“key2”: “value2”
}
Line Folding key1: >
long values1 go on,
long values2 go on
Key2: short value
{
“key1: “long values1 go on,
long value2 go on”,
“key2”: “short value”
}
- Internal Use Only -
Playbook in YAML & JSON
YAML JSON
- Internal Use Only -
Playbook
• ansible 배포에 내용(plays)을 정의한 파일
• yaml 문법
* Play : host에 접속하여 action을 수행하는 것
---: yaml 문법 처음
name: 해당 play에 대한 설명(주석), optional
become: sudo 사용 지정
hosts: Inventory의 ‘loadbalancer’ group을 대상으로 지정
tasks: host에 접속하여 해당 module 및 arg에 맞게 실제 action 수행하는
play를 list로 정의
- yum을 사용하여 패키지 설정, yum cache 업데이트
- service: systemd로 서비스 시작, enabled
- copy: 설정 파일 복사, permission 644
- template: jinja2 작성된 tempate 파일 복사, permission 644
- file: file 삭제
handlers: tasks에 정의된 play 중, notify에 의해 호출될 service 모듈로 정의된
handler, 서비스 재시작 등
service : nginx 재시작 handler
ansible 동작 순서
1. Playbook에 정의된 task를 수행하기 위한 python script 생성
2. 해당 script를 대상서버로 복사
3. 해당 script 실행
4. 모든 host에서 script 실행이 완료될 때까지 기다림
- Internal Use Only -
Playbook & Shell
playbook
- name: Ensure NTP is installed.
yum: name=ntp state=present
Shell script
if ! rpm -qa | grep -qw ntp; then
yum install ntp
fi
playbook Shell script
- name: Ensure NTP is running
service: name=ntpd state=started enabled=yes
if ps aux | grep -v grep | grep "[n]tpd" > /dev/null
then
echo "ntpd is running." > /dev/null
else systemctl start ntpd.service > /dev/null
echo "Started ntpd.”
fi
systemctl enable ntpd.service
출처 : “ansible for devops” by Jeff Geerling, 2015
- Internal Use Only -
Jinja2
Jinja2
- Python Template 언어
- 템플릿 적용을 위해 사용
- 참고 : http://jinja.pocoo.org/docs/dev/templates/
- loop statement
- If statement(조건이 만족할 때만 내부 로직 수행)
- Internal Use Only -
명령어
# ansible-playbook
Ex) # ansible-playbook <play-book file>
[Task 리스팅]
# ansible-playbook --list-tasks <play-book file>
- Internal Use Only -
실행
ansible-playbook Options :
-i --invertory=host-file
-v --verbose
-e --extra-vars=VARS
-f --forks=NUM
-c --connection=TYPE
--check : run in Check Mode
[Syntax check]
# ansible-playbook –syntax-check <playbook.yml>
[dry run]
# ansible-playbook –C <playbook.yml>
- Internal Use Only -
ansible-facts
• Tasks 수행 전, 서버의 정보
수집(hostname, IP, Mac etc)
• 변수로 사용 가능
• gather_facts 사용 X
# vi playbook.yml
자주 사용되는 facts
ansible_os_family
ansible_hostname
ansible_memtotal_mb
- hosts: test
gather_facts: no
- Internal Use Only -
setup
• Cache enable
[defaults]
gathering = smart
fact_caching_timeout = 86400
fact_caching = jsonfile
fact_caching_connection = /tmp/ansible_fact_cache
# redis 사용 설정
#fact_caching = redis
# memcached 사용 설정
#fact_caching = memcached
- Internal Use Only -
file
• 파일, 디렉토리, 링크 파일 생성
• path: 파일 및 디렉토리 PATH
• state: 대상 PATH의 타입
- link : 링크 파일
- directory : 디렉토리
- absent : 삭제
• mode: 파일 퍼미션(8진수 표현을 위하 ‘0’을 앞에 붙여야 함
- Internal Use Only -
copy
• remote 서버로 복사를 위한 파일
• src: 소스 파일 위치
• dest: 대상 서버의 복사될 위치
• mode: 파일 퍼미션(8진수 표현을 위하 ‘0’을 앞에 붙여야 함
- Internal Use Only -
templates
• Jinja2 작성
• File Contents 변경이 내부 로직에 따라 자동으로 이루어지는 파일
- Internal Use Only -
with_items
• Iteration
• 2개 이상의 변수를 리스트로 선언, 반복문으로 사용 가능
- Internal Use Only -
when
• 조건이 true일 때 해당 play 실행
- Internal Use Only -
handlers
• notify 지시자를 사용하는 task에서 해당 module을 실행을 완료한 후,
notification 발생(notify에 지정된 handler 호출)
• notify에 지정된 ‘handler 이름’으로 handlers에 정의된 handler를 찾아
task(restarting services) 수행
- Internal Use Only -
vars
• playbook or template에서 사용한 변수 정의
vars 지시자
Playbook 내부의 vars 지시자에 설정
ex)
vars_files 변수가 설정된 개별 파일을 include하는 설정
roles의 defaults
Role별 변수 설정
- 설정 위치 :
roles/<role name>/defaults/main.yml
- roles/<role name>/vars/main.yml
inventory에 설정
Host 및 host group별 변수 설정
- 설정 위치 :
Inventory 파일
group_vars
Host group별 변수 설정
- 설정 위치 :
file - group_vars/<group name>
directory - group_vars/<group name>/xxx
host_vars
Host 별 변수 설정
- 설정 위치 :
file - host_vars/<host name>
directory - host_vars/<host name>/yyy
- Internal Use Only -
debugging
변수 디버깅 실행 결과 디버깅
- Internal Use Only -
wait_for
• 특정 서비스 데몬의 실행 후에 해당 play을 진행하기 위한 지시자
• host: 서비스 확인할 host 정보
• port: open 상태를 확인할 Port
• search_regex : 파일이나 soket의 문자 매칭에 사용
- Internal Use Only -
local_action
• control host 자신에서 모듈 실행하기 위함
• delegate_to : play를 다른 host에서 실행
- Internal Use Only -
기타
• ignore_errors : error로 playbook 중단 회피
• serial: 동시에 접속 및 play 수행할 host 수 지정 설정
• max_fail_percentage: 최대 실패 비율 초과일 경우, playbook 실행 중단
• run_once: 1회만 실행
• changed_when, failed_when: 특정 조건일 때 상태
• set_facts : playbook 내에 새로운 변수 설정(register로 받은 결과를 변수 저장)
• hostvars: 특정 호스트만 사용할 변수 선언
{{ hostvars['db.osci.kr'].ansible_eth1.ipv4.address }}
- Internal Use Only -
roles
• playbook을 여러개의 작은 단위로 분리
• Directory 별로 구분
• playbook 재사용 가능
• playbook 중복 사용 제거
• 특정 기능 구현을 위한 playbook의 묶음
[Create roles]
# mkdir -p nodejs-app/roles/nodejs/{meta,tasks,defaults,vars}
# vi nodejs-app/roles/nodejs/meta/main.yml
--------------------
---
dependencies: []
--------------------
• role skeleton directory 생성
- Internal Use Only -
Single playbook to role
playbook Role 변경
Playbook – role 사용
- Internal Use Only -
기타
• pre-tasks: role 실행 시작 전 수행할 play 정의
• post-tasks: role 실행 완료 후 수행할 play 정의
• dependencies: 해당 role이 함께 실행될 role 정의
Thank you.

Weitere ähnliche Inhalte

Was ist angesagt?

What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
Simplilearn
 
Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...
Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...
Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...
Simplilearn
 

Was ist angesagt? (20)

Introduction to ansible
Introduction to ansibleIntroduction to ansible
Introduction to ansible
 
DevOps Meetup ansible
DevOps Meetup   ansibleDevOps Meetup   ansible
DevOps Meetup ansible
 
Ansible
AnsibleAnsible
Ansible
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Best practices for ansible
Best practices for ansibleBest practices for ansible
Best practices for ansible
 
Ansible 101
Ansible 101Ansible 101
Ansible 101
 
Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례Red Hat Ansible 적용 사례
Red Hat Ansible 적용 사례
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Ansible roles done right
Ansible roles done rightAnsible roles done right
Ansible roles done right
 
ansible why ?
ansible why ?ansible why ?
ansible why ?
 
Ansible
AnsibleAnsible
Ansible
 
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
[ Pycon Korea 2017 ] Infrastructure as Code를위한 Ansible 활용
 
Ansible
AnsibleAnsible
Ansible
 
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
What Is Ansible? | How Ansible Works? | Ansible Tutorial For Beginners | DevO...
 
Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...
Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...
Ansible Tutorial For Beginners | What Is Ansible And How It Works? | Ansible ...
 
Ansible
AnsibleAnsible
Ansible
 
Ansible - Hands on Training
Ansible - Hands on TrainingAnsible - Hands on Training
Ansible - Hands on Training
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
Ansible - Introduction
Ansible - IntroductionAnsible - Introduction
Ansible - Introduction
 
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
도커 무작정 따라하기: 도커가 처음인 사람도 60분이면 웹 서버를 올릴 수 있습니다!
 

Ähnlich wie [오픈소스컨설팅]Ansible overview

Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정
HyeonSeok Choi
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약
kidoki
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
Ted Won
 

Ähnlich wie [오픈소스컨설팅]Ansible overview (20)

[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdf[Ansible] Solution Guide V0.4_20181204.pdf
[Ansible] Solution Guide V0.4_20181204.pdf
 
하둡관리
하둡관리하둡관리
하둡관리
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
Red hat ansible engine 2.7 release(Korean version)
Red hat ansible engine 2.7 release(Korean version)Red hat ansible engine 2.7 release(Korean version)
Red hat ansible engine 2.7 release(Korean version)
 
Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정Java 초보자를 위한 hadoop 설정
Java 초보자를 위한 hadoop 설정
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
Ansible overview
Ansible overviewAnsible overview
Ansible overview
 
하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정
 
리눅스서버세팅-김태호
리눅스서버세팅-김태호리눅스서버세팅-김태호
리눅스서버세팅-김태호
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurations
 
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Clouddocker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
docker on GCE ( JIRA & Confluence ) - GDG Korea Cloud
 
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
[온라인교육시리즈] 네이버 클라우드 플랫폼 init script 활용법 소개(정낙수 클라우드 솔루션 아키텍트)
 
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
Ngrok을 이용한 Nginx Https 적용하기.pptx
Ngrok을 이용한 Nginx Https 적용하기.pptxNgrok을 이용한 Nginx Https 적용하기.pptx
Ngrok을 이용한 Nginx Https 적용하기.pptx
 
Ch7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APICh7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and API
 
Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료Django로 배우는 쉽고 빠른 웹개발 study 자료
Django로 배우는 쉽고 빠른 웹개발 study 자료
 
Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
 
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
JCO 11th 클라우드 환경에서 Java EE 운영 환경 구축하기
 

Mehr von Open Source Consulting

Mehr von Open Source Consulting (20)

클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략
클라우드 네이티브 전환 요소 및 성공적인 쿠버네티스 도입 전략
 
[기술 트렌드] Gartner 선정 10대 전략 기술
[기술 트렌드] Gartner 선정 10대 전략 기술[기술 트렌드] Gartner 선정 10대 전략 기술
[기술 트렌드] Gartner 선정 10대 전략 기술
 
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
[오픈테크넷서밋2022] 국내 PaaS(Kubernetes) Best Practice 및 DevOps 환경 구축 사례.pdf
 
쿠버네티스 기반 PaaS 솔루션 - Playce Kube를 소개합니다.
쿠버네티스 기반 PaaS 솔루션 - Playce Kube를 소개합니다.쿠버네티스 기반 PaaS 솔루션 - Playce Kube를 소개합니다.
쿠버네티스 기반 PaaS 솔루션 - Playce Kube를 소개합니다.
 
Life science에서 k-agile으로 일하기 : with SAFe(Scaled Agile) & Atlassian
Life science에서 k-agile으로 일하기 : with SAFe(Scaled Agile) & Atlassian Life science에서 k-agile으로 일하기 : with SAFe(Scaled Agile) & Atlassian
Life science에서 k-agile으로 일하기 : with SAFe(Scaled Agile) & Atlassian
 
초보자를 위한 네트워크/VLAN 기초
초보자를 위한 네트워크/VLAN 기초초보자를 위한 네트워크/VLAN 기초
초보자를 위한 네트워크/VLAN 기초
 
Atlassian cloud 제품을 이용한 DevOps 프로세스 구축: Jira Cloud, Bitbucket Cloud
Atlassian cloud 제품을 이용한 DevOps 프로세스 구축: Jira Cloud, Bitbucket CloudAtlassian cloud 제품을 이용한 DevOps 프로세스 구축: Jira Cloud, Bitbucket Cloud
Atlassian cloud 제품을 이용한 DevOps 프로세스 구축: Jira Cloud, Bitbucket Cloud
 
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10![웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
[웨비나] 클라우드 마이그레이션 수행 시 가장 많이 하는 질문 Top 10!
 
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법[오픈소스컨설팅] EFK Stack 소개와 설치 방법
[오픈소스컨설팅] EFK Stack 소개와 설치 방법
 
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinux[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
 
[오픈소스컨설팅] 서비스 메쉬(Service mesh)
[오픈소스컨설팅] 서비스 메쉬(Service mesh)[오픈소스컨설팅] 서비스 메쉬(Service mesh)
[오픈소스컨설팅] 서비스 메쉬(Service mesh)
 
[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community[오픈소스컨설팅] ARM & OpenStack Community
[오픈소스컨설팅] ARM & OpenStack Community
 
[오픈소스컨설팅] Linux Network Troubleshooting
[오픈소스컨설팅] Linux Network Troubleshooting[오픈소스컨설팅] Linux Network Troubleshooting
[오픈소스컨설팅] Linux Network Troubleshooting
 
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
 
Atlassian ITSM Case-study
Atlassian ITSM Case-studyAtlassian ITSM Case-study
Atlassian ITSM Case-study
 
[열린기술공방] Container기반의 DevOps - 클라우드 네이티브
[열린기술공방] Container기반의 DevOps - 클라우드 네이티브[열린기술공방] Container기반의 DevOps - 클라우드 네이티브
[열린기술공방] Container기반의 DevOps - 클라우드 네이티브
 
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
주 52시간 시대의 Agile_ 오픈소스컨설팅 한진규 이사
 
Open infra and cloud native
Open infra and cloud nativeOpen infra and cloud native
Open infra and cloud native
 
[오픈소스컨설팅] jira service desk 201908
[오픈소스컨설팅] jira service desk 201908[오픈소스컨설팅] jira service desk 201908
[오픈소스컨설팅] jira service desk 201908
 
Community Openstack 구축 사례
Community Openstack 구축 사례Community Openstack 구축 사례
Community Openstack 구축 사례
 

[오픈소스컨설팅]Ansible overview

  • 1.
  • 2. 염진영, IT Specialist / 오픈소스컨설팅 Ansible
  • 3. - Internal Use Only - Configuration Management System • Provision • Orchestration • System 설정을 code로 관리 • 멱등성(indempotency) - 여러 번 적용해도 결과는 항상 동일 • chef, puppet, salt, ansible
  • 4. - Internal Use Only - Ansible 개요 • Configuration management tool • Open Source • Python 기반 • Michael DeHaan 개발(Cobbler 개발자) • Ansible. Inc는 Redhat에 인수됨 • ssh 연결 • 순차 적용 • 수백개의 모듈 제공 • Template - jinja2 • Playbook은 yaml 사용하여, syntax 이해가 쉬움 • Agentlee 방식으로 관리 호스트에 별도 작업이 필요하지 않음 • Pull-based 방식도 지원(ansible-pull - 상용) • Twitter가 ansible로 전환 • Web 관리 UI인 ansible-tower(상용)
  • 5. - Internal Use Only - Not support • 최초 OS 설치에 관여할 수 없음. • 구성 변화는 멱동으로 관리할 수 있으나, 모니터링은 할 수 없음. • 파일 변경 추적 X
  • 6. Pull-based(chef, puppet) Push-based(ansible) Agent Agentless 1. Admin : Configuration management script 변경 2. Admin : 변경 파일을 서버로 업로드 3. Agent : 일정 시간마다 서버로 접속하여 변경이력 확인 4. Agent : 새롭게 변경된 파일 다운로드 5. Agent : 변경된 파일 실행 1. Admin : playbook(Configuration Management script) 변경 2. Admin : 새로운 playbook 실행 3. Ansible on Control : 서버로 접속하여 변경된 playbook 실행 Pull-based & Push-based Pull-based 방식이 큰 규모의 서버 관리 및 신규 서버 추가에 더 적합하다고 하지만, ansible을 이용하여 수천대 서버를 관리하고 있으며, 서버 추가 및 삭제도 용의
  • 7. - Internal Use Only - Ansible Architecture
  • 8. - Internal Use Only - 구성요소 • Inventory : 관리 대상 서버 리스트 • Modules : host에 특정 action을 수행하는 패키지화된 sctips • play-book : 변수 및 task를 관리 호스트에 수행하기 위해 yaml 문법으로 정의된 파일 • plug-in : 확장 기능(email, logging etc) • Custom module : 사용자가 직접 작성한 모듈
  • 9. - Internal Use Only - Modules • Package mgmt : apt-get, yum, package • Commands : shell, command • File 관련 : file, copy • Template 관련 : template • Download : get_url, git, subversion • Server info : setup • Service 관리 : service • Cloud 관리 : aws, openstack
  • 10. - Internal Use Only - 연결 플러그인 • ssh, paramiko – ssh 연결 • local – localhost 연결 • winrm – windows 연결 • docker – docker에 연결
  • 11. - Internal Use Only - 설치 [설치방법 1 - 패키지] # yum install epel-release # yum install ansible [설치방법 2 – pip] # yum install autoconf gcc python-devel libffi-devel openssl-devel # pip install ansible [update] # yum update ansible # pip install ansible --upgrade 관리 호스트 : python 2.6 or 2.7 이상 * 관리 대상 호스트 : python 2.4은 python-simplejson python 2.5 이상은 필요 없음
  • 12. - Internal Use Only - 디렉토리 구성 /usr/lib/python2.7/site-packages/ansible/modules Core Modules 위치 /usr/lib/python2.7/site-packages/ansible 설치 디렉토리 PATH – CentOS7 기준 /usr/lib/python2.7/site-packages/ansible/modules/system/ping.py Ping Module 위치 /usr/lib/python2.7/site-packages/ansible/modules/commands/shell.py Shell Module 위치
  • 13. - Internal Use Only - 설정 – ansible.cfg # vi ansible.cfg [defaults] inventory = hosts host_key_checking = False remote_user = ansible log_path=~/ansible.log no_log=False no_target_syslog=False forks = 20 [privilege_escalation] become=True become_method=sudo become_user=root become_ask_pass=False • inventory : inveroty 파일 or 디렉토리 경로 • host_key_checking : Host_key(~/.ssh/known_host) 체크 • remote_user : ssh 접속 시 사용할 user • log_path : ansible 실행 로그 파일 경로 • no_log : • no_target_syslog : 관리 host의 syslog에 ansible 로그 여부 • forks : 동시 접속 노드 수(default : 5) • privilege_escalation : sudo 관련 설정
  • 14. - Internal Use Only - ansible.cfg 순서 ANSIBLE_CONFIG=<ansible.cfg PATH> 기본 경로 홈 디렉토리 현재 디렉토리 환경 변수
  • 15. - Internal Use Only - 설정 - Inventory file • Ansible에서 관리하는 호스트 정의 • 호스트 인벤토리 기본 위치 : /etc/ansible/hosts • --inventory PATH 위 옵션으로 임의 경로의 파일을 지정 호스트 그룹 이름 연결 방법, ssh 접속 유저, ssh 패스워드 설정 특정 호스트 그룹의 변수 설정 호스트 그룹을 서브그룹으로 다시 그룹핑
  • 16. Inventory file 예제 testserver ansible_ssh_host=192.168.0.100 ansible_ssh_port=2222 ansible_ssh_user=user ansible_ssh_private_key_file=./ssh/private_key
  • 18. Ad-hoc commands # ansible <host> [options] 예제) # ansible controllers –m shell –a “date” # ansible controllers -m shell -a "ls -al /tmp/ansible_test.tmp” # ansible controllers -m copy -a "src=ansible_test.tmp dest=/tmp/ansible_test.tmp"
  • 19. - Internal Use Only - ansible 실행 Ansible 수행 시, 실행 프로세스 /usr/bin/ssh -o ForwardX11 no -o ForwardAgent no -o PermitLocalCommand no -o ClearAllForwardings yes -o batchmode yes -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with- mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=centos -o ConnectTimeout=10 -o ControlPath=/root/.ansible/cp/d8ac695b15 -o Protocol 2 -s -- 192.168.2.131 sftp ansible_ssh_user ansible_connection ansible.cfg 및 inventory 설정에 따라 ‘–o ‘에 설정되는 ssh-client 옵션들이 변경됨. - ansible_connection : ssh 세션 재활용 - ansible_python_interpreter : host의 python path가 /usr/bin/python이 아닌 경우 설정 필요
  • 20. - Internal Use Only - YAML Json과 비슷한 포맷 --- : dash 3개는 document의 시작을 알림 # : 주석 String : 따음표를 사용하지 않아도 됨. 단, 변수를 표현할 때 사용 ex) {{ 변수 }} YAML JSON List - Value1 - Value2 [ “Value1”, “Value2” ] Dictionary key1: value1 key2: value2 { “key1”: “value1”, “key2”: “value2” } Line Folding key1: > long values1 go on, long values2 go on Key2: short value { “key1: “long values1 go on, long value2 go on”, “key2”: “short value” }
  • 21. - Internal Use Only - Playbook in YAML & JSON YAML JSON
  • 22. - Internal Use Only - Playbook • ansible 배포에 내용(plays)을 정의한 파일 • yaml 문법 * Play : host에 접속하여 action을 수행하는 것 ---: yaml 문법 처음 name: 해당 play에 대한 설명(주석), optional become: sudo 사용 지정 hosts: Inventory의 ‘loadbalancer’ group을 대상으로 지정 tasks: host에 접속하여 해당 module 및 arg에 맞게 실제 action 수행하는 play를 list로 정의 - yum을 사용하여 패키지 설정, yum cache 업데이트 - service: systemd로 서비스 시작, enabled - copy: 설정 파일 복사, permission 644 - template: jinja2 작성된 tempate 파일 복사, permission 644 - file: file 삭제 handlers: tasks에 정의된 play 중, notify에 의해 호출될 service 모듈로 정의된 handler, 서비스 재시작 등 service : nginx 재시작 handler
  • 23. ansible 동작 순서 1. Playbook에 정의된 task를 수행하기 위한 python script 생성 2. 해당 script를 대상서버로 복사 3. 해당 script 실행 4. 모든 host에서 script 실행이 완료될 때까지 기다림
  • 24. - Internal Use Only - Playbook & Shell playbook - name: Ensure NTP is installed. yum: name=ntp state=present Shell script if ! rpm -qa | grep -qw ntp; then yum install ntp fi playbook Shell script - name: Ensure NTP is running service: name=ntpd state=started enabled=yes if ps aux | grep -v grep | grep "[n]tpd" > /dev/null then echo "ntpd is running." > /dev/null else systemctl start ntpd.service > /dev/null echo "Started ntpd.” fi systemctl enable ntpd.service 출처 : “ansible for devops” by Jeff Geerling, 2015
  • 25. - Internal Use Only - Jinja2 Jinja2 - Python Template 언어 - 템플릿 적용을 위해 사용 - 참고 : http://jinja.pocoo.org/docs/dev/templates/ - loop statement - If statement(조건이 만족할 때만 내부 로직 수행)
  • 26. - Internal Use Only - 명령어 # ansible-playbook Ex) # ansible-playbook <play-book file> [Task 리스팅] # ansible-playbook --list-tasks <play-book file>
  • 27. - Internal Use Only - 실행 ansible-playbook Options : -i --invertory=host-file -v --verbose -e --extra-vars=VARS -f --forks=NUM -c --connection=TYPE --check : run in Check Mode [Syntax check] # ansible-playbook –syntax-check <playbook.yml> [dry run] # ansible-playbook –C <playbook.yml>
  • 28. - Internal Use Only - ansible-facts • Tasks 수행 전, 서버의 정보 수집(hostname, IP, Mac etc) • 변수로 사용 가능 • gather_facts 사용 X # vi playbook.yml 자주 사용되는 facts ansible_os_family ansible_hostname ansible_memtotal_mb - hosts: test gather_facts: no
  • 29. - Internal Use Only - setup • Cache enable [defaults] gathering = smart fact_caching_timeout = 86400 fact_caching = jsonfile fact_caching_connection = /tmp/ansible_fact_cache # redis 사용 설정 #fact_caching = redis # memcached 사용 설정 #fact_caching = memcached
  • 30. - Internal Use Only - file • 파일, 디렉토리, 링크 파일 생성 • path: 파일 및 디렉토리 PATH • state: 대상 PATH의 타입 - link : 링크 파일 - directory : 디렉토리 - absent : 삭제 • mode: 파일 퍼미션(8진수 표현을 위하 ‘0’을 앞에 붙여야 함
  • 31. - Internal Use Only - copy • remote 서버로 복사를 위한 파일 • src: 소스 파일 위치 • dest: 대상 서버의 복사될 위치 • mode: 파일 퍼미션(8진수 표현을 위하 ‘0’을 앞에 붙여야 함
  • 32. - Internal Use Only - templates • Jinja2 작성 • File Contents 변경이 내부 로직에 따라 자동으로 이루어지는 파일
  • 33. - Internal Use Only - with_items • Iteration • 2개 이상의 변수를 리스트로 선언, 반복문으로 사용 가능
  • 34. - Internal Use Only - when • 조건이 true일 때 해당 play 실행
  • 35. - Internal Use Only - handlers • notify 지시자를 사용하는 task에서 해당 module을 실행을 완료한 후, notification 발생(notify에 지정된 handler 호출) • notify에 지정된 ‘handler 이름’으로 handlers에 정의된 handler를 찾아 task(restarting services) 수행
  • 36. - Internal Use Only - vars • playbook or template에서 사용한 변수 정의 vars 지시자 Playbook 내부의 vars 지시자에 설정 ex) vars_files 변수가 설정된 개별 파일을 include하는 설정 roles의 defaults Role별 변수 설정 - 설정 위치 : roles/<role name>/defaults/main.yml - roles/<role name>/vars/main.yml inventory에 설정 Host 및 host group별 변수 설정 - 설정 위치 : Inventory 파일 group_vars Host group별 변수 설정 - 설정 위치 : file - group_vars/<group name> directory - group_vars/<group name>/xxx host_vars Host 별 변수 설정 - 설정 위치 : file - host_vars/<host name> directory - host_vars/<host name>/yyy
  • 37. - Internal Use Only - debugging 변수 디버깅 실행 결과 디버깅
  • 38. - Internal Use Only - wait_for • 특정 서비스 데몬의 실행 후에 해당 play을 진행하기 위한 지시자 • host: 서비스 확인할 host 정보 • port: open 상태를 확인할 Port • search_regex : 파일이나 soket의 문자 매칭에 사용
  • 39. - Internal Use Only - local_action • control host 자신에서 모듈 실행하기 위함 • delegate_to : play를 다른 host에서 실행
  • 40. - Internal Use Only - 기타 • ignore_errors : error로 playbook 중단 회피 • serial: 동시에 접속 및 play 수행할 host 수 지정 설정 • max_fail_percentage: 최대 실패 비율 초과일 경우, playbook 실행 중단 • run_once: 1회만 실행 • changed_when, failed_when: 특정 조건일 때 상태 • set_facts : playbook 내에 새로운 변수 설정(register로 받은 결과를 변수 저장) • hostvars: 특정 호스트만 사용할 변수 선언 {{ hostvars['db.osci.kr'].ansible_eth1.ipv4.address }}
  • 41. - Internal Use Only - roles • playbook을 여러개의 작은 단위로 분리 • Directory 별로 구분 • playbook 재사용 가능 • playbook 중복 사용 제거 • 특정 기능 구현을 위한 playbook의 묶음 [Create roles] # mkdir -p nodejs-app/roles/nodejs/{meta,tasks,defaults,vars} # vi nodejs-app/roles/nodejs/meta/main.yml -------------------- --- dependencies: [] -------------------- • role skeleton directory 생성
  • 42. - Internal Use Only - Single playbook to role playbook Role 변경 Playbook – role 사용
  • 43. - Internal Use Only - 기타 • pre-tasks: role 실행 시작 전 수행할 play 정의 • post-tasks: role 실행 완료 후 수행할 play 정의 • dependencies: 해당 role이 함께 실행될 role 정의