Ssoon
[ Part-3 ] 앤서블 활용 - 시스템 구축 자동 본문
CloudNet@ 가시다님이 진행하는 Ansible 101 Study
"앤서블로 시작하는 인프라 자동화" (한빛미디어) 로 진행
✅ 사용자 계정 생성
ansible 의 playbook 작성 = playbook 개발 = 사전 분석 + playbook 설계
💠 사전 분석
- 사용자 계정과 패스워드는 Vault 를 이용해 암호화
- 사용자 계정 생성은 ansible.builtin.user 모듈 사용
💠 playbook 설계
- playbook 의 파일 이름
- playbook을 구성할 task 명
- task 에서 사용할 모듈과 변수
- 변수명과 변수를 선언할 위치
💠 playbook 개발
- ansible.cfg
[defaults]
inventory = ./inventory
remote_user = root
ask_pass = false
[priviledge_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
- inventory
tnode1-centos.exp.com
tnode2-ubuntu.exp.com
tnode3-rocky.exp.com
- ansible-vault
- 사용자 계정 정보가 정의된 변수 파일 생성
user_info:
- userid: "ansible"
userpw: "ansiblePw1!"
- userid: "stack"
userpw: "stackPw1!"
- create_user.yml
- 사용자 계정 생성 playbook 작성
- 모든 호스트에 동일하게 생성
- vault로 작성된 변수 파일 읽어 사용
- hosts: all
vars_files:
- vars/secret.yml
tasks:
- name: Create user
ansible.builtin.user:
name: "{{ item.userid }}"
password: "{{ item.userpw | password_hash('sha512', 'mysecret') }}"
state: present
loop: "{{ user_info }}"
💠 playbook 실행
- aneible-playbook --syntax-check 로 create_user.yml 파일 문법 체크
- --ask-vault-pass 옵션으로 create_user.yml 실행
✅ SSH 키 생성 및 복사
💠 사전 분석
- 사용자 아이디는 외부 변수로
- ansible-server 에서 ansible 계정 만들고 SSH 키 생성
- ansible-server에서 생선된 SSH 공개 키를 각 tnode에 복사
💠 playbook 설계
- ansible contens collection 에서 SSH 키 생성 모듈과 SSH 키 복사 모듈 검색
💠 playbook 개발
- inventory
[tnode]
tnode1-centos.exp.com
tnode2-ubuntu.exp.com
tnode3-rocky.exp.com
- create_sshkey.yml
- task 가 실행될 호스트별로 task 가 작성
- localhost (ansible-server) 에서 SSH 공개키 생성
- tnode 호스트 그룹의 각 서버에 복사
- hosts: localhost
tasks:
- name : Create ssh key
ansible.builtin.user:
name: "{{ userid }}"
generate_ssh_key: true
ssh_key_bits: 2048
ssh_key_file: /home/{{ userid }}/.ssh/id_rsa
- hosts: tnode
tasks:
- name: Copy SSH Pub key
ansible.posix.authorized_key:
user: "{{ userid }}"
state: present
key: "{{ lookup('file', '/home/{{ userid }}/.ssh/id_rsa.pub') }}"
💠 playbook 실행
- -e 옵션 : userid 변수 정의 => playbook 실행 시 외부 변수로 정의
- ansible-server 에서 ansible로 계정 변경우 SSH 키 생성 확인
- tnode /home/ansible/.ssh 에 authorized_keys 확인
- ansible-server 에서 tnode 에 패스워드 입력없이 SSH 로그인 확인
✅ NTP 서버 설치 및 설정
💠 사전 분석
- NTP 서버 주소는 메인 playbook 정의
- centos, rocky 는 dnf 모듈 사용 , ubuntu는 apt 모듈 사용 chrnoy 설치
- jinja2 템플릿 방식의 chrony.conf 파일을 대상 호스트로 복사
- 설정 파일 복사 후 chrony 서비스 재시작
- role 이용
💠 playbook 설계
- 복잡한 설계는 큰 그림을 먼저 나중에 상세하게
- role 에 대한 상세 설계 : chrony 서비스 설치 role
- 변수 정의 vars
- 환경 설정 템플릿 templates
- 태스크 정의 tasks
- 환경 설정 후 chrony 서비스 재시작을 위한 handler 사용
💠 playbook 개발
- role 생성
- --init-path : role 이 생성될 경로를 ./role로 설정
- role 디렉터리 이동 /vars/main.yml 생성
---
# vars file for myrole.chrony
package_name: chrony
service_name: chronyd
fedora_os:
- CentOS
- /roles/myrole.chrony/templates/chrony.conf.j2
- 외부로부터 입력받은 ntp_server 변수 사용
pool {{ ntp_server }}
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.0.0/16
local stratum 10
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
- /roles/myrole.chrony/handlers/main.yml
- chrony 서비스 재시작
- name: Restart chrony
ansible.builtin.service:
name: "{{ service_name }}"
state: restarted
- /roles/myrole.chrony/tasks/main.yml
- ansible_facts.distribution 변수 : 다른 파일에서 task 포함
- when : 운영체제 별로 설정 파일 복사
- notify : 'Restart chrony' 핸들러 호출
- name: Import playbook
ansible.builtin.include_tasks:
file: "{{ ansible_facts.distribution }}.yml"
- name: Copy chrony config file when Ubuntu
ansible.builtin.template:
src: chrony.conf.j2
dest: /etc/chrony/chrony.conf
notify: "Restart chrony"
when: ansible_facts.distribution == "Ubuntu"
- name: Copy chrony config file when Other OS
ansible.builtin.template:
src: chrony.conf.j2
dest: /etc/chrony.conf
notify: "Restart chrony"
when: ansible_facts.distribution in fedora_os
- /roles/myrole.chrony/tasks/
- 운영체제별 playbook 작성
- name: Install chrony using dnf
ansible.builtin.dnf:
name: "{{ package_name }}"
state: latest
- name: Install chrony using apt
ansible.builtin.apt:
name: "{{ package_name }}"
state: latest
- /ansible-project/chapter_09.3/install_ntp.yml
- myrole.chrony role 추가
- ntp_server 변수를 선언
- hosts: tnode
roles:
- role: myrole.chrony
ntp_server: 0.kr.pool.ntp.org
💠 playbook 실행
- ansible 계정을 이용 -> 각 tnode ansible 계정에 패스워드 없이 sudo 권한 줄수 있도록 설정
echo "ansible ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/ansible
chmod 0440 /etc/sudoers.d/ansible
- install_ntp.yml : role을 호출하는 main playbook 의 대상 호스트를 변경하면 해당 호스트만 실행
- hosts: tnode1-centos.exp.com
roles:
- role: myrole.chrony
ntp_server: 0.kr.pool.ntp.org
'Ansible 101 Study' 카테고리의 다른 글
[ Part-2 ] 앤서블 기본 사용법 - Role (0) | 2024.01.20 |
---|---|
[ Part-2 ] 앤서블 기본 사용법 - 핸들러 및 작업 실패 처리 (0) | 2024.01.20 |
[ Part-2 ] 앤서블 기본 사용법 - 조건문 (0) | 2024.01.20 |
[ Part-2 ] 앤서블 기본 사용법 - 반복문 (0) | 2024.01.15 |
[ Part-2 ] 앤서블 기본 사용법 - 팩트 (0) | 2024.01.14 |
Comments