레드햇 ansible 교육 참여 했다. 4일간의 교육인데..
ansible 을 처음 접하시거나 스터디 중이신분들에게 도움 될만할 것 같아 남긴다.
강의 전체를 남기는건 아니고, 강의중 틈틈히 메모한 내용이다.
[ansible] 교육 1일차
# control node ansible system requirements
- control node = ansible server를 말함.
- linux & unix 지원
- windows 미지원
- python 2 (2.6 이상)
- ssh 통신이 가능 해야한다.
- windows server 관리는 winrm 패키지가 설치 되어야한다.
# management HOST
- 관리 node 를 말함.
- all machine 사용 가능
- python 2 (2.4 이상)
- python 2.5 이하는 python-simplejson 패키지를 별도로 설치 해야한다.
- selinux 사용하는 경우 libselinux-python 패키지를 별도로 설치 해야한다.
- python 이 설치 되어있지 않은 경우
- raw 모듈을 사용한다. ( python 없어도됨 )
- command & shell 모듈을 사용한다. (python 필요 )
- 위 명령어 모두 멱등성 보장 안됨.
# windows management Hosts
- powershell 3.0 이상 필요
- windows 가이드 문서 참고 필수.
# ad-hoc (ansible command)
- ansible 명령어로 간단하게 ansible 실행 가능
- playbook 이 아니고 약식으로 사용 가능하다. 간단한 모듈을 쉽게 사용 가능
- 1회성 명령어
- ansible inventory 내 호스트 확인
- ansible hostname -i inventroy --list-hosts
- 호스트 ip 직접 입력
- /etc/ansible/hosts 파일 내에 등록이 되어있어야 한다.
- ansible 10.20.20.1 -m ping 과 같이 사용 가능.
- 모듈 인자를 한개 사용
ansible servera -m yum -a name=httpd
- 모듈 인자를 두개 이상 사용 - '' or "" 으로 묶어서 사용.
ansible servera -m yum -a 'name=httpd state=latest'
- ansible-doc -l or --list 명령어는 사용할 수 있는 모듈의 목록을 보여줌.
- shell 모듈 : |, > 등 사용 가능. command 는 사용 불가
# inventory
- static ( 정적 ) inventory
- /etc/ansible/hosts 또는 별도의 inventory 파일에 미리 hostname, ip 등의 정보를 입력하여 작성 가능
- 아래와 같이 그룹으로 나누어 작성하는것이 nice 하다.
[webserver]
web-server1
web-server2
[dbserver]
db-server1
db-server2
- 그룹명내 host 정보는 다른 그룹에서도 사용 가능하다.
- 그룹별로 사용 가능한 사용자를 지정 할 수 있다.
- all 과 ungrouped
- ansible all -i inventory --list-hosts
그룹이 있는것과 없는 호스트들을 모두 나열한다.
- ansible ungrouped -i inventory --list-hosts
그룹이 없는것만 확인 가능
- inventory 작성시 호스트 이름과 그룹 이름을 중복해서 사용하면 안된다.
중복해서 사용할 경우 호스트가 우선시 되어 그룹이 무시된다.
- inventory 호스트 기본 파일의 위치는 /etc/ansible/hosts 파일이다.
- /etc/ansible/hosts 파일을 사용하는건 썩 좋은 방법은 아니다.
- /etc/ansible/hosts 수정하려면 root 권한이 필요하다. 불필요한 권한 설정
- /etc/ansible/ansible.cfg 파일 내 기본 inventory 파일 내 별도 inventory 파일 지정 가능.
- 위 방법도 좋은 방법은 아니다. inventory 나 ansible.cfg 파일은 role 안에서 만들어서 사용하는것이 nice하다.
- 연속된 숫자나 알파벳 사용법
[webserver]
server[1:10]
server[a:d]
- dynamic ( 동적 ) inventory
- 자동화 스크립트를 통해 inventory 를 동적으로 관리 할 수 있다.
# ansible 설정 파일 관리
- ansible.cfg 위치
- /etc/ansible/ansible.cfg
- ~/.ansible.cfg
- ./ansible.cfg -> 가장 많이 사용하고 nice하다. 작업 디렉터리에서 만들어 사용 하는것.
- $ANSIBLE_CONFIG 환경변수 사용
- playbook 파일내 옵션 설정
- 우선순위 ( 오른쪽으로 갈 수록 우선 순위 낮음 )
- playbook 파일내 옵션 설정 -> $ANSIBLE_CONFIG -> ./ansible.cfg -> ~/.ansible.cfg -> /etc/asible/ansible.cfg
- 각 config 파일에 없는 설정은 위 우선 순위에 따른 config 파일에서 찾는다. 최종은 /etc/ansible/ansible.cfg
- 환경변수 등록
ANSIBLE_CONFIG=/tmp/ansible.cfg
export $ANSIBLE_CONFIG
- /etc/ansible/ansible.cfg 파일에 있는 주석처리 되어있는 설정 seciton 모듈은 대부분 기본 값으로 들어가있다.
- inventory 는 정적, 동적 파일을 모두정할 수 있는데, 알파벳 순으로 우선 읽기 때문에, 정적파일을 먼저 읽을 수 있게끔
정적 inventory 파일명은 00-inventory~05-inventory 와 같이 숫자로 만들어주어 사용하는게 nice 하다.
- [defaults] section 에서 remote_user 를 지정하여 ssh 접속하는 계정을 미리 지정 할 수 있다.
remote_user 에 대하여 미리 key 를 node들의 authorized_key 파일에 미리 넣어서 권한을 나누어서 사용 할 수 있겠다.
- [defaults] section 에서 ask_pass=true 는 패스워드를 물어본다. key 설정이 되어있어도 물어본다.
- [privilege_escaltion] seciton
#become=True -> 기본값은 False 이다. 이걸 활성화 해주면 아래 옵션도 사용된다.
#become_method=sudo -> su 사용가능하지만 비추천
#become_ask_pass=False -> root 패스워드를 물어보지 않음.
- 계정 인증은 계정 이름으로 매칭하는것이 아니고 uid 로 매칭하기 때문에 모든 node에 uid를 맞춰주는것이 좋다.
- [transport] section
- control 서버를 대상으로 ansible 하면 ssh 접속이 아니고 local 로 판단해서 local 이라는 것 을 사용하여 ansible 실행
- transport = smart 는 대상 서버가 다른 node 이냐, control 서버이냐 판단해서 ssh or local 통신을 함.
- 주석
# = 해당 라인이 전체 주석
; = 입력된 오른쪽부터 주석
'ansible' 카테고리의 다른 글
[ansible] 교육 3일차 (0) | 2018.08.29 |
---|---|
[ansible] 교육 2일차 (0) | 2018.08.28 |
[ansible] 서버마다 작업해야할 파일이 다른경우 wildcard 처리까지. (0) | 2018.08.28 |
[ansible] ntp 설치 (0) | 2018.08.26 |
[ansible] 여러개의 파일 / 디렉터리를 삭제하는 방법 (0) | 2018.08.26 |