728x90

Ubuntu에서 테라폼 최신 버전 설치


테라폼 최신 버전 설치

테라폼 버전 확인

vagrant@devops-box:~$ terraform version

 

아래 링크로 접속

https://www.terraform.io/downloads

 

Downloads | Terraform by HashiCorp

Terraform is an open-source infrastructure as code software tool that enables you to safely and predictably create, change, and improve infrastructure.

www.terraform.io

 

 

바이너리 파일 다운로드 후 /usr/local/bin 디렉토리로 옮겨 terraform 최신 버전 적용

curl -sO https://releases.hashicorp.com/terraform/1.2.2/terraform_1.2.2_linux_amd64.zip
unzip terraform_1.2.2_linux_amd64.zip
sudo mv terraform /usr/local/bin

 

최신 버전 적용 확인

 

728x90

'Terraform' 카테고리의 다른 글

220603_1_테라폼 설치-Windows OS, Vagrant  (0) 2022.06.03
728x90

if 조건문


if 조건문

- 기존의 when 조건문에 비해 코드가 간결하고, 확장성이 뛰어남

- 하나의 태스크로 수행이 가능하여 보다 효율적임

- skipping 태스크를 없앨 수 있음 (효율적인 태스크 실행)

 

 

if 조건문을 이용한 태스크 실행

1) CentOS.yml

- name: install epel-release
  action: "{{ ansible_pkg_mgr }} name=epel-release state=latest"
- name: install nginx web server
  action: "{{ ansible_pkg_mgr }} 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

 

2) Ubuntu.yml

- name: install nginx web server
  action: "{{ ansible_pkg_mgr }} name=nginx state=present update_cache=yes"
- name: upload default index.html for web server
  get_url: url=https://www.apache.com dest=/usr/share/nginx/html/ 
           mode=0644 validate_certs=no

 

3) nginx_install_w_if.yml

---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes
  vars:
    lnx_name: "{{ 'CentOS' if ansible_distribution == 'CentOS'
                   else 'Ubuntu' if ansible_distribution == 'Ubuntu'
                   else 'Just Linux' }}"

  tasks:
    - name: nginx for any linux
      include_tasks: "{{ lnx_name }}.yml"

 

4) 실행

skipping 태스크를 확인할 수 없음 > 태스크의 낭비를 줄임

[vagrant@ansible-server install]$ anp nginx_install_w_if.yml

 

 

728x90
728x90

운영체제를 구분하여 한 번에 설치


include_tasks란?

- 각 리눅스에 필요한 태스크를 정의한 yml 파일을 호출하여 실행

- 구조적인 태스크 관리가 가능함

 

include_tasks를 사용하는 이유

- 불필요하게 실행되는 태스크들을 관리하기 위해서

 => when을 사용하여 자동으로 노드의 종류를 구분하여 설치하는 경우 CentOS 태스크에서는 우분투의 태스크가 불필요하게 실행되고, Ubuntu 태스크에서는 CentOS의 태스크가 불필요하게 실행되므로 include_tasks를 이용

 

include_tasks를 사용하지 않고 웹 서버 설치 (nginx, apache)

CentOS 태스크가 실행될 때 > Ubuntu 노드들에 불필요한 태스크가 실행되는 것을 확인할 수 있음

 

 

Ubuntu 태스크가 실행될 때 > CentOS 노드들에 불필요한 태스크가 실행되는 것을 확인할 수 있음

 

 

include_tasks를 사용하여 웹 서버 설치 (nginx, apache)

1) CentOS.yml

- name: install epel-release
  action: "{{ ansible_pkg_mgr }} name=epel-release state=latest"
- name: install nginx web server
  action: "{{ ansible_pkg_mgr }} 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

 

2) Ubuntu.yml

- name: install nginx web server
  action: "{{ ansible_pkg_mgr }} name=nginx state=present update_cache=yes"
- name: upload default index.html for web server
  get_url: url=https://www.apache.com dest=/usr/share/nginx/html/ 
           mode=0644 validate_certs=no

 

3) nginx_install_w_include_tasks.yml

---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes

  tasks:
    - name: nginx for CentOS
      include_tasks: CentOS.yml
      when: ansible_distribution == 'CentOS'
    
    - name: nginx for Ubuntu
      include_tasks: Ubuntu.yml
      when: ansible_distribution == 'Ubuntu'

 

4) 설치

[vagrant@ansible-server install]$ anp nginx_install_w_include_tasks.yml

 

