7.6

w0nyyy·2022년 7월 6일
0

ansible

우분투 내보내기

centos 가져오기

스냅샷 찍기

vagrant

다운로드받기

https://app.vagrantup.com/boxes/search?provider=virtualbox

vagrant를 위한 이미지 저장소 (box)

C:\Users\r2com>cd c:\HashiCorp
c:\HashiCorp>vagrant init

c:\HashiCorp>dir
 C 드라이브의 볼륨에는 이름이 없습니다.
 볼륨 일련 번호: EAF4-B115

 c:\HashiCorp 디렉터리

2022-07-06  오전 10:47    <DIR>          .
2022-07-06  오전 10:47    <DIR>          ..
2022-07-06  오전 10:40    <DIR>          Vagrant
2022-07-06  오전 10:47             3,080 Vagrantfile
               1개 파일               3,080 바이트
               3개 디렉터리  12,720,914,432 바이트 남음
               
c:\HashiCorp>notepad Vagrantfile

c:\HashiCorp>vagrant up

c:\HashiCorp>vagrant ssh
[vagrant@localhost ~]$

[vagrant@localhost ~]$ exit
logout
Connection to 127.0.0.1 closed.

c:\HashiCorp>vagrant destroy

vagrant는 virtualbox를 컨트롤하는 도구다.

오류

vagrant init을 했는데 안되었음

%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\
사용자 변수 - Path에 추가해주고 cmd 재실행

Ansible

인벤토리

--- 앤서블 마스터 설치 192.168.0.181
# yum install epel-release -y
# yum --enablerepo=epel -y install ansible
# ansible --version
앤서블 문서 사이트 https://docs.ansible.com/ansible/latest/index.html
앤서블 모듈 사이트 https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html
--- 앤서블의 애드혹 (AD-HOC(라틴어): 특별한 목적을 위해)
# vi /etc/ansible/hosts
[centos]
192.168.0.236
192.168.0.240

[ubuntu]
192.168.0.219
192.168.0.247
# ansible all -m ping
# ansible all -m ping -k	#ask passwd
# ansible centos -m ping -k	
# ansible ubuntu -m ping -k
# echo "192.168.0.140" >> inventory.list
# echo "192.168.0.143" >> inventory.list
# ansible all -i inventory.list -m ping -k
# ansible 192.168.0.140 -i inventory.list -m ping -k
# ansible all --list-hosts
# ansible all -m shell -a "uptime" -k
# ansible all -m shell -a "df -h" -k
# ansible all -m shell -a "free -h" -k
# ansible all -m user -a "name=kosa" -k
# ansible all -m shell -a "tail -n 1 /etc/passwd" -k
# ansible all -m user -a "name=kosa state=absent" -k
# ansible all -m shell -a "tail -n 1 /etc/passwd" -k

-m : module
ping 모든 대상 서버에 ping 모듈을 실행시킨다. ssh 접속여부와 파이썬이 실행되고 있는지 판단하는 모듈임. icmp 아님여~

[root@ansible-server ~]# cat /root/.ssh/known_hosts
192.168.0.236 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPk7oO4iSp5TWhR0lWVyks6Ir4TbRV9A0c91T5p1w5rtLVg0vl/yYVne8JGlvfPjhrIWs5TU9nHkg242oLg2N1A=
192.168.0.240 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPk7oO4iSp5TWhR0lWVyks6Ir4TbRV9A0c91T5p1w5rtLVg0vl/yYVne8JGlvfPjhrIWs5TU9nHkg242oLg2N1A=
192.168.0.219 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGnnMYvevGloenWMN0BmIkPuiNRgj1CRI8ot53x/odyYGgbxeKo/aIFyWOGlM6VZAQjfcIYBdLjS7I18AMGAHIw=
192.168.0.247 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGnnMYvevGloenWMN0BmIkPuiNRgj1CRI8ot53x/odyYGgbxeKo/aIFyWOGlM6VZAQjfcIYBdLjS7I18AMGAHIw=

known_host 에 등록확인해야함

# ansible all -m ping -k 을 통해 ssh 패스워드 넣어주면 로그인된다링

ping은 파이썬 상태를 보는 것임.

