Ansible이란?
- 표준 작업을 수행하기 위해 체크리스트를 만들고 관리 가이드 및 임기응변, 축적된 경험을 통해 시스템 관리하는 도구
- 동일하게 configuration 됐다하더라도 서버마다 다른 결과를 가짐!! (눈송이 서버 - snowflake server)
=> 똑같이 같은 결과를 갖도록 성공할 수있도록
- IT 시스템 구성 및 관리 : it시스템은 데이터를 처리하는 프로세스
- 도커의 컨테이너와 비슷
주요 특징
-확장성과 유연성: 모듈(파이썬)로 자동화, 네트워크장비까지 configuration 가능
-에이전트 불필요: 버전마다 업데이트하기 때문에 에이전트를 따로 개발할 필요 X
(로키 6,7,8 다 따로 있었는데 그걸 호환성있게 할 수 있음), OpenSSH 이용해서 작업대상 연결
-간단: 사람이 읽을 수 있는 자동화 제공 // 사람이 알아보기 쉬운 yaml 제공 (이와 반대로 json파일은 힘듦)
=> 특별한 코딩 능력 필요하기보단 yaml 문법 지식 필요함
-멱등성과 예측 가능성
멱등성 매우 중요!!! - 항상 같은 결과를 냄
ex. 파드 10개 생성 후 replicas한 후 배포하는데 kubectl을 몇 백번, 몇 천번 쳐더라도 결과는 10개!
리눅스 네트워크 설정 명령어 - nmcli
플레이북 - 자동화하는 문서인 script 짜기
변수 관리
작업 제어 - for / if 문을 통해 동작 제어
파일 관리 - 리눅스는 윈도우와 달리 파일을 오퍼레이팅하는 OS다!! , 파일 관리 모듈들 소개
역할 - galaxy
Ansible - 제어 노드와 관리 호스트 두 가지 유형으로 구성됨
Inventory(인벤토리) - 관리 대상 호스트들을 목록 만들어줌
Play Book(플레이북) - 하나 이상의 플레이를 포함하는 파일 , 실제 수행해야 하는 작업 목록을 정의, Yaml 형식
하나의 플레이에는 특정 대상 호스트들을 작업 걸어줌, 작업 내용까지 작성되어있고 모듈 통해 구성됨
* yaml 파일: 문법이 비교적 간단하고 용이하여 사람이 읽기 편하게 구성되어있음 하지만 주의해야 할 게 있음
ex. 리스트 데이터형은 -(하이픈) 붙여주기, 띄어쓰기, 들여쓰기 이런 거 신경써서 작성!
딕셔너리 데이터 형 key:value
리스트 데이터 형 index:value
Connection Plugins
Host Inventory
Playbooks
이 3가지가 중요!!
실습) 컨트롤러와 노드 3개 -> ssh key 생성
-호스트 네트워크 설정 (도구 > 네트워크 관리자)
-Controller 및 노드 3개 VM 생성
가상머신 설치할 때 로키9.5를 선택했으나 여기에서 그대로 다른 이미지가 올라가있었다. 이것도 로키 9.5로 설정해주면 에러를 방지할 수 있다. (+재부팅 해줘야 한다)
minimal은 한글 지원안할 수 있기에 영어버전으로 선택해준다.
Installation Destination은 그냥 automatic 체크되어있기때문에 그냥 들어가서 Done 눌러주면 된다.
User Creation과 Root Password 진행한다.
다 한다음 설치 진행을 해주면 된다. 그리고 리부팅!
그리고 root 계정으로 접속하여 poweroff 해준다. (작동되는 동안 복제안됨)
controller1 오른쪽버튼 눌러 복제버튼 통해 복제해준다.
-콘솔프로그램 (불편한 단점이 있음)
-MobaXterm (이걸로!)
=> 가상머신 접속
172.16.0.200/24 ip를 넣고 호스트이름은 controller로 지정 (가상머신의 이름인 controller1과 상관X) 그리고 재부팅
조회결과 제대로 됐음을 확인할 수 있다. (nmtui, nmcli, hostnamectl )
루프백 주소
emp0s3 10.0.0.0
emp0s8 172.16.0.200
172.16.0.200 주소로 ssh 접속
+ 세션 생성 시 Bookmark Settings에서 이름을 Controller로 바꿔주면
다음과 같은 화면처럼 접속하는것이 보인다.
서버abc 각각 작동시켜서 ip (172.16.0.201 202 203/24) 넣고 호스트이름 설정한 후
mobaXterm ssl 접속하여 ansible-user / ansible (passwd) 설정해준다.
위 사진처럼 사용자 추가 및 사용자에 대한 패스워드 추가하여 접속할 수 있다.
-SSH 인증방식
1. root 계정의 패스워드
2. 공개키 대칭키 // 퍼블릭 키는 aws가 소유, 프라이빗 키를 가지게 됨
secret key는 aws 통한 것이므로 얘는 아님!!
KMS - Key Management Service
이 경우에서 Ansible Management Node가 퍼블릭 및 프라이빗 키를 소유하고 있고 호스트들에게 퍼블릭 키를 제공한다.
key-gen 키 생성
-t rsa rsa 타입의 키 (디폴트)
-N '' (암호 공백인 이유 - 자동화를 위해서)
-f 파일 경로
키가 생성됨을 확인할 수 있음
172.16.0.201 (serverA) 호스트에 키 부여
처음부여하는거기에 YES 입력하여 허가해준다.
ssh 172.16.0.201 통해 어떤 옵션없이도 서버A에 접속하는 것을 확인할 수 있다.
ssh user@HOST [user 생략할 경우 현재 위치에 있는 사용자 계정이 자동으로 들어감]
controller에서 ansible-user 계정접속하고 key-gen하여 키를 생성한다.
그리고 그 키를 172.16.0.201 202 203에 ssh-copy-id를 통해 부여해준다. (사진은 서버A만 B,C도 같은 방식으로)
키를 부여하고나면 ssh ip주소 통해 접속할 수 있음을 확인할 수 있다.
각 서버 접속 확인, 그리고 ssh ip주소 hostname 치면
호스트이름을 출력결과로 받을 수 있다.
호스트이름 바꾸는 방법
hostnamectl set-hostname [호스트이름]
bash
해주면 호스트이름이 바꿔서 나온다.
실습 2) ansible-user에 sudo 권한 부여
이 부분에 ansible-user를 추가하여 sudo install을 할 수 있게 한다.
그리고 vi 편집기 통해 /etc/sudoers.d/ansible-user(파일 생성하기에 이름상관 X)
편집기 들어가서 다음과 같은 내용을 넣어준다.
그럼 설치가 안되던 계정이었는데 sudo를 이용하여 설치할 수 있음을 확인할 수 있다.
*epel-release (Extra Package for Enterprise Linux)
설치한 패키지 목록을 조회했을 때 repo형식의 내용물들이 조회될 수 있다.
ansible 설치 + 서버 A, B, C에도 똑같이 할 수 있게 SUDO 권한 설정한다.
제어 노드에 호스트 이름 부여
/etc/hosts 파일들어가서 다음과 같은 내용을 추가한다.
ip주소가 아닌 /etc/hosts에 정의된 이름으로도 접속할 수 있는 것을 확인할 수 있다.
플레이북 실행
Ansible 사용하기 위핸 작성된 코드를 가진 파일 필요 -> 크게 3가지 유형
1. Configuration File (구성 파일)
2. Playbook File
3. Inventory
-Configuration File (구성파일)
: Ansible 사용하기 전 연결 설정이나 권한 설정들을 변경
기본적으로 /etc/ansible/ansible.cfg에 위치
ansible --version 통해 확인 가능 // working directory에 구성 파일이 있다면 읽는 것에 대한 우선순위가 높음
현재 디렉토리에서 .ansible.cfg 파일 생성하여 다시 확인해보면 바껴있다.
*중요* (시험에 나옴...)
remote_user : 관리 호스트에 ssh 연결할 때 사용할 사용자 이름 지정. 지정하지 않았을 경우 현재 사용자의 이름이 지정ask_pass : 관리호스트에 ssh 연결할 때 암호를 묻는 메세지 표시 여부를 지정.
become: 권한 상승할건지 아닐건지 (sudo / su 이용해서 권한상승, 디폴트는 false)
become_user ( 디폴트는 root )
실습
홈디렉토리인 경우 .ansible.cfg
그냥 디렉토리면 앞에 .삭제
ansible.cfg에 내용추가
-Inverntory 파일을 정적 / 동적 구성 가능
정적 인벤토리: 하나하나 일일이 리스트 업 (ip, 호스트 이름)
vi inventory 들어가서
대상 호스트들의 이름을 넣어준다.
inventory 파일에서 [] 이용해서 그룹화도 가능하다. // 그룹화하지 않을 호스트들은 위에 다 작성, 그룹화 호스트들은 아래
-all, ungrouped
all : 모든 호스트들을 포함하는 목록
ungrouped: 인벤토리에서 그룹에 속하지 않는 모든 호스트들을 목록
-중첩 그룹 ([ : ] 표시, 개발에서 '상속' 개념과 비슷)
-범위 지정: 많은 호스트들을 관리할 때 간단하게
ex. server[a:z] -> servera ~ serverz
-인벤토리 파일 위치 재정의
-i 옵션 사용하거나 defaults 섹션에서 inventory 파일의 위치 정의 가능
동적 인벤토리: 가상 머신 목록에 있는 ip들을 자동으로 인벤토리에 넣어줌. 클라우드 벤더에서 script 파일 형식을 제공하여 실행 (디렉토리에서 script 파일 넣고 이 디렉토리를 인벤토리로 지정하여 자동으로 실행)
'IT > Ansible' 카테고리의 다른 글
Ansible - 파일 관리, 역할, 쿠버네티스 설치 (1) | 2025.01.31 |
---|---|
Ansible - 변수 관리, 작업 제어, Handler, 오류제어 (1) | 2025.01.24 |