Ansible

기존 구성에 Ubuntu node 추가 및 서버 구성

Joon0464 2021. 7. 16. 17:14

[응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant) - 인프런 | 강의 (inflearn.com)

 

[응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant) - 인프런 | 강의

센트OS 이외에 얼마나 다양한 시스템에 엔서블이 사용될 수 있는지 배워봅시다. 앤서블을 리눅스 이외에 윈도우 및 네트워크 시스템과 같은 여러가지 시스템에 대해서 다양한 목적으로 사용하

www.inflearn.com

1. Vagrantfile에 ubuntu node 추가

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  #Ansible-Node01
  config.vm.define:"ansible-node01" do |cfg|
     cfg.vm.box = "centos/7"
	 cfg.vm.provider:virtualbox do |vb|
	   vb.name="Ansible-Node01"
	   vb.customize ["modifyvm", :id, "--cpus",1]
	   vb.customize ["modifyvm", :id, "--memory",1024]
	 end
	 cfg.vm.host_name="ansible-node01"
	 cfg.vm.synced_folder ".", "/vagrant", disabled: true
	 cfg.vm.network "public_network", ip: "192.168.1.11"
	 cfg.vm.network "forwarded_port", guest: 22, host: 19211, auto_correct: false, id: "ssh"
	 cfg.vm.provision "shell", path: "bash_ssh_conf_4_CentOS.sh"
  end
  
  #Ansible-Node02	 
  config.vm.define:"ansible-node02" do |cfg|
     cfg.vm.box = "centos/7"
	 cfg.vm.provider:virtualbox do |vb|
	   vb.name="Ansible-Node02"
	   vb.customize ["modifyvm", :id, "--cpus",1]
	   vb.customize ["modifyvm", :id, "--memory",1024]
	 end
	 cfg.vm.host_name="ansible-node02"
	 cfg.vm.synced_folder ".", "/vagrant", disabled: true
	 cfg.vm.network "public_network", ip: "192.168.1.12"
	 cfg.vm.network "forwarded_port", guest: 22, host: 19212, auto_correct: false, id: "ssh"
	 cfg.vm.provision "shell", path: "bash_ssh_conf_4_CentOS.sh"
  end

  #Ansible-Node03	 
  config.vm.define:"ansible-node03" do |cfg|
     cfg.vm.box = "ubuntu/trusty64"
	 cfg.vm.provider:virtualbox do |vb|
	   vb.name="Ansible-Node03"
	   vb.customize ["modifyvm", :id, "--cpus",1]
	   vb.customize ["modifyvm", :id, "--memory",1024]
	 end
	 cfg.vm.host_name="ansible-node03"
	 cfg.vm.synced_folder ".", "/vagrant", disabled: true
	 cfg.vm.network "public_network", ip: "192.168.1.13"
	 cfg.vm.network "forwarded_port", guest: 22, host: 19213, auto_correct: false, id: "ssh"
  end  
  
  #Ansible-Node04	 
  config.vm.define:"ansible-node04" do |cfg|
     cfg.vm.box = "ubuntu/trusty64"
	 cfg.vm.provider:virtualbox do |vb|
	   vb.name="Ansible-Node04"
	   vb.customize ["modifyvm", :id, "--cpus",1]
	   vb.customize ["modifyvm", :id, "--memory",1024]
	 end
	 cfg.vm.host_name="ansible-node04"
	 cfg.vm.synced_folder ".", "/vagrant", disabled: true
	 cfg.vm.network "public_network", ip: "192.168.1.14"
	 cfg.vm.network "forwarded_port", guest: 22, host: 19214, auto_correct: false, id: "ssh"
  end
  
  #Ansible-Server
  config.vm.define:"ansible-server" do |cfg|
     cfg.vm.box = "centos/7"
	 cfg.vm.provider:virtualbox do |vb|
	   vb.name="Ansible-Server"
	 end
	 cfg.vm.host_name="ansible-server"
	 cfg.vm.synced_folder ".", "/vagrant", disabled: true
	 cfg.vm.network "public_network", ip: "192.168.1.10"
	 cfg.vm.network "forwarded_port", guest: 22, host: 19210, auto_correct: false, id: "ssh"
	 cfg.vm.provision "shell", path: "bootstrap.sh"
	 cfg.vm.provision "file", source: "Ansible_env_ready.yml", destination: "Ansible_env_ready.yml"
	 cfg.vm.provision "shell", inline: "ansible-playbook Ansible_env_ready.yml"
	 cfg.vm.provision "shell", path: "add_ssh_auth.sh", privileged: false
	 cfg.vm.provision "file", source: "Ansible_ssh_conf_4_CentOS.yml", destination: "Ansible_ssh_conf_4_CentOS.yml"
	 cfg.vm.provision "shell", inline: "ansible-playbook Ansible_ssh_conf_4_CentOS.yml"
  end
  
