Vagrant & Ansible (실습 - Ansible 환경 구성) - 9.20

양승현·2022년 9월 20일
0

Ansible

목록 보기
1/4

Cloud

  • 구성
    • provison 툴 (환경 배포)
      • vagrant ----> terraform
        • hypervisor
          • vitualBox
          • kvm
          • VMware
      • Heat -----> nova,뉴트론,신더를 이용해 pod 배포
      • cloudformation ----> ec2를 이용해 pod 배포
  • 관리
    • ansible
      • ansible은 프로비저닝의 기능은 없다.

Ansible

  • IaC(Infrastructure as Code)
  • 장점
    • 노동 시간 감소
    • 효율화에 의한 비용절감 효과
    • 코드화에 의해 고도의 품질 보증
    • 이를 통해, 사람이 직접 작업했을 때와 비교해 보면 더욱 정확한 검증이 시행될 수 있고 높은 수준의 릴리즈 품질을 보증할 수 있다.

Ansible 구성

  • ansible은 다음과 같은 요소를 통해 서비스를 구현할 수 있다.
  • ansible 본체
    • ansible software 그 자체. ansible은 서버/클라이언트 구성과 같은 형태를 취하지 않고 상주 프로세스를 둘 필요가 없다.
  • 인벤토리
    • 관리 대상이 되는 서버 접속 정보를 표시하는 정의이다.
    • 인벤토리는 여러 개의 서버를 그룹화하여 정의하거나 각각의 서버와 그룹에 대한 변수를 사용한 파라미터를 설정할 수 있다.
    • 기본적으로는 /etc/ansible/hosts를 이용하지만 상세한 관리를 위해서는 별도로 구분하여 파일로 작성한다.
      • 예) seoul.lst, busan.lst, websvc.lst
  • 모듈
    • 패키지 설치, 사용자 관리, 파일 및 디렉토리 관리 등을 명령어로 전달하는 것이 아니라 모듈을 통해 관리한다.
      • 예) yum -y install httpd -> yum 모듈을 불러온다. -m yum
    • avsible에서 실행된 하나 하나의 명령과 같은 것으로 다음과 같은 작업을 간단히 수행할 수 있다.
      • OS 내의 작업(패키지 설치와 서비스, 사용자 관리 등)
      • 파일 작업(복사와 편집, 템플릿 열기)
      • DB 작업(MYsql, Postgresql의 사용자와 테이블 관리)
      • 클라우드 서비스 작업(aws, azure, gcp, openstack 등)
      • 네트워크 장비 작업
  • 플레이북
    • 도커 컨테이너 생성시 docker container run을 이용하면 불편함이 많아 이를 compose 나 stack을 이용했던 것처럼 파일 형태로 관리를 위한 내역을 작성하고 이를 실행한다.
    • 결국 ansible을 이용하여 노드를 관리 할 때에는 playbook을 작성하는 것이 대부분 할일이다.
    • 모듈이 앤서블에서 명령이라고 하면 플레이북은 스크립트(코드)이며 앤서블을 사용할 때 필요한 작업은 플레이북의 구현과 실행이라고 할 수 있다.
    • 플레이북은 프로그래밍 대신 yaml을 사용한다.

Vagrant

  • vagrantfile은 베이그런트 프로비저닝을 위한 정보를 담고 있는 메인 파일이다.
  • 명령 프롬프트를 실행하고 vagrantfile 이 있는 경로에서 vagrant up 명령을 입력하면 현재 호스트 내부에 vagrantfile에 정의된 가상 머신들을 생성하고 생성한 가상 머신에 쿠버네티스 클러스트를 구성하기 위한 파일들을 호출해 쿠버네티스 클러스터를 자동으로 구성한다.
  • do ~ end 까지가 하나의 작업이다
  • do | config | 로 시작하면 config의 작업을 하게 된다.

Ansible 실습 (Vagrant + kvm)

0. 환경설정

  • IOS - centos7
  • disk size 160GB
  • meomory 12GB
  • processor 4
  • network - NAT(vmnet10)
  • software selection
    • Minimal install
  • 수동 파티셔닝
  - swap     - 8GB (8192)
  - /boot    - 1GB (1024)
  - /ansible - 120GB
  - /        - 나머지
  • network
    • General
  • IPv4 settings
  • Configuration
    • user

1. 설치 후 해야할 일

1.1 업데이트

  • yum 업데이트
yum update -y

1.2 vim, curl, git, wget, net-tools 설치한 후 root 사용자가 로그인하여 vi를 입력하면 자동으로 vim 실행

  • vim, curl, git, wget, net-tools 설치
