Ansible 튜토리얼 - 희망편
지난 이야기
인프런 강의가 VirtualBox 기반인데 나는 도커로 실습해보고 싶어서 똥고집을 부렸고 열심히 삽질을 해보았지만 결국 실패로 끝났다.
따라할만한 예제를 찾다가 좋은 강의를 발견하고 따라했는데 됐다.
역시 세계는 넓고 고수는 많다는 것을 다시 한번 느꼈다.
환경 설정은 아래의 강의를 따라했다.
지금 부터는 아래의 강의를 글로 옮겨놓은 것이니 조금 더 정확한 설명이 필요하다면 아래의 강의를 보는 것을 추천한다. (영어는 당신의 몫)
https://www.youtube.com/watch?v=Sf8urGA-Yhs
Ansible 튜토리얼
가장 먼저 해야할 일은 베이스 이미지를 먼저 내려받는다.
docker pull ubuntu
이번엔 우분투로 실습할 것이기 때문에 ubuntu를 받자.
docker run -itd --name master ubuntu /bin/bash
이때 -it은 STDIN 표출 입출력을 열고 가상 tty를 통해 접속하겠다는 것을 의미한다.
-d는 백그라운드로 실행하는 옵션이기 때문에 위 명령어를 실행해도 도커로 접속하지 않는다.
–name은 이 도커 컨테이너의 이름을 명시하는 옵션인데 master 노드라서 master
라고 주었다.
그리고 /bin/bash는 bash 쉘을 사용하기 위함이다.
컨테이너시 시작시 실행하는 커맨드로 /bin/bash가 실행된다.
그 후 docker ps
명령으로 해당 컨테이너의 이름을 알아낸 후 접속하자.
docker attach [Container_Name]
exec이 아닌 attach를 사용하는 이유가 궁금할 것이다.
공통점은 둘 다 컨테이너에 접속할 때 사용하는 명령어이다.
둘의 차이점은 exec의 경우 컨테이너에 새로운 프로세스를 실행할 때 사용한다.
attach의 경우 실행중인 컨테이너에 접속할 때 사용한다.
master 컨테이너에 접속 후 필요한 기능들을 설치해준다.
apt update
apt install python ansible openssh-client vim iputils-ping -y
그리고 새로운 터미널 프로세스를 하나 띄우고 거기에서 마찬가지로 컨테이너를 하나 만든다. 이름은 node01
docker run -itd --name node01 ubuntu /bin/bash
접속 후 아래의 명령을 수행한다.
apt update; apt install ssh vim -y
그러면 기초적인 다운로드는 끝났다.
이제 node1 컨테이너에서 다음의 명령어를 수행해서 root 계정의 비밀번호를 설정해주자.
passwd root
그러면 UNIX 패스워드를 입력하라고 나올텐데 하고 싶은 비밀번호를 설정하면 된다.
나는 1234로 설정했다.
vim /etc/ssh/sshd_config
로 들어가서, 아래와 같이 수정해주자.
수정 후 아래의 명령어를 차례로 입력해주자.
service ssh restart
service ssh enable
service ssh start
다시 master 컨테이너로 돌아오자.
master 컨테이너에서는 ansible의 호스트들의 ip가 필요하다.
즉, 도커의 private ip가 필요한데 이를 간단히 볼 수 있는 방법이 있다.
새로운 터미널 프로세스를 띄우고 아래의 명령어를 입력해보자.
docekr network inspect bridge
그러면 현재 실행 중인 컨테이너들의 private ip를 알 수 있다.
Name으로 컨테이너의 이름이 명시되어있기 때문에 쉽게 어떤 컨테이너가 어떤 ip를 갖고 있는지 확인할 수 있다.
master 노드에서 아래의 명령어를 입력해서 node01에 핑이 제대로 가는지 확인해보자.
ping 172.17.0.3
제대로 핑이 가는 것을 확인했다면 아래의 명령어를 입력하자.
ssh-keygen
// 뭔가 설정하라고 나오면 엔터 계속 치면 된다.
ssh-copy-id root@172.17.03
// yes 입력
// 아까 설정한 root 계정의 패스워드를 입력하자
그리고 테스트를 위해 ssh로 해당 컨테이너에 접근해보자.
ssh root@172.17.0.3
접속이 된다면 exit
를 입력하고 다시 master 컨테이너로 돌아오자.
준비는 거의 끝났다.
hosts 파일은 인벤토리이다.
이전 시간에 살펴봤듯이 인벤토리는 배포환경 구성에 필요한 서버들의 목록을 갖고 있는 파일이다.
vim /etc/ansible/hosts
여기에 우리가 배포의 대상이 될 IP를 적어주자.
그리고 아래의 명령어를 실행하여 ping을 날려보자.
ansible all -m ping
안된다
아 탈주 마렵다
또 실패인가 하고 낙담하고 있었는데 에러 로그가 이전과는 조금 달랐다.
검색해보니 공식 홈페이지에 나와있는 내용을 어떤 친절한 분께서 정리해놓으신 블로그를 발견했다.
즉 핑을 날릴때 파이썬 위치를 명시해주면 된다.
그러면 드디어 영롱한 녹색 빛을 영접할 수 있게 된다.
이 부분도 생략이 가능한데 hosts 파일에 variable을 추가해주면 된다.
그러면 별도의 옵션 없이도 핑 테스트가 가능하다.
이제 본격적으로 Ansible을 사용해서 환경 설정을 해보자.
Reference
인프런 조훈님 강의 - 처음부터 설치하며 배우는 Ansible
https://www.vobour.com/ansible-%EC%9D%98-bin-sh-1-usr-bin-python-n
https://www.youtube.com/watch?v=Sf8urGA-Yhs
https://www.vobour.com/ansible-%EC%9D%98-bin-sh-1-usr-bin-python-n