[응용] 다양한 환경을 앤서블(Ansible)로 관리하기 with 베이그런트(Vagrant) - 인프런 | 강의 (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 서버가 정상적으로 구축된 것을 확인한다.
'Ansible' 카테고리의 다른 글
Vagrant와 Ansible로 윈도우 노드 구성 및 관리 (1) | 2021.07.18 |
---|---|
기존 구성에 Window Server node 추가 및 서버 구성 (0) | 2021.07.17 |
Vagrant로 구성한 CentOS 관리하기 (0) | 2021.07.15 |
Vagrant를 활용하여 Ansible 서버와 노드 구성하기 (0) | 2021.07.14 |
Vagrant를 활용하여 Ansible server 추가 설정 프로비저닝 (0) | 2021.07.13 |