yum install -y vim curl git wget net-tools
  • vi를 입력하면 자동으로 vim 실행
vim ~/.bashrc

alias vi='vim'
  • 적용하기
source ~/.bashrc

1.3 ip 주소를 211.183.3.99로 변경

  • 1.3과 1.7 동시 진행
  • bridge
vi /etc/sysconfig/network-scripts/ifcfg-br0

TYPE=Bridge
BOOTPROTO=none
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=211.183.3.99
PREFIX=24
GATEWAY=211.183.3.2
DNS1=8.8.8.8
  • br0
vi /etc/sysconfig/network-scripts/ifcfg-ens32

TYPE=Ethernet
BOOTPROTO=none
NAME=ens32
DEVICE=ens32
ONBOOT=yes
BRIDGE=br0
  • ifcfg-br0 적용
ifup ifcfg-br0
  • 네트워크 재시작
systemctl restart network
  • ip 변경 확인
ifconfig

만약 네트워크 설정이 안되었다면

  • ifconfig 했는데 ens32 또는 br0 가 안보이는 경우는 다음과 같이 한다.
  • ens32 를 br0 의 Port 로 설정
    systemctl start NetworkManager
    systemctl restart network
    systemctl stop NetworkManager
    ifconfig
  • 확인하기
    systemctl start NetworkManager
    nmcli net on

1.4 방화벽 해제, selinux 해제, 리눅스 내에서 발생하는 트래픽이 리눅스를 거쳐 외부로 빠져 나갈때(forwarding) 이를 허용한다.

  • 방화벽 서비스 해제
systemctl stop firewalld
  • 재부팅시 방화벽 실행하지 않기
systemctl disable firewalld
  • selinux 상태확인
getenforce
# Enforcing -> 활성화 상태
  • selinux 종료 (방법 1)
vi /etc/sysconfig/selinux

7 SELINUX=disabled
  • selinux 종료 (방법 2)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  • 재부팅 후 상태 확인
getenforce
# Disabled -> 종료 상태

1.5 NetworkManager 비활성화

  • 서비스 비활성화
systemctl disable NetworkManager

1.6 yum을 이용하여 커널 업데이트하고 초기 부팅시 업데이트 된 커널로 시작하기

  • 커널 버전 확인
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  • 커널5 버전 최신 업데이트 진행
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

yum --enablerepo=elrepo-kernel install -y kernel-ml

1.7 linux bridge를 이용하여 ens32를 L2 포트로 전환 이때 linux bridge의 이름은 br0를 사용한다.

결과 : ifconfig
  br0 : 
      211.183.3.99
  ens32 :
      ip 없음

1.8 KVM과 kimchi(wokd) 설치하기

yum install -y libvirt qemu-kvm virt-install virt-manager
systemctl --now enable libvirtd
  • kimchi wokd 설치
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install https://github.com/kimchi-project/kimchi/releases/download/2.5.0/wok-2.5.0-0.el7.centos.noarch.rpm
yum install https://github.com/kimchi-project/kimchi/releases/download/2.5.0/kimchi-2.5.0-0.el7.centos.noarch.rpm
systemctl enable wokd
systemctl start wokd
vi /etc/libvirt/qemu.conf # 442, 446 줄 주석 해제
systemctl daemon-reload
systemctl restart wokd
systemctl restart libvirtd
systemctl enable libvirtd

1.9. virsh pool-list

virsh pool-list
 Name                 State      Autostart
-------------------------------------------
 default              active     yes
 ISO                  active     yes
  • 이미지 볼륨의 기본 경로 확인 가능
virsh pool-dumpxml default 
  • 해당 경로를 /ansible 로 바꾸자
  • 아래의 파일을 연다
virsh pool-edit default 로 파일 연 다음 
     10     <path>/var/lib/libvirt/images</path>
              <path>/ansible</path>
  • 변경한 뒤
virsh pool-destroy default ; virsh pool-start default ; virsh pool-autostart default

1.10 김치의 세션 타임아웃을 10분에서 600분으로 늘리기

vi /etc/wok/wok.conf

17 session_timeout = 600
  • 저장 후 빠져나와서 wokd 재시작
systemctl restart wokd

2. 이미지 준비하기

2.1 CentOS01.qcow2 파일 다운로드

cd /ansible # ansible 디렉토리에서 작업
wget https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-1905.qcow2.xz

2.2 이미지 복사

  • 이미지 4개 생성
cp centos01.qcow2 centos02.qcow2
cp centos01.qcow2 centos03.qcow2
cp centos01.qcow2 centos04.qcow2

Terraform

  • 프로비저닝 + 오케스트레이션

0개의 댓글