end

기존 node1의 양식을 복사하여 node3과 node4를 추가한다.

node3과 node4의 이름을 각각에 맞게 수정하고 IP 주소 및 포트 번호를 수정한다.

node3과 node4의 이미지로 "ubuntu/trusty64"를 넣어준다.

ubuntu는 sshd config 파일을 수정하지 않아도 ssh 키 교환에 문제가 없으므로 bash_ssh_conf_4_CentOS.sh 파일을 실행하는 부분을 삭제한다.

2. Ansible_env_ready.yml 파일 수정

---
- name: Setup for the Ansible's Enviroment
  hosts: localhost
  gather_facts: no
  
  tasks:
    - name: Add "/etc/hosts"
      blockinfile: |
        dest=/etc/hosts
        content="
          192.168.1.10 server
          192.168.1.11 node01
          192.168.1.12 node02
          192.168.1.13 node03
          192.168.1.14 node04"
      
    - name: Add "/etc/ansible/hosts"
      blockinfile: |
        dest=/etc/ansible/hosts
        content="
          [CentOS]
           node01
           node02
           
          [Ubuntu]
           node03
           node04"
    
    - name: Install sshpass for Authentication
      yum:
        name: sshpass
        state: present
    
    - name: Install vim-enhanced
      yum:
        name: vim-enhanced
        state: present
        
    - name: Install git
      yum: 
        name: git
        state: present
        
    - name: Download pathogen.vim
      shell: "curl -fLo /home/vagrant/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim"
      
    - name: Git clone vim-ansible-yaml
      git:
        repo: 'https://github.com/chase/vim-ansible-yaml.git'
        dest: /home/vagrant/.vim/bundle/vim-ansible-yaml
        
    - name: Configure vimrc
      lineinfile: 
        dest: /home/vagrant/.vimrc
        line: "{{ item }}"
      with_items:
        - "set number"
        - "execute pathogen#infect()"
        - "syntax on"

    - name: Configure Bashrc
      lineinfile:   
        dest: /home/vagrant/.bashrc
        line: "{{ item }}"
      with_items:
        - "alias vi='vim'"
        - "alias ans='ansible'"
        - "alias anp='ansible-playbook'"

Ansible-Server의 /etc/hosts 파일에 node03, node04가 등록되도록 수정한다.

Ansible-Server의 /etc/ansible/hosts 파일에 Ubuntu로 node03과 node04를 묶도록 내용을 추가한다.

이외의 모든 부분은 기존과 동일하다.

 

3. add_ssh_auth.sh 파일 수정

#! /usr/bin/env bash

# ssh key 생성
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node01
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node02
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node03
sshpass -p vagrant ssh -T -o StrictHostKeyChecking=no vagrant@node04

node03과 node04와 ssh 키 교환을 하도록 내용을 추가한다.

 

4. node03, node04, ansible-server 프로비저닝

C:\HashiCorp>vagrant up

node03과 node04가 프로비저닝 되도록 vagrant up을 진행한다.

C:\HashiCorp>vagrant provision ansible-server

node03과 node04가 프로비저닝이 완료되면 ansible-server를 다시 프로비저닝하여 ssh 키 교환 및 /etc/hosts와 /etc/ansible/hosts 파일에 node03, node04의 정보가 입력되도록 한다.

 

