Commit 29221d8e authored by nuxer's avatar nuxer

2021-03-05, update1

parent f71cd8e4
Pipeline #5090 passed with stages
in 3 seconds
[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)
# Ansible 활용
> IaC(Infrastructure as Code) 도구 중 Ansiable에 대한 Playbook을 제공
# Table of Contents
| NO | ITEM | Content | 비고 |
| ------ | ------ | ------ | ------ |
| 1 | OS Maintenance ITEMs | [OS](./OS/) | |
| 2 | INFRA Maintenance ITEMs | [GO](./INFRA/) | |
| 3 | WEB Server Maintenance ITEMs | [GO](./WEB/) | |
| 4 | Users Management ITEMs | [GO](./USER/) | |
| 5 | System H/W Review ITEMs | [GO](./HW/) | |
| 6 | Virtualization Maintenance ITEMs | [GO](./VM/) | |
| 7 | Secure Vulnerability ITEMs | [GO](./SECURE/) | |
| 8 | MISC ITEMs | [GO](./MISC/) | |
# Overview
## Facts 란?
Ansible에서 **Node에 대한 정보를 변수로 수집하는 정보**를 말하며, Playbook 사용 시 `gather_facts:no` 로 설정하지 않는다면, 기본적으로 수집된다.
```python
# cat test.yml
---
- hosts: all
#gather_facts: no
tasks:
```
## 멱등성(idempotent)이란 ?
**연산 수행을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 멱등성** 이라고 한다.
여기서 Ansible에서의 멱등성은 여러 번 수행하더라도 동일한 결과 값이 나오도록 제공되는 형태를 의미 한다. 예를 들어, Node에 **test** 계정을 생성한 후 다시 수행하게 되면, 좀 전에 생성되었기 때문에 동일한 작업을 수행하지 않는 것을 의미한다.
## Playbook 이란?
**YAML**(야물이라고 읽는다) 문법을 기반으로 정의된 **다수의 Task를 수행하는 툴** 이다.
## Task 란?
**Ansible 모듈의 호출을 의미**한다. Role을 좀 더 편하게 관리하기 위해 미리 정의된 YAML 파일의 include을 하는 것이 가능하다.
예를 들어 다음의 두 명령을 각가 실행하고 싶다면, Task는 두 개가 되는 것이다.
```python
# cat test.yml
- hosts: all
tasks:
- name: test command 1
command: ls -al
- name: test command 2
command: pwd
```
원격 Node에 ls -al 및 pwd 명령을 실행한다. 물론, 다음과 같이 Shell의 세미콜론을 이용해 한 개의 Task로 실행할 수도 있다.
```python
# cat test.yml
- hosts: all
tasks:
- name: test command
shell: ls -al; pwd
```
## inventory 란?
**원격 Node에 대한 META 데이터를 기술하는 파일**이다. Ansible은 inventory 파일에 yaml을 적용하지 않는다. 기본 파일은 **/etc/ansible/hosts**(Global 기본 값)를 읽게 하거나, 별도 inventory 파일을 만들고 옵션(ansible-Playbook 명령 시 -i 옵션)을 주어 동작하게 할 수 있다.
```bash
# ls
host_vars hosts test.yml
# ansible-playbook -i hosts test.yml
```
그리고 **hosts inventory** 파일은 다음과 같이 정의해서 사용한다.
```python
# cat hosts
[SERVERS]
172.16.0.111
```
- [SERVERS] : **호스트 그룹**을 의미한다.
- 172.16.0.111 : SERVERS 호스트 **그룹의 호스트를 의미** 한다.
만약 **호스트 그룹에 변수를 적용**하고 싶다면, 다음과 같이 작성한다.
```python
# cat hosts
[SERVERS]
172.16.0.111
[SERVERS:vars]
managed_ip=10.10.10.10
```
## 호스트 / 그룹 변수
**inventory에 정의된 호스트의 변수를 지정하는 파일**이다.
- ./host_vars : 호스트에 대한 변수를 정의
- ./group_vars : 호스트 그룹에 대한 변수를 적용
```python
# cat host_vars/172.16.0.111
ansible_ssh_host: 172.16.0.111
ansible_ssh_port: 2222
ansible_ssh_user: 유저 아이디
ansible_ssh_pass: "유저 패스워드"
ansible_become: yes
ansible_become_method: su
ansible_become_user: root
ansible_become_pass: "root 패스워드"
ansible_python_interpreter: python2.7
```
위의 호스트는 일반 유저 -> su - 명령 => root 유저 로그인 방식으로 정의하며, python은 2.7 버전을 지정한 내역이다.
## Jinja2 Template
Jinja2(진자2)는 Python으로 작성된 템플릿 엔진이다. Ansible에서 Playbook에 있는 변수 정보를 확장할 때 사용한다.
다음과 같이 변수를 정의한 후 이 변수의 결과를 출력하는 간단한 YAML 파일을 보자.
```python
---
- name: Ansible Jinja2 Example
hosts: all
vars:
my_var: hongsnet
task:
- name: Debugging for my_var
debug:
msg: "my_var value is {{ my_var }}"
```
......@@ -32,7 +32,11 @@ Specific Runner는 특정 Project에서만 사용할 수 있다.
Specific Runner를 통해 Job을 수행하는 것이다.
```
## GitLAB Runner Install
- redhat 계열
```bash
# curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash
# yum install gitlab-runner
......@@ -40,7 +44,16 @@ Specific Runner를 통해 Job을 수행하는 것이다.
# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=3037 revision=ac8e767a version=12.6.0
Running in system-mode.
```
- Debian 계열
## GitLAB Runner Register
```bash
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.hongsnet.net
Please enter the gitlab-ci token for this runner:
......@@ -53,7 +66,7 @@ Registering runner... succeeded runner=M4y6veuz
Please enter the executor: kubernetes, docker, docker-ssh, parallels, shell, ssh, virtualbox, custom, docker+machine, docker-ssh+machine:
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
```
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment