[구름 k8s] TIL 2-3-4

Peppie·2022년 9월 22일
0

1. Playbook 구조

Playbook - play 집합

playbook - play - task 구조

playbook

play 집합

play

managed node에 적용할 여러 작업 코드 집합
한 번에 일괄적으로 수행할 작업 단위 -> task 모음

task

실제 수행할 작업 내용 -> 모듈로 표현

Playbook의 play 코드 구조

---

playbook 문서 시작

타깃 부분 : play에 대한 공통 정보 (필수 사항)

실행 장비, 사용자 정보 등

  • name 속성
    • play가 어떤 목적을 가지는지 설명하는 내용
    • playbook 실행시 출력되는 내용
    • 생략 가능
  • hosts 속성
    • host 이름; play가 적용될 managed node에 대한 이름
    • 인벤토리에 정의된 이름 사용
  • user 속성
    • play를 적용할 사용자 ID
  • become 속성
    • 관리자 권한으로 권한 상승 유무 명시
    • play 차원에서 관리자 권한 상승 유무 명시
  • become_user 속성
    • 관리자 권한을 갖는 사용자 명시
    • play 차원에서 관리자 권한을 갖는 사용자 명시
  • gather_facts 속성
    • managed node에 대한 fact 정보 수집 유무 확인
    • default : gather_facts: True
    • fact 정보 : managed node에 대한 정보
    • managed node에 대한 fact 정보 수집 활성화할 시 동작 속도 느려짐

변수 부분 (선택 사항)

play 전체에서 사용하는 변수 목록
변수 부분을 변수 사용시에만 기술되는 부분 (생략 가능)

  • vars : 변수 부분
  • vars_files : 변수를 가지고 있는 외부 파일 기술 부분

태스크 부분 : task (필수 사항)

실제 수행할 모듈, managed node에서 수행한 모듈 명시

  • name task 속성
    • 태스크에 대한 설명
    • name 속성의 내용을 기술하지 않아도 되지만 실제로는 항상 기술

Playbook - play - role 구조

role

불필요하거나 중복되는 소스를 제거하고 자주 사용하는 기능을 재사용하기 위해 사용하는 task 코드 집합
YAML 형식으로 작성

  • 라이브러리 (Library)
    • 통상 프로그래밍 언어에서 함수(function)를 모아놓은 파일
    • role == 라이브러리 (maybe)

Ansible Playbook을 이용한 managed node 관리를 위한 프로젝트 구조

managed node 관리 목적 코드들을 체계적으로 관리하기 위해 프로젝트 형식으로 디렉토리 조직화

  • Ansible 프로젝트 : managed node에 적용할 환경 구성을 위해 필요한 파일 집합
  • group_vars : 공통 변수 저장 파일 (YAML 형식) 저장 디렉토리
  • hosts : 인벤토리 파일 저장 디렉토리
  • playbooks : playbook 파일 저장 디렉토리
  • roles : role 파일 저장 디렉토리

Ansible example 참고 사이트

2. 변수와 fact 이해

참고

변수 variable

값을 저장하는 메모리 영역

  • Ansible은 프로그래밍 언어 X but 일부 프로그래밍 언어 특징 가짐
    => 가장 중요한 특징 中 1은 변수 대체 (variable substitution)

playbook 변수 정의

vars 섹션에 key (변수 이름)와 value(값) 정의

play에서 사용가능한 변수, key:value 형식으로 정의

  • vars
    key_file: /etc/nginx/ssl/nginx.key

vars_files 섹션을 이용하여 변수로 구성된 파일 지정 가능

중요 정보가 포함된 변수를 분리하여 관리

  • nginx.yml
    변수 저장 파일
    key_file: /etc/nginx/ssl/nginx.key
  • vars_files
    playbook의 vars_files 섹션
    • nginx.yml

변수 내용 출력

  • debug 모듈 사용
  • msg 파라미터 사용하여 변수 내용 출력
  • 변수 내용을 사용하고 할 때는 "{{ 변수명 }}" 형식으로 사용
  • debug 모듈을 이용하여 변수 출력시 msg="{{ 변수명 }}" 형식으로 사용해야 변수 내용 출력 가능

Task 결과 변수 저장

  • task 동작 결과에 따라 변수를 설정할 때는 모듈을 호출시 register 절을 사용하여 변수 생성
- name: create directory
      file:
        path: "{{ file_path }}"
        state: directory
      register: result
      ignore_errors: true 
  • register Supported parameters include: _raw_params, _uses_shell, argv, chdir, creates, executable, removes, stdin, stdin_add_newline, strip_empty_ends, warn
  • error 발생해도 무시하고 계속 실행하고자 한다면 ignore_errors: true 설정
  • 변수를 활용하여 Playbook 동작을 동적으로 수행
ansible-playbook dir_manage.yml -i ./hosts -e "host_names=private file_name=/home/ec2-user/work/temp"

팩트 facts

managed node에 대한 정보

  • Ansible Playbook을 실행할 때 첫번째 수행 task가 managed node의 정보를 갖는 팩트를 수집하는 task
  • Query : Ansible 팩트를 수집할 때 managed node에 연결해서 managed node에 대한 모든 종류의 세부 정보, 해당 정보는 ansible_facts 변수에 저장됨

gather_facts 속성 : 팩트 수집 유무 결정

gather_facts: True

팩트 수집, default

gather_facts: False

팩트 수집 중단

Ad-hoc 명령으로 팩트 정보 확인

ansible <host 패턴> -m setup

전체 팩트 정보 확인

ansible <host 패턴> -m -a "<filter=하위 facts key> ... "

특정 key 팩트 정보 확인

ansible_fact 변수의 특정 key 접근 방법

"{{ ansible_fact[ 'key 이름' ] }}"

3. TIF

오늘 실습할 때 디렉토리 매니징 부분에서 특정 한 호스트만 집어서 실행했을 때는

ansible-playbook dir_manage.yml -i ./hosts -e "file_name=work2"

무슨 디렉토리를 갑자기 스킵이니 뭐니 해서 아무 반응도 일어나지 않아서 당황스러웠다.
그다음 같은 yaml 파일에서 호스트도 변수화해서 사용자 측에서 입력받는 것으로 바꾸고 나서

ansible-playbook dir_manage.yml -i ./hosts -e "host_names=managed file_name=work3"

이와 같이 명령어를 입력했을 땐 또 정상적으로 잘 작동되더라.
이전 코드와 큰 차이는 없지만 도대체 어떤 원리로 처음껀 스킵하고 나중껀 멀쩡히 되는지 잘 모르겠다.

0개의 댓글