5. node03, node04 timezone 수정

C:\HashiCorp>vagrant ssh ansible-server
# vi timezone.yml

---
- name: Setup linux timezone
  hosts: CentOS:Ubuntu
  gather_facts: no
  become: yes

  tasks:
    - name: set timezone to Asia/Seoul
      timezone:
        name: Asia/Seoul

기존에 작성한 timezone.yml을 수정하여 hosts 부분에 Ubuntu를 다음과 같이 추가한다.

anp timezone.yml -k로 timezone.yml 플레이북을 실행한다.

ansible 명령어를 사용하여 shell 모듈로 모든 노드들에게 date 명령어를 실행하여 현재 시간이 KST 기준으로 바뀌었는지 확인한다.

6. nfs 구성

---
- name: Setup for nfs server
  hosts: localhost
  gather_facts: no

  tasks:
    - name: make nfs_shared directory
      file:
        path: /home/vagrant/nfs_shared
        state: directory
        mode: 0777

    - name: configure /etc/exports
      become: yes
      lineinfile:
        path: /etc/exports
        line: /home/vagrant/nfs_shared 192.168.1.0/24(rw,sync)

    - name : nfs service restart
      become: yes
      service :
        name : nfs
        state : restarted

- name: Setup for nfs clients
  hosts: CentOS:Ubuntu
  gather_facts: no

  tasks:
    - name: make nfs_client directory
      file:
        path: /home/vagrant/nfs
        state: directory

    - name: mount point direcotry as client
      become: yes
      mount:
        name: /home/vagrant/nfs
        src: 192.168.1.10:/home/vagrant/nfs_shared
        fstype: nfs
        opts: nfsvers=3
        state: mounted

이전에 사용한 nfs.yml 파일을 수정한다.

수정할 부분은 Setup for nfs client 부분의 hosts에 ubuntu를 추가하면 된다.

nfs.yml 플레이북을 실행하여 nfs를 구성한다.

테스트를 위해 node03으로 ssh 접속하여 nfs 디렉토리에 접근하여 HOSTNAME으로 파일을 한 개 생성한다.

node04에 ssh 접속하여 nfs 디렉토리를 확인하면 node03에서 생성한 파일이 존재하는 것을 볼 수 있다.

 

6. nginx 서버 구성

---
- name: install nginx on CentOS
  hosts: CentOS
  gather_facts: no
  become: yes

  tasks:
    - name: install epel-release
      yum:
        name: epel-release
        state: latest
    - name: install nginx
      yum:
        name: nginx
        state: present
    - name: upload default index.html for web server
      get_url:
        url: https://www.nginx.com
        dest: /usr/share/nginx/html/
        mode: 0644
    - name: Start nginx web server
      service:
        name: nginx
        state: started
        
- name: install nginx on Ubuntu
  hosts: Ubuntu
  gather_facts: no
  become: yes

  tasks:
    - name: install nginx
      apt:
        pkg: nginx
        state: present
        update_cache: yes
    - name: upload default index.html for web server
      get_url:
        url: https://www.apache.org
        dest: /usr/share/nginx/html/
        mode: 0644
        validate_certs: no

기존 nginx_install.yml파일의 centos의 nginx 설치 playbook 코드를 복사하여 아래에 붙여넣는다.

우분투의 경우 epel-release를 설치하지 않아도 nginx 설치가 가능하기 때문에 해당 부분을 지워준다.

ubuntu는 패키지 관리로 yum 대신 apt를 사용하기 때문에 모듈을 yum에서 apt로 변경하여 작성한다.

update_cache는 캐시 정보를 업데이트하고 받아오기 위해 설정한다.

우분투의 경우 페이지를 다운 받을 때 인증 체크를 진행하기 때문에 해당 부분을 자체 인증으로 다운로드 가능하게 설정하기 위해서 validate_certs를 no로 설정한다.

nginx_install.yml 플레이북을 실행하여 nginx를 4개의 노드에 구성한다.

새로 구성한 node03, node04의 nginx 서버가 정상적으로 구축된 것을 확인한다.