본문으로 바로가기

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의 아이피로 접속확인