서버 관리를 좀 더 편하게 해 보려고 ansible 구성
- 컨트롤러 서버: Ubuntu 20.04.5 LTS / Python 3.8.10
Ansible?
다수의 서버를 효율적으로 관리 할 수 있게 해주는 자동화 도구
- 구조
- 서버 / 클라이언트 구조 (ansible 명령을 날리는 컨트롤러 서버에만 ansible 설치하면 됨)
- Agentless 방식
- SSH를 통한 통신으로 SSH 접속만 가능하뎐 제어 가능
- 구성 요소
- 인벤토리
- ansible에 의해 제어되는 대상이 정의 된 파일 (hosts.ini)
- 플레이북
- 인벤토리에 정의한 대상에서 무엇을 수행할지 정의하는 역할 (yaml 포맷)
- 모듈
- 플레이북에서 작업이 어떻게 수행될 지 나타내는 요소로 다양한 모듈을 지원.
- 인벤토리
- 특징
- 멱등성(idempotence)
- 작업을 여러번 수행해도 같은 결과값이 나오는 성질
- 동일한 작업을 여러번 적용하더라도 변경이 필요한 부분만 수정하여, 항상 결과값은 동일하게 나옴.
- 멱등성(idempotence)
- 설치 요구 사항
- Python 2.6 또는 3.5 이상 설치가 필요 (Python 으로 개발 된 서버라 필수)
ansible 설치 검색을 하다 보면 pip, pip3로 설치하거나 apt로 설치하는 경우가 있음
- pip, pip3
- 파이썬 패키지의 저장소인 PyPl(Python Package index)에서 패키지 내용을 가져옴
- pip는 Python2에서 사용하고, pip3는 Python3에서 사용함.
- 다양한 버전에 대한 설치가 가능
- apt 에 비해 다양한 모듈 설치가 가능.
- apt
- Canonical 에서 관리하는 Ubuntu 레포지토리에서 패키지 내용을 가져옴
- 일반적을 가장 최신 버전에 대한 설치 제공
Ansible 설치
개발용도가 아닌 서버 관리용이라 apt 로 구성 진행
# apt install ansible# ansible --version
정상 동작 확인
# ansible -m ping localhost
패스워드 없이 접근(SSH키) 설정도 가능하나, ansible 전용 일반 계정(sudo 권한)을 사용하여 패스워드 인증 방식으로 구성.
- 구성 파일 위치: /etc/ansible/ansible.cfg
- ansible 전용 계정으로 실행 시 해당 계정 홈디렉토리에 있는 .ansible.cfg를 참고하고, 없을 경우 기본 구성 파일 참고
Ansible 환경 설정
ansible.cfg 는 크게 2개의 섹션이 있음
- [defaults] - ansible 작업의 기본 환경설정
- inventory =
- 사용할 인벤토리 파일 위치
- remote_user =
- 클라이언트 연결 시 사용할 계정을 표기. (별도로 등록하지 않으면 ansible 실행하는 계정이 사용 됨)
- 여기에 설정 된 계정에 대해 [privilege_escalation] 설정을 적용.
- ask_pass =
- 클라이언트 접속 시 패스워드 입력 표시 (기본값 - false)
- 패스워드 입력이 필요한 경우 true 로 변경.
- inventory =
- [privilege_escalation] - 컨트롤러 서버에서 ansible 권한 에스컬레이션 방법 정의
- become =
- remote_user를 통해 접속한 사용자에게 sudo 또는 su를 사용하여 상위 계정으로 전환 여부 확인 (기본값 - false)
- sudo 또는 su 권한을 부여하려면 true 로 표기
- become_method =
- 상위 유저로 전환하는 방식 정의 (기본값 - sudo)
- become_user =
- 상위 유저로 전환 시 어떤 계정을 사용할건지 정의 (기본값 - root)
- become_ask_pass =
- become_method 사용 시 패스워드 입력 표시 (기본값 - false)
- 패스워드 입력이 필요한 경우 true로 변경.
- [defaults] 에서 정의한 remote_user 가 접속하고자 하는 클라이언트에 대해 sudo 권한이 있는 경우 false를 사용해도 됨.
- become =
초기 실행 시 오류
"msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"
- 패스워드 기반 ansible 사용 시 컨트롤러 서버에 sshpass 설치가 필요함
- # apt install sshpass
- sshpass - ssh를 통해 다른 서버에 연결하고 명령어를 실행 할 수 있는 기능.
"msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshp ass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host."
- .ansible.cfg 파일 [defaults] 에 ssh host checking 을 하지 않도록 설정
- 설정 값 - host_key_checking = False
/home/ansibleuser/.ansible.cfg 설정 값
/home/ansibleuser/inventory 파일은 아래와 같이 작성하면 됨.
-------------------------------------
[servers]
서버명
서버명
...
서버명
-------------------------------------
테스트
$ ansible all -m ping