# echo "192.168.0.236" >> inventory.list
# echo "192.168.0.219" >> inventory.list	// 커스텀리스트
# ansible all -i inventory.list -m ping -k
--- 센토스 아파치 애드혹 관리
# ansible centos -m yum -a "name=httpd state=present" -k
# curl https://www.nginx.com/ -o index.html
# ansible centos -m copy -a "src=index.html dest=/var/www/html/index.html" -k
# ansible centos -m service -a "name=httpd state=started" -k
# ansible centos -m shell -a "systemctl status firewalld" -k
# ansible centos -m shell -a "systemctl start firewalld" -k
# ansible centos -m shell -a "firewall-cmd --permanent --zone=public --add-service=http" -k
# ansible centos -m shell -a "firewall-cmd --reload" -k
# ansible centos -m service -a "name=httpd state=stopped" -k
# ansible centos -m shell -a "systemctl stop firewalld" -k
# ansible centos -m yum -a "name=httpd state=absent" -k

우분투

--- 우분투 아파치 애드혹 관리
# ansible ubuntu -m apt -a "name=apache2 state=present" -k
# curl https://www.nginx.com/ -o index.html
# ansible ubuntu -m copy -a "src=index.html dest=/var/www/html/index.html" -k
# ansible ubuntu -m service -a "name=apache2 state=stopped" -k
# ansible ubuntu -m service -a "name=apache2 state=started" -k
# ansible ubuntu -m apt -a "name=apache2 state=absent" -k

멱등성

--- 멱등성
앤서블은 멱등성(Idempotency)이란 특징을 가집니다. 이는 여러 번 적용해도 결과가 바뀌지 않으며, 수정된 부분이 있다면 그 부분만 새롭게 반영되는 특징이 있습니다.

# echo "172.16.0.100" >> inventory.list
# cat inventory.list
# echo "172.16.0.100" >> inventory.list
# cat inventory.list
# ansible localhost -c local -m lineinfile -a "path=inventory.list line=172.16.0.200"
# cat inventory.list
# ansible localhost -c local -m lineinfile -a "path=inventory.list line=172.16.0.200"
# cat inventory.list

ssh 키 생성

--- ssh key 활용
# ssh-keygen -t rsa	// 키 생성
# ssh-copy-id root@192.168.0.140
# ssh-copy-id root@192.168.0.143

play book

--- 플레이북 구조
YAML 형식으로 작성된 각각의 Playbook들은 하나 이상의 Play를 가지며, 각각의 Play는 하나 이상의 task(앤서블 모듈)을 실행한다

  • name: Playbook Tutorial # - 로 시작하는 3줄이 한 블록이다.
    hosts: all # ":" 으로 구분해 항목명과 값을 설정한 키-값 형식으로 되어 있다.
    tasks: # 항목명의 위치가 정렬되어 있다. yaml은 들여쓰기가 데이터 구조의 깊이가 된다.
--- 센토스, 우분투 아파치 설치 플레이북
# vi apache_install.yml
- name: Install apache on centos
  hosts: centos
  gather_facts: no

  tasks:
    - name: install apache web server
      yum: name=httpd state=present
    - name: upload default index.html for web server
      get_url: url=https://www.nginx.com dest=/var/www/html/ mode=0644
    - name: start apache web server
      service: name=httpd state=started enalbed=yes

- name: Install apache on ubuntu
  hosts: ubuntu
  gather_facts: no

  tasks:
    - name: install apache web server
      apt: name=apache2 state=present
    - name: upload default index.html for web server
      get_url: url=https://www.nginx.com dest=/var/www/html/ mode=0644
    - name: start apache web server
      service: name=apache2 state=started enalbed=yes

# ansible-playbook apache_install.yml -k
--- 센토스, 우분투 아파치 삭제 플레이북
# vi apache_remove.yml
- name: Remove apache on centos
  hosts: centos
  gather_facts: no

  tasks:
    - name: remove apache web server
      yum: name=httpd state=absent

- name: Remove apache on ubuntu
  hosts: ubuntu
  gather_facts: no

  tasks:
    - name: remove apache web server
      apt: name=apache2 state=absent

# ansible-playbook apache_remove.yml -k

0개의 댓글