https://www.inflearn.com/course/ansible-%EC%9D%91%EC%9A%A9
[응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant) - 인프런 | 강의
센트OS 이외에 얼마나 다양한 시스템에 엔서블이 사용될 수 있는지 배워봅시다. 앤서블을 리눅스 이외에 윈도우 및 네트워크 시스템과 같은 여러가지 시스템에 대해서 다양한 목적으로 사용하
www.inflearn.com
ㅇ Vagrant를 이용해서 윈도우를 추가하기
1. 기존에 센트OS을 구성을 복사하고 붙여 넣기함
2. 박스 이미지를 센트OS가 아닌 윈도우의 이미지로 변경
3. 최소한의 내용만 구성파일에서 수정
1) 베이그런트에서 부르는 호스트 이름 수정
2) 버추얼박스 설정 변경
a. 버추얼박스에서 구분하는 호스트 이름 작성
b. CPU와 메모리를 최소한 사용하게 변경
3) 가상머신의 호스트 이름을 수정
4) 인터넷에 연결되는 IP 설정
5) 호스트 PC의 포트를 IP 주소하와 유사하게 변경
6) 윈도우 방화벽을 비활성화
- 아래 내용을 vagfile에 추가
* vagrant cloud 에 있는 opentable/win-2012r2-standard-amd64-nocm 다운로드 시, 403 에러 발생
=> "sysnet4admin/Windows2016" 로 변경 (https://www.inflearn.com/questions/181895)
#Ansible-Node05 ( Windows2012R2 )
config.vm.define:"ansible-node05" do |cfg|
cfg.vm.box = "sysnet4admin/Windows2016"
cfg.vm.provider:virtualbox do |vb|
vb.name="Ansible-Node05 (Udemy-Bloter)"
vb.customize ["modifyvm", :id, "--cpus",2]
vb.customize ["modifyvm", :id, "--memory",2048]
end
cfg.vm.host_name="ansible-node05"
cfg.vm.synced_folder ".", "/vagrant", disabled: true
cfg.vm.network "public_network", ip: "192.168.0.15"
cfg.vm.network "forwarded_port", guest: 22, host: 19215, auto_correct: false, id: "ssh"
cfg.vm.provision "shell", inline: "netsh firewall set opmode disable"
end
- Ansible_env_ready.yml
1. /etc/hosts 에 추가 노드 등록
2. /etc/ansible/hosts에 관리할 추가 노드 등록
- name: Setup for the Ansible's Enviorment
hosts: localhost
gather_facts: no
tasks:
- name: Add "/etc/hosts"
blockinfile: |
dest=/etc/hosts
content="
192.168.0.10 server
192.168.0.11 node01
192.168.0.12 node02
192.168.0.13 node03
192.168.0.14 node04
192.168.0.15 node05
"
- name: Add "/etc/ansible/hosts"
blockinfile: |
dest=/etc/ansible/hosts
content="
[CentOS]
node01
node02
[Ubuntu]
node03
node04
[Win]
node05
"
# vagrant up ansible-node05 로 node05 start
# vagrnat provision ansible-server 로 업데이트 내용 프로비저닝 하기
ansible-server에서
# ansible Win -m win_ping -k
실행 (기존 ping 모듈은 윈도우는 안됨)
=> 에러 발생 why??
ㅇ 앤서블의 동작 원리 살펴보기
- Ansible-Server는 client에게 SSH를 통해서 파이썬 스크립트를 보냄
작동하기 위해서는 즉..
> 요구사항
1. SSH 통신이 되어야함
2. 파이썬이 설치되어 있어야함
=> 윈도우는 ssh도 파이썬도 안됨
-> 설치하기에는 client에서 설치하는게 없어야하는 ansible 의 장점이 사라짐
> 윈도우 노드 요구사항
1. winrm으로 통신이 되어야함
> winRM (윈도우 원격관리) 는 microsoft가 구현한 WS-Management 프로토콜로서, 웹서비스를 사용하여 로컬 및 원격 컴퓨터와 안전하게 통신할 수 있는 방법
2. 파이썬을 윈도우가 이해하는 언어로 해석해주어야함
=> 모듈로 해결 (pywinrm)
- Ansible_env_ready.yml 에
> Yum install pip
> pip install pywinrm
내용 추가
- Ansible_env_ready.yml
- name: Install pip
yum:
name: python-pip
state: present
- name: Install pywinrm
pip:
name: pywinrm
state: present
이렇게 해도 win_ping 은 실패가 난다
이유 : 계속해서 ssh로 통신하려 하기때문에,
1. winrm 으로 지정
2. 사용 가능한 계정을 설정
3. ssh port : 5985 포트 지정
을 해야함
- Ansible_env_ready.yml 파일 변경
[Win]
node05 ansible_connection=winrm ansible_ssh_user=vagrant ansible_ssh_port=5985
이후, ansible-server -> Win 그룹으로 win_ping 진행시 성공
ㅇ 추가한 노드에 nginx 서비스를 실행하기
- Chocolatey 란?
윈도우에서 사용가능한 리눅스의 yum이나 apt와 같은 명령어 기반의 패키지 관리자
> 우리가 설치하려는 nginx 는 실행파일, 즉 binrary 파일로 적용되기 때문에 이를 관리할 서비스가 필요함
- NSSM 이란?
바로 실행되는 바이너리 파일을 윈도우 서비스에 등록해 서비스 레벨로 관리를 도와주는 프로그램
- ansible-server의 nginx_install.sh 에 아래내용 추가
28 - name: Install nginx on Win
29 hosts: Win
30 gather_facts: no
31
32 tasks:
33 - name: Download nginx
34 win_get_url:
35 url: http://nginx.org/download/nginx-1.12.1.zip
36 dest: C:\tmp\nginx-1.12.1.zip
37 - name: Create directory
38 win_file:
39 path: C:\nginx
40 state: directory
41 - name: Unzip nginx
42 win_unzip:
43 src: C:\tmp\nginx-1.12.1.zip
44 dest: C:\nginx
45 - name: install NSSM
46 win_chocolatey:
47 name: nssm
48 - name: Download new index.html
49 win_get_url:
50 url: https://www.nginx.com
51 dest: C:\nginx\nginx-1.12.1\html\index.html
52 - name: Restart nginx service
53 win_nssm:
54 name: nginx
55 application: C:\nginx\nginx-1.12.1\nginx.exe
56 state: restarted
- 브라우저에서 win node의 아이피로 접속확인