CentOS 태스크가 실행될 때 > include를 사용하여 작성한 CentOS.yml 파일을 호출함 > CentOS 노드들에서만 태스크가 실행 됨

 

 

Ubuntu 태스크가 실행될 때 > include를 사용하여 작성한 Ubuntu.yml 파일을 호출함 > Ubuntu 노드들에서만 태스크가 실행 됨

 

 

웹 브라우저에서 확인

CentOS 노드로 접속 172.30.1.101

 

 

Ubuntu 노드로 접속 172.30.1.201

 

 

설치한 웹 서버 삭제

1) CentOS_remove.yml

- name: remove epel-release
  action: "{{ ansible_pkg_mgr }} name=epel-release state=absent"
- name: remove nginx web server
  action: "{{ ansible_pkg_mgr }} name=nginx state=absent"

 

2) Ubuntu_remove.yml

  1 - name: remove nginx web server
  2   action: "{{ ansible_pkg_mgr }} name=nginx state=absent autoremove=yes"

 

3) nginx_remove_w_include_tasks.yml

  1 ---
  2 - name: Remove nginx on the nodes
  3   hosts: nodes
  4   become: yes
  5
  6   tasks:
  7     - name: nginx for CentOS
  8       include_tasks: CentOS_remove.yml
  9       when: ansible_distribution == 'CentOS'
 10
 11     - name: nginx for Ubuntu
 12       include_tasks: Ubuntu_remove.yml
 13       when: ansible_distribution == 'Ubuntu'
 14
~

 

4) 삭제

[vagrant@ansible-server remove]$ anp nginx_remove_w_include_tasks.yml

728x90
728x90

when 조건을 사용한 nginx 설치


when 조건 사용

- when 조건을 사용하면, 코드가 스스로 앤서블 노드의 운영체제를 파악하고 조건에 맞는 패키지 관리자를 호출하여 nginx를 설치함

- facts에서 제공하는 ansible_pkg_mgransible_distribution 인자 값을 사용하여 운영체제 정보 확인

 

 

 

1. nginx_install_w_when.yml 파일 실행

CentOS는 CentOS에 해당하는 태스크를 수행하고, 우분투는 우분투에 해당하는 태스크를 수행하는 것을 확인할 수 있음

---
- name: Install nginx on the nodes
  hosts: nodes
  become: yes

  tasks:  
    - name: install epel-release for CentOS
      action: "{{ ansible_pkg_mgr }} name=epel-release state=latest"
      when: ansible_distribution == 'CentOS'
	  
    - name: install nginx web server for CentOS
      action: "{{ ansible_pkg_mgr }} name=nginx state=present"
      when: ansible_distribution == 'CentOS'

    - name: upload default index.html for web server
      get_url: url=https://www.nginx.com dest=/usr/share/nginx/html/ mode=0644
      when: ansible_distribution == 'CentOS'
	  
    - name: start nginx web server
      service: name=nginx state=started
      when: ansible_distribution == 'CentOS'
	  
    - name: install nginx web server for Ubuntu
      action: "{{ ansible_pkg_mgr }} name=nginx state=present update_cache=yes"
      when: ansible_distribution == 'Ubuntu'

    - name: upload default index.html for web server
      get_url: url=https://www.nginx.com dest=/usr/share/nginx/html/ 
               mode=0644 validate_certs=no
      when: ansible_distribution == 'Ubuntu'

 

2. 주의: 우분투 버전 및 nginx.com의 설정에 따라 에러가 발생할 수 있음

  => get_url의 url=https://www.nginx.com을 url=http://www.apache.com으로 변경

 

 

3. url 수정 부분

 27     - name: upload default index.html for web server
 28       get_url: url=https://www.apache.com dest=/usr/share/nginx/html/
 29                mode=0644 validate_certs=no
 30       when: ansible_distribution == 'Ubuntu'

 

4. 정상 실행 확인

 

CentOS가 설치된 노드

 

Ubuntu가 설치된 노드

 

5. 설치한 nginx 삭제

nginx_remove_w_when.yml 파일 실행

[vagrant@ansible-server ~]$ anp nginx_remove_w_when.yml
---
- name: Remove nginx on the nodes
  hosts: nodes
  become: yes

  tasks:
    - name: remove epel-release for CentOS
      action: "{{ ansible_pkg_mgr }} name=epel-release state=absent"
      when: ansible_distribution == 'CentOS'
	  
    - name: remove nginx web server for CentOS
      action: "{{ ansible_pkg_mgr }} name=nginx state=absent"
      when: ansible_distribution == 'CentOS'
  
    - name: remove nginx web server
      action: "{{ ansible_pkg_mgr }} name=nginx state=absent autoremove=yes"
      when: ansible_distribution == 'Ubuntu'

 

