레드햇 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
,