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에서만 사용할 수 있다. ...@@ -32,7 +32,11 @@ Specific Runner는 특정 Project에서만 사용할 수 있다.
Specific Runner를 통해 Job을 수행하는 것이다. Specific Runner를 통해 Job을 수행하는 것이다.
``` ```
## GitLAB Runner Install
- redhat 계열
```bash
# curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash # curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | bash
# yum install gitlab-runner # yum install gitlab-runner
...@@ -40,7 +44,16 @@ Specific Runner를 통해 Job을 수행하는 것이다. ...@@ -40,7 +44,16 @@ Specific Runner를 통해 Job을 수행하는 것이다.
# gitlab-runner register # gitlab-runner register
Runtime platform arch=amd64 os=linux pid=3037 revision=ac8e767a version=12.6.0 Runtime platform arch=amd64 os=linux pid=3037 revision=ac8e767a version=12.6.0
Running in system-mode. Running in system-mode.
```
- Debian 계열
## GitLAB Runner Register
```bash
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
https://gitlab.hongsnet.net https://gitlab.hongsnet.net
Please enter the gitlab-ci token for this runner: Please enter the gitlab-ci token for this runner:
...@@ -53,7 +66,7 @@ Registering runner... succeeded runner=M4y6veuz ...@@ -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: Please enter the executor: kubernetes, docker, docker-ssh, parallels, shell, ssh, virtualbox, custom, docker+machine, docker-ssh+machine:
shell shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 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