728x90
728x90

FACT(s)


FACT(s)란

- 일반적으로 구성 요소의 의미로 쓰여짐

- 호스트에 따라 동적으로 할당되는 변수 인자

- 앤서블 노드들에 다양한 정보를 미리 정의해 둔 변수

- 앤서블은 기본적으로 setup 모듈을 통해 facts를 수집함 -> 'gather_facts: no'는 facts 수집을 하지 않겠다는 의미 -> 성능 향상

 

FACT(s) 사용법

facts 값 확인을 위한 실습 코드 실행

git clone을 이용해 코드 다운로드

https://github.com/sysnet4admin/_Book_Ansible.git

 

facts.yml 파일이 있는 디렉토리로 이동

[vagrant@ansible-server ~]$ cd _Book_Ansible/
[vagrant@ansible-server _Book_Ansible]$ ls
부록
2. 앤서블을 체험하기
3. 베이그런트를 통해서 앤서블의 실습 환경 구성하기
4. 리눅스와 윈도우를 앤서블을 통해서 관리하기
5. 네트워크 운영체제를 앤서블을 통해서 관리하기
6. 플레이북을 효율적으로 작성하기
7. 재사용이 가능한 플레이북 만들기
README.md
[vagrant@ansible-server _Book_Ansible]$ cd 6.\ 플레이북을\ 효율적으로\ 작성하기/
[vagrant@ansible-server 6. 플레이북을 효율적으로 작성하기]$ ls
6.1.1. 기본 실습 환경을 구성하기
6.1.2. known_hosts를 자동으로 등록하기
6.1.3. authorized_keys를 자동으로 등록하기
6.2.1. 숨겨왔던 facts의 정체
6.2.2. when 조건
6.2.3. include_tasks 구문
6.2.4. if 조건
6.3.1. NFS 구성을 효율적으로 하기
6.3.2. 넥서스 스위치의 구성 파일을 효율적으로 백업하기
6.3.3. Cumulus로 접속하기 위한 인증을 자동화하기
6.3.4. Cumulus 노드 간에 OSPF를 빠르고 정확하게 구성하기
[vagrant@ansible-server 6. 플레이북을 효율적으로 작성하기]$ cd 6.2.1.\ 숨겨왔던\ facts의\  정체/
[vagrant@ansible-server 6.2.1. 숨겨왔던 facts의 정체]$ ls
facts_collector.yml  facts_output  facts.yml
[vagrant@ansible-server 6.2.1. 숨겨왔던 facts의 정체]$

 

facts.yml 코드 확인

[vagrant@ansible-server 6.2.1. 숨겨왔던 facts의 정체]$ vi facts.yml

 

facts를 수집하도록 gather_facts: no 주석 처리

 

facts.yml 파일을 실행하여 IP 주소가 각 노드에 맞게 출력되는지 확인

[vagrant@ansible-server 6.2.1. 숨겨왔던 facts의 정체]$ anp facts.yml

 

setup 모듈을 호출하여 앤서블이 실행되는 노드들에 대한 facts를 수집하고 출력함

이 때, 화면상에 그대로 출력되어 가독성이 떨어지므로 리다이렉션을 이용해 파일로 저장

[vagrant@ansible-server 6.2.1. 숨겨왔던 facts의 정체]$ ans nodes -m setup > facts.txt

728x90
728x90

컨테이너 관리 명령어


docker container

서브 커맨드 확인

 

1. 컨테이너 생성

docker container create

create 옵션

옵션 설명
-it 입출력이 필요한 경우 (쉘 실행 시)
--rm 컨테이너 종료 시 자동 삭제
--name 컨테이너 이름 지정 (지정하지 않을 경우 자동 생성)

 

2. 생성한 컨테이너 실행

docker container start

start 옵션

옵션 설명
-ai 입출력이 필요한 경우 (create 단계에서 -it 옵션이 적용되지 않았다면 사용 불가)

3. 컨테이너 생성 + 실행

docker container run

run 옵션

옵션 설명
-it 입출력이 필요한 경우 (자동 연결)
-d 연결이 불필요한 경우 (백그라운드 실행)

 

