일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- HTTPD
- permission
- docker
- MSBing
- docker image
- 날짜변경
- yum
- ssh
- 리다이렉션
- nmcli
- ansible
- journalctl
- 엑셀파일명변경
- chmod
- newbingai
- M365필터
- firewalld
- swapon
- vgcreate
- Kubernetes
- vagrant kubernetes
- chatGPT
- 랜카드인식불량
- tar
- 같은폴더
- pvcreate
- lvcreate
- docker network
- 프로세스
- mount
- Today
- Total
becool
20210726 (월) ansible 설치 본문
IaC (Infrastructure as Code)
코드형 인프라스트럭쳐
인프라 관리시 시스템이 읽을 수 있는 코드의 형태로 관리 YAML
정의된 하나의 인프라 설정파일로 여러번 재사용이 가능하다 : 여러 호스트에 일괄 적용 가능
AWS cloud formation, 하시코프 terraform 등을 활용하여 가상머신의 인스턴스 생성작업까지 가능
IaC 장점
비용 절감
빠른 속도
높은 안정성 (휴먼 에러의 감소)
+ ansible : 멱등성 - 여러번 적용해도 결과는 같음. (idempotence)
인프라를 코드화 함으로써 전체 인프라에 대한 이해 및 버전관리가 쉬워짐
재사용성
IaC 도구 구분
1) 구성 관리 (Configuration Management)
- Ansible, Chef, Puppet, SaltStack 등
2) 배포 (Provisioning)
- AWS Cloudformation, Openstack Heat, Terraform 등
3) 가변 인프라 / 불편 인프라
4) 절차적 언어 : 원하는 최종 상태에 도달하기 위해서 코드가 단계별로 정의, 실행 되는 언어 (Ansible, Chef)
선언적 언어 : 원하는 최종 형태만 정의하면 구성에 필요한 세부 절차는 알아서 실행되는 언어
(AWS Cloudformation, Pupet, SaltStack, Terraform 등)
5) 마스터 및 에이전트 유무 (agent, agentless)
마스터 : 인프라의 정보, 구성관리 및 배포를 위한 정보를 가진 서버
에이전트 : 서버로부터 명령을 전달받아 수행하기 위한 프로그램
에이전트가 실행된 상태여야하므로, 리소스를 차지하고, 호스트에 일정부분 부하가 발생
- 마스터가 적용된 도구 : Chef, Pupet, SaltStack (없이 구성가능함)
- 에이전트가 적용된 도구 : Chef, Pepet, SaltStack
Ansible (agentless) | 애플리케이션 및IT 인프라 관리를 자동화 할 수 있는 IaC 도구 host구성 프로그램 언어에 익숙하지 않은 사용자도 충분히 사용할 수 있음 소규모 부터 엔터프라이즈 급 까지 다양한 환경에서 사용이 가능함 별도의 에이전트 없이 호스트들을 관리함. (open ssh) |
제어 노드 (Control Node) | Ansible로 관리노드 (Managed node) 를 관리하기 위한 호스트 Ansible이 설치되며 ansible 명령을 통해 각 관리노드를 관리 Linuxm Windows 등의 운영체제가 설치된 호스트를 관리할 수 있음 (단, 제어노드는 반드시 Linux 호스트여야함) |
관리 노드 (Managed Node) | Ansible 제어 노드에 의해 관리되는 호스트 Linux, Windows 운영체제를 관리할 수 있음 관리 노드(Managed node)에는 별도로 에이전트가 설치되지 않음 Windows가 설치된 관리 노드는 WinRM 도구 설치필요 (Linux는 open ssh) |
인벤토리 (Inventory) | 관리노드(Managed node)의 목록이 담긴 파일 |
플러그인(Plugin) | Ansible의 핵심 기능을 확장하기 위한 프로그램 |
모듈 (Module) | Ansible을 실행하는 Python 코드 단위 호스트에 패키지 설치/업데이트/제거 시스템 명령어 실행, 파일 복사, 파일 내용 변경 등의 작업이 가능함 |
작업 (Task) | Ansible 의 실행단위 |
Ad-hoc 명령 | Ansbile 명령을 이용하여 단일성 작업을 실행하는 명령 |
플레이(Play) | 특정 관리 노드 (Managed node)를 대상으로한 순서가 있는 작업의 목록 |
플레이북(Playbook) | 하나 이상의 플레이를 담고 있는 파일 (YAML) ( ansible-playbook 명령어로 실행 ) |
설치
각 노드 키값이 같음 (vm 복사로 인하여) : SSH Host Key 갱신 필요
→ rm /etc/ssh/ssh_host* 해서 관련 파일들을 지우고
systemctl restart sshd 서비스 재시작하면 노드별로 고유의 관련 파일들이 생성 될 것.
인벤토리
그룹의 종류
Ansible 구성 파일 (ansible.cfg)
구성 파일 우선 순위
1) ANSIBLE_CONFIG 환경 변수로 지정한 경로
2) (현재) 작업디렉터리에 있는 ansible.cfg
3) ~/.ansible/ansible.cfg
4) /etc/ansible/ansible.cfg
섹션
[defaults] : Ansible 실행에 필요한 기본 환경변수 정의
inventory : inventory 경로 지정
remote_user : Ansible로 Managed node 접속 시 사용할 사용자(사용자 권한 설정)
ask_pass : SSH 접속 시 인증 방식을 패스워드기반(yes) / 키기반 인증 (no) 택1
[privilege_escalation] : 권한 상승 (사용자 전환) 에 필요한 환경 변수 정의
become : 권한 상승(사용자 전환) 여부 결정. true (상승) / false (상승사용하지 않음)
become_method : 권한 상승 (사용자 전환) 방식 정의 (기본값 : sudo)
become_user : 권한 상승 (사용자 전환)을 수행할 대상 사용자 (일반적으로 root)
become_ask_pass : become pass설정 (권한상승 대상 패스워드 물어볼지 여부)
###설치 ###
yum install -y ansible (설치 안되면 epel-release 설치 후 재시도)
[root@ansible-server ~]# which ansible
/usr/bin/ansible
###인벤토리 확인 ###
[user@ansible-server work]$ ansible web -i inventory/hosts --list-hosts
hosts (3):
www1.example.com
www2.example.com
192.168.56.11
[user@ansible-server work]$ ansible db -i inventory/hosts --list-hosts
hosts (3):
db1.example.com
db2.example.com
192.168.56.12
[user@ansible-server work]$ ansible all -i inventory/hosts --list-hosts
[user@ansible-server work]$ ansible ungrouped -i inventory/hosts --list-hosts
[west]
10.0.10.1
foo.example.com
[east]
20.0.10.1
one.example.com
two.example.com
[prod:children]
east
[test:children]
west
[user@ansible-server work]$ ansible prod -i inventory/hosts3 --list
hosts (3):
20.0.10.1
one.example.com
two.example.com
[user@ansible-server work]$ ansible test -i inventory/hosts3 --list
hosts (2):
10.0.10.1
foo.example.com
[user@ansible-server work]$ cat inventory/host4
192.168.10.11
192.168.10.3
foo.example.com
bar.example.com
[webservers]
web0[1:4].example.com
[user@ansible-server work]$ ansible webservers -i inventory/host4 --list-hosts
hosts (5):
web01.example.com → 대괄호 영역이 자동으로 대응됨
web02.example.com
web03.example.com
web04.example.com
[user@ansible-server work]$ ansible web:\&east -i inventory/hosts3 --list-hosts
hosts (1):
bar.example.com → [web]과 [east]에 공통(&)으로 속해있는 호스트 검색
[user@ansible-server work]$ ansible db:\!west -i inventory/hosts3 --list-hosts
hosts (4):
192.168.56.12 → [db]중에 [west]와 중복(!)되지 않는 호스트만 검색 : not west
db01.example.com
db02.example.com
172.16.55.17
###구성파일 ###
현재 작업디렉터리(pwd)에 따른 구성파일 적용의 차이
[user@ansible-server .ansible]$ ansible --version
ansible 2.9.23
config file = /etc/ansible/ansible.cfg → 적용중인 구성파일
configured module search path = [u'/home/user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
[user@ansible-server .ansible]$ cd -
/home/user/work
[user@ansible-server work]$ ansible --version
ansible 2.9.23
config file = /home/user/work/ansible.cfg → 적용중인 구성파일
configured module search path = [u'/home/user/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Oct 14 2020, 14:45:30) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
[defaults]
inventory = ./inventory2/hosts5
remote_user = user
ask_pass = no
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = true
[user@ansible-server work]$ ansible all -m shell -a "ls -l /etc/cron.d" --become-method sudo --become-user root --ask-become-pass
BECOME password:
#### /etc/sudoers 권한 추가
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
user ALL=(ALL) NOPASSWD:ALL
ansible_user ALL=(ALL) NOPASSWD:ALL
[ansible_user@ansible-node01 ~]$ sudo -i → 정상적으로 패스워드 없이 sudo -i 가능
[root@ansible-node01 ~]#
[user@ansible-server work]$ ansible all -m shell -a "whoami" → 설정파일 : become = true
192.168.56.11 | CHANGED | rc=0 >>
root
192.168.56.13 | CHANGED | rc=0 >>
root
192.168.56.12 | CHANGED | rc=0 >>
root
[user@ansible-server work]$ vim ansible.cfg
[user@ansible-server work]$ ansible all -m shell -a "whoami" → 설정파일 : become = false
192.168.56.13 | CHANGED | rc=0 >>
ansible_user
192.168.56.12 | CHANGED | rc=0 >>
ansible_user
192.168.56.11 | CHANGED | rc=0 >>
ansible_user
'ansible' 카테고리의 다른 글
20210730 (금) playbook 연습장 (0) | 2021.07.30 |
---|---|
20210730 (금) ansible 조건문, 블록, 핸들러 (0) | 2021.07.30 |
20210729 (목) ansible 변수, 반복문, 조건문 (0) | 2021.07.29 |
20210728 (수) playbook 변수 실습 (0) | 2021.07.28 |
20210727 (화) ad-hoc 명령어 및 playbook 기초 (0) | 2021.07.27 |