레드햇 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 통신을 함.
     - 주석
         # = 해당 라인이 전체 주석
         ; = 입력된 오른쪽부터 주석




        


Posted by pysany
,