4. 컨테이너 목록 확인

docker container ls

# docker container ls 와 같은 명령어
docker ps

# -a 옵션으로 중지 상태의 컨테이너까지 확인 가능
docker ps -a

 

none_httpd 컨테이너만 실행 중

hello-world는 ls와 같이 실행되고 바로 종료되는 이미지로 종료 상태임을 확인할 수 있음

centos 이미지는 쉘 형태임에도 불구하고 실행되지 않음 >> 문제가 있음

 

5. 컨테이너 생성 및 실행 시 주의 사항

  1) 쉘을 실행하는 이미지는 생성 시 필수적으로 -it 옵션 필요 (=입출력 장치 연결 필요) -> 실행 시 -ai 옵션을 사용할 경우만 연결

  2) 서비스(데몬 프로세스)를 실행하는 이미지는 생성 시 옵션 불필요 -> 실행 시 -ai 옵션을 사용하면 이후 작업 불가

  3) run 명령어 사용 시에는 -it 옵션 동일 -> 연결이 필요 없는 경우 -d 옵션 사용 (데몬 프로세스 종류들)

 

it_centos 컨테이너 생성

 

it_centos 컨테이너 실행

 

6. 실습 팁

  1) 실행 중 혹은 완료된 모든 컨테이너 삭제

docker container rm -f $(docker ps -aq)

 

  2) 쉘을 실행한 컨테이너에서 종료하지 않고 빠져나올 때: Ctrl + p + q

728x90
728x90

도커 명령어 구성


docker sub command 확인

docker 입력 후 tab 키 두 번

 

 

docker [관리 대상(오브젝트)] [동작]

docker 관리 대상 동작
  image, network, container, ... pull, rm, ls, ...

 


도커 이미지 관리


docker image

- 이미지의 태그는 생략하면 무조건 latest로 지정됨

- 특정 태그를 지정하는 것을 권장

- 가급적 latest는 사용하지 않는 것을 권장

 

docker image 서브 커맨드

 

 

1. 이미지 다운로드 (기본적으로 docker hub에서 다운로드됨)

docker image pull

ubuntu 이미지 다운로드

 

2. 다운로드한 도커 이미지 목록 출력

docker image ls

다운로드한 ubuntu 이미지 확인

 

3. 로컬 이미지 삭제

docker image rm

우분투 이미지 삭제

 

4. 로컬 이미지의 상세 정보 확인

docker image inspect

hello-world 이미지 상세 정보 확인

 

728x90
728x90

도커 & 컨테이너


도커란?

- 리눅스 컨테이너를 관리하는 컨테이너 런타임 (엔진) 중의 하나

- 컨테이너 런타임은 컨테이너를 생성/관리 역할

- 리소스들에 대한 격리 (프로세스/파일 시스템)

 

이미지란?

- 어플리케이션 실행에 있어서 필요한 파일들의 집합

 

컨테이너란?

- 이미지를 실행한 상태

- 실행 파일 : 프로세스 = 이미지 : 컨테이너

- 기능: 이미지 생성, 이미지 공유, 컨테이너 실행

- 오브젝트: 이미지, 컨테이너, 네트워크, 볼륨

- 기반 기술

  1) namespace: 각각의 리소스 격리

  2) cgroup: 리소스 관리를 위한 그룹 (컨트롤 그룹)

  3) 가상 브릿지/vNIC: 컨테이너에서 사용할 네트워크 환경을 제공하기 위한 기능

 

 

 

 

 


CentOS에 도커 설치


공식 문서 참고

https://docs.docker.com/engine/install/centos/

 

Install Docker Engine on CentOS

 

docs.docker.com

 

 

저장소 설정

Docker Engine 설치 전에 Docker 저장소 설정 필요

# 유틸리티를 제공하는 패키지 설치: yum-utils
sudo yum install -y yum-utils

# 리포지토리 설정
 sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

 

 

도커 엔진 설치

최신 버전의 Docker Engine, containerd 및 Docker Compose 설치

# 최신 버전 설치 시
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 또는 특정 버전 설치 시
 sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin

 

 

 

도커 시작

sudo systemctl start docker

 

설치된 도커 버전 확인

docker --version

 

이미지를 실행하여(이미지가 없다면 다운로드 후 실행됨) Docker 엔진의 설치 확인

sudo docker run hello-world

 

다운로드한 도커 이미지 목록

docker image ls

728x90

+ Recent posts