[구름 k8s] TIL 2-3-3

Peppie·2022년 9월 21일
0
post-thumbnail

1. 모듈 이해

참고

  • 간단하게 ansible에서 사용하는 명령어
  • 모듈은 하나의 작은 프로그램
  • ansible을 이용하여 managed node에 대하여 구성 관리를 수행하는 실질적인 동작 수행
  • namespace 단위로 관리
  • 모듈 지정 방법 : namespace.모듈
  • ansible.builtin namespace는 Ansible 기본 모듈 namespace
    • ansible.builtin namespace의 모듈은 별도로 namespace 지정 없이도 사용가능
  • ansible-doc : ansible document 확인 명령
    • parameters : 해당 모듈을 사용할 때 전달 가능한 파라미터(인수, argument)에 대한 설명, 전달값
    • Attribute : 해당 모듈 속성, 모듈 동작시 사용
    • return value : 해당 모듈을 실행한 후의 결과값
    • Example : 해당 모듈 사용법

    • ansible-doc -l : ansible 모듈의 전체 목록 출력
    • ansible-doc <모듈명> : 모듈명에 대한 도움말 출력
    • ansible-doc -s <모듈명> : 모듈을 사용할 Playbook 구문 출력
  • 기본적으로 멱등성 (Idempotent) 가짐
    Ansible에서는 module, task, Ad-hoc, Playbook이 멱등성 보유

일부 모듈은 멱등성 X

command


멱등성 없는 대표적인 예

ansible <host 패턴> -m command -a <명령>

  • managed node들의 명령줄에서 임의의 명령 실행
  • managed node의 쉘에서 실행 X -> 쉘 작업 수행 X
  • 리다이렉션 및 파이프 기능 사용 불가능
  • managed node에 파이썬이 설치되어 있어야 실행

shell

ansible <host 패턴> -m shell -a <명령>

  • managed node의 쉘을 통해 명령어 처리
  • managed node의 쉘 환경변수 접근 및 리다이렉션 또는 파이프 기능도 사용 가능
  • managed node에 파이썬이 설치되어 있어야 실행

raw

  • 모듈 하위 시스템을 거치지 않고 원격 쉘을 사용하여 직접 명령 실행
  • 파이썬 설치 불가능한 시스템에서 유용한 모듈
  • managed node에 파이썬을 설치하는데도 유용한 모듈
  • Linux 기본 조건을 만족 X 또는 SSH가 없는 환경에서 사용

중요 모듈

user 모듈

ansible <host 패턴> -m user -a <명령> --become

사용자 추가/삭제 관리 모듈

name 파라미터

추가/삭제할 사용자 이름

state 파라미터

  • present : 생성, default
ex) ansible managed -m user -a "name=worker state=present" --become -i ./hosts
  • absent : 소멸
ex) ansible managed -m user -a "name=worker state=absent" --become -i ./hosts

yum 모듈

ansible <host 패턴> -m yum -a <명령> --become

RedHat 배포판에 패키지 관리 명령인 yum에 대한 모듈 (유사 모듈: apt, dnf)

ex) ansible host1 -m yum -a "name=httpd state=present" --become -i ./hosts
-> httpd (apache2) 설치 의미

name 파라미터

설치/삭제할 패키지 이름

state 파라미터

  • present, installed : 설치
  • latest : upgrade
  • absent, remove : 삭제

service 모듈

ansible <host 패턴> -m service -a <명령> --become

시스템 서비스(데몬 프로세스)에 대한 시작/종료/재시작 등의 기능 모듈 제공 (유사 모듈: systemd)

ex) ansible host1 -m service -a "name=httpd state=started" --become -i ./hosts

name 파라미터

서비스 이름

state 파라미터

  • started : 시작
  • stopped : 중지
  • restarted : 재시작
  • reloaded : 재로드

copy 모듈

제어 노드 (source 측)에서 managed node (destination 측)로 파일 복사 (전송)

src 파라미터

복사 (전송)할 파일 이름 (경로 포함)

dest 파라미터

복사 (전송)될 위치

2. YAML 이해

YAML

'YAML Ain't Markup Language' 라는 의미

  • 데이터 표현 (주로 선언 정보 or 환경설정 정보 기술) 목적으로 사용하는 scipt 형식
  • Ansible에서는 playbook을 작성할 때 항상 YAML 형식으로 작성
  • Ansible에서 활용하는 YAML 문법
  • Ansible에서 작성하는 playbook 파일 확장자 : .yml

