【Ansible 튜토리얼】 기초의 기초의 기초의 기초편

9357 단어 Ansible튜토리얼

소개



이것은 어디까지나 개인 메모입니다.

Ansible을 만질 기회가 있었기 때문에
막힌 곳 등을 해소하면서 메모 정도에 튜토리얼로서 남기고 싶은 Qiita를 이용했습니다.

전제 조건


  • Vagrant가 설치되었습니다
  • VirtualBox가 설치되어 있습니다

  • vagrant Box 받기



    centos6.7이되고 있습니다만 이것은 임의로 이름을 붙일 수가 있기 때문에
    centos-6.7 등의 경우도 있습니다.

    box list 확인



    hostPC(mac)
    $ vagrant box list
    
    centos6.7 (virtualbox, 0)
    

    box를 다운로드한다(※centos6.7이 있으면 스킵)



    hostPC(mac)
    $ vagrant box add centos6.7 https://github.com/CommanderK5/packer-centos-template/releases/download/0.6.7/vagrant-centos-6.7.box
    

    작업 디렉토리 만들기 vagrant 파일 편집



    작업 디렉토리 작성 및 이동



    hostPC(mac)
    $ mkdir ~/ansible
    $ cd ~/ansible
    

    Vagrantfile 만들기



    hostPC(mac)
    # centos6.7の部分はvagrantのbox名
    $ vagrant init centos6.7
    $ vi Vagrantfile
    

    자신은 완전히 지우고 다음을 기입했습니다.

    Vagrantfile
    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    Vagrant.configure("2") do |config|
      config.ssh.insert_key = false
    
      config.vm.define "webserver1" do |webserver1|
        webserver1.vm.hostname = "webserver1"
        webserver1.vm.box = "centos6.7"
        webserver1.vm.network "private_network", ip: "192.168.33.21"
      end
    
      config.vm.define "webserver2" do |webserver2|
        webserver2.vm.hostname = "webserver2"
        webserver2.vm.box = "centos6.7"
        webserver2.vm.network "private_network", ip: "192.168.33.22"
      end
    
    end
    

    vagrant 시작



    hostPC(mac)
    $ vagrant up
    

    상세 확인



    hostPC(mac)
    $ vagrant ssh-config
    
    Host webserver1
      HostName 127.0.0.1
      User vagrant
      Port 2200
      UserKnownHostsFile /dev/null
      StrictHostKeyChecking no
      PasswordAuthentication no
      IdentityFile /Users/{User名}/.vagrant.d/insecure_private_key
      IdentitiesOnly yes
      LogLevel FATAL
    
    Host webserver2
      HostName 127.0.0.1
      User vagrant
      Port 2201
      UserKnownHostsFile /dev/null
      StrictHostKeyChecking no
      PasswordAuthentication no
      IdentityFile /Users/{User名}/.vagrant.d/insecure_private_key
      IdentitiesOnly yes
      LogLevel FATAL
    

    이번에는
    webserver1을 ansible의 적용 대상으로
    webserver2를 ansible 환경으로 운영합시다.

    이때 나는 실패했다고 생각했다.
    ansible이라는 이름과
    target으로 나누면 좋았다고. . . orz

    ansible 설치



    hostPC(mac)
    $ vagrant ssh webserver2
    

    (ssh) webserver2
    [vagrant@webserver2 ~]$ sudo yum -y install ansible
    

    ssh-key 설정 관계



    ansible 환경에서 대상 환경으로 ssh로 연결할 수 있도록
    ssh 키를 webserver2=>webserver1로 보냅니다.

    ssh-key 생성 및 복사



    (ssh) webserver2
    [vagrant@webserver2 ~]$ ssh-keygen -t rsa
    [vagrant@webserver2 ~]$ ssh-copy-id [email protected]
    # 色々聞かれますがenter連打でokです
    # 最後にpasswordを聞かれますが、vagrantが初期パスワードになっています
    

    ssh 연결 확인



    (ssh) webserver2
    [vagrant@webserver2 ~]$ ssh [email protected]
    [vagrant@webserver1 ~]$
    
    # 2から1にノンパスで行けるようになったので成功です
    

    인벤토리 작성



    인벤토리는 대상 서버 목록과 같습니다.

    일반적으로 hosts라는 이름으로 사용되는 것 같습니다.

    인벤토리 작성



    hostPC(mac)
    $ vi ~/ansible/hosts
    

    ~/ansible/hosts
    [webserver]
    192.168.33.21
    

    기분 전환에 소통 확인을 해 본다



    (ssh) webserver2
    [vagrant@webserver2 ~]$ cd /vagrant/
    [vagrant@webserver2 vagrant]$ ansible all -i hosts -m ping
    
    192.168.33.21 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    

    (여기서 본편) Playbook 만들기



    playbook을 이용해 target인 webserver1에 nginx를 인스톨 시킵니다

    또한 playbook에는 크게 나누어 3개의 정의가 필요하게 된다고 합니다

  • target
  • 어디에 · 누가 실행하는지


  • vars
  • 변수 지정 (task에서 사용)


  • task
  • 무슨 일을 하는지 모듈을 사용하여 기술한다


  • 이상을 바탕으로 playbook을 만듭니다.

    playbook 작성



    hostPC(mac)
    $ vi ~/ansible/nginx.yml
    

    ~/ansible/nginx.yml
    - hosts: webserver
      become: True
      tasks:
      - name: install nginx repo
        yum: name=http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm state=present
      - name: install nginx
        yum: name=nginx
      - name: restart nginx
        service: name=nginx state=restarted
    

    각각의 의미


  • hosts:
  • host 지정. 이번에는 그룹을 지정하고 있다.

  • become:
  • sudo로 실행

  • tasks:
  • 실행할 태스크. 여기에 설명 된 순서대로 실행됩니다

  • name:
  • 작업 이름

  • yum:
  • yum 모듈 사용

  • service:
  • 서비스 모듈 사용


  • ※Ansible에서는 정해진 디렉토리 등으로부터 정보를 암묵적으로 취득하기 위해, 의존관계를 이해해 둘 필요가 있다.

    ansible 실행



    적용 실행



    (ssh) webserver2
    [vagrant@webserver2 vagrant]$ ansible-playbook -i hosts nginx.yml
    



    다시 실행해 보세요.



    (ssh) webserver2
    [vagrant@webserver2 vagrant]$ ansible-playbook -i hosts nginx.yml
    

    nginx는 이미 install되어 있기 때문에 ok입니다.
    그러나 restart 작업은 여러 번 할 수 있기 때문에
    changed=1이 되어 있는 것을 알 수 있습니다.



    표시해보기





    마지막으로



    설치물 등을 모두 코드베이스로 남길 수 있는 것은 편리하네요.
    뭔가 변경되었을 때 github 등에서 차이 등을 확인할 수 있습니다.
    무엇보다 눈에 보이는 형태로 남길 수있는 것은 매우 좋습니다!

    공유도 간단하고 설치에 실수 등도 일어나지 않기 때문에 멋집니다!

    참고자료 : Vagrant에서 Ansible 초보 핸즈온
      : 【튜토리얼】Ansible 기본 키 (설치에서 복수 서버로 변경 적용)
      : Ansible Documentation

    좋은 웹페이지 즐겨찾기