본문 바로가기
Container & Orchestration/CICD

Ansible (1) - 설치와 ssh 설정

by abstract.jiin 2024. 5. 31.

IaC [infrastructure as Code](ansible ,terraform 등)

인터페이스의 구성 정보를 코드(스크립트)를 통해 관리하는 방법, 코드로 원하는 환경을 구축 하는 것입니다.

  • 콘솔로 설정하는 부분들을 실행 단계에 따라 코드로 관리하면 자동화 할 수 있다.
  • 기타 물리 장비와 가상머신 관련 구성 리소스를 관리하기 편하다.
  • 스크립트 형태이기 때문에 버전 관리가 용이하다 

Ansible : 구성 관리 도구, 구축 된  인프라의 구성 정보를 관리 [장점: agent가 필요하지 않다. python 이 깔려있다면]

Terraform : 인프라 구축 단계에서 구축 정보 관리 할 수 있고 DSL을 따로 알아야 합니다.

 

그 외 Puppet, Chef, Salt 등이 있습니다.

 

Ansible

대상 서버에 원하는 프로그램을 다운받고 설치, 파일 복사, 시스템 제어가 가능합니다.

aws 호환, window 호환 / 관리 대상 서버 node 1.2.3...의 운영체제가 각기 다른 os 여도 제약이 없습니다(파이썬과 ssh 만 있다면).

response 결과 값은 ok/failed/changed/unreachable  4가지로 받게 됩니다.

 

 

서버에 Ansible 설치하기

ansible 설치를 하고 나면 ansible 명령어를 사용할 수 있게 됩니다. 

 

기본 설치

# sudo apt -y update

# sudo apt -y upgrade

sudo apt -y install ansible sshpass

ansible@-cicd:~/ansible$ ansible --version
ansible 2.10.8
config file = None
configured module search path = ['/home/ansible/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0]

 

설정 파일 경로 /etc/ansible/ansible.cfg

접속 호스트 목록에 그룹이름과 ip 지정은  /etc/ansible/hosts  

 

host 서버 등록

/etc/ansible/hosts 에 ansible이 관리할 host 서버 정보를 등록합니다. 

 

ansible@-cicd:~/ansible$ cat /etc/ansible/hosts
[devops]
192.168.2.13
192.168.2.12
192.168.2.11
 
보통 이런식으로 등록하는데 root 계정이 아니라면 user를 명시해주는 것이 추후에 편리합니다. 
명시하지 않으면 추가로 계속 커맨드로 입력해야 동작합니다.
그래서 아래와 같이 작성했습니다.
 
ansible@-cicd:~/ansible/.ssh$ cat /etc/ansible/hosts
[devops]
192.168.2.13 ansible_user=apim_vup
192.168.2.12 ansible_user=apim_vup
192.168.2.11 ansible_user=ansible

 

playbook 실행으로 host서버에 요청을 날릴 때 마다 ssh 접속 비밀번호를 작성할 수는 없으니까요, ssh 설정을 해줘서, 그 과정을 생략합니다.

SSH 

 

아래 과정을 등록한 모든 ip에 해줍니다.

  • SSH 키 생성 ( public 과 private key들 생성)
    • $ssh-keygen
    • $ssh-copy-id {계정명}@[접속할 서버 IP]
  • public key 를 원격 호스트에 ssh-copy-id 사용하여 복사

 

다음으로 다 연결이 되었는지 테스트 합니다. 

$ ansible {모듈(그룹)명} -m ping

ansible@-cicd:~/ansible/.ssh$ ansible all -m ping
192.168.2.11 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
}
192.168.2.12 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
192.168.2.13 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}

 

잘 연결 됐습니다.