파일 시작

  • Ansible playbook에서 사용하는 YAML 파일 시작은 -(대시) 기호 3개(---)로 구성
  • playbook 최상단에 표시, 생략 가능 but 대부분 작성

파일 종료

  • playbook 파일 끝 표시는 ... 으로 표시
  • 생략 가능 (실제로 주로 생략)

주석 comment

  • 설명 정보
  • ' # '

데이터 (하나의 값) 표현을 위한 자료형

문자열

일반적인 모든 자료 형태
YAML 문자열을 " (따옴표)로 묶을 필요 X but 정 필요하다면 " (따옴표)로 묶어서 사용 가능

boolean

참/거짓 , yes/no와 같은 둘 중의 하나의 상태 표시 => True/False로 해석
YAML은 Native Boolean 타입

Collection : 여러개의 데이터 저장

리스트 list

파이썬 언어의 리스트 자료형과 유사, YAML에서는 시퀀스 sequence라고 부름

  • 리스트는 - (대시)로 구분
  • [ ] 묶는 인라인 (inline) 포맷 지원

딕셔너리 dictionary

파이썬 언어의 dict 자료형과 유사, YAML에서는 매핑 mapping이라고 부름

  • k( key ):v( value ) 형식
  • { } 묶는 인라인 (inline) 포맷 지원

라인 폴딩 line folding

파일 콘텐츠를 보기좋게 관리하기 위해 여러 라인에 나눠 표기할 때 사용,
' > ' 문자로 라인 폴딩을 사용해 표현

내용의 각 단계(level)에 대한 표현을 스페이스(space)를 이용하여 표현

  • 단계 표현을 위한 들여쓰기(indentation)은 스페이스 2칸을 사용
  • 탭 (tap)을 사용하면 오류 발생

3. Playbook 이해

Playbook

인벤토리에 정의된 managed node에서 무엇을 해야 할 것인가 (서버 구성 정보)를 정의한 내용

  • 자동화 절차를 기술한 코드 파일
  • YAML 포맷으로 표현
  • 설정이나 프로세스에 대한 모델 정의를 표현한 최소한의 문법으로 구성
  • 목표 : managed node 그룹을 잘 정의된 Ansible 내에서 Task로 불리는 역할 (role)에 매핑

Playbook 파일

  • 파일명에 대한 특별한 규칙 X
  • 임의의 이름으로 playbook 파일 작성하고 확장자는 .yml 부여

Playbook 실행

ansible-playbook [옵션] <playbook 파일명>

ex) ansible-playbook ping-test.yml -i ./hosts
  • -i <인벤토리 파일명> : 사용자가 지정한 위치의 인벤토리 파일 사용
  • -e <추가 변수> : 추가 변수 지정, key=value 형식

Playbook 구조

playbook -play -task 구조

ping-test.yml
---
- name: ping test
  hosts: managed
  tasks:
    - name: ping
      ping:
    - name: current directory
      shell:
        cmd: pwd
- name: test
  hosts: public
  tasks:
    - name: ping
      ping:

playbook

managed node에 적용할 코드 집합

play

한 번에 일괄적으로 수행할 작업 단위; task 모음

task

실제 수행할 작업 내용

4. TIF

Ansible 실습 과정 중에 managed node에 원격으로 httpd 설치 완료 후 어느 순간부터 ansible 명령어를 입력해도 계속 로딩만 될 뿐, 실제 실행으로까지 이어지지 않는 일이 발생했다.

이 문제를 해결하려고 제어 노드 및 managed node 재부팅 그리고 VS code 상에서의 ssh 재연결을 여러번 시도해도 해결될 기미가 보이지 않았다....가 우연찮게 해결됐다.


제어 노드 내의 Ansible 관련 작업 폴더 안의 hosts 파일 안에서 managed node의 보다 원할한 다운로드와 설치를 위해 ansible_python_interpreter 값 변경 후 이를 설명하는 주석을 해당 코드 바로 옆에 달았다가 그 부분까지 읽히는 바람에 그렇게 된 것 같다. 이후 별도의 행에 주석을 옮긴 후로는 정상적으로 작동 완료.

아직까진 위 부분만 제외하고는 큰 문제는 없지만 앞으로 얼마나 빡빡해질지는 상상만 해도 오싹하다. 전반적으로 대학시절 배웠던 XML하고 유사한 성격인 것 같다. 이는 강사님께서도 언급하셨던 부분이기도 하고, 실제로 기존 XML의 단점을 보완한 성격인게 JSON이랑 YAML이라나 뭐라나.

0개의 댓글