220412 Today I Learned
일지
미니프로젝트 리뷰가즈아ㅏㅏ
사실 내가 할 수 있는것은 그렇게 많지 않은데,
기대치를 높여두고, 그에맞게 수행하고,
그로인해 다시한번 기대치가 높아지고, 그에맞게 수행하고,
언젠가는 터지겠지. 그때까진 열심히하자.
오늘의 할일
- 220412 TIL 작성
- Ansible 공부자료찾기
- 실습 진행사항 복기
- yaml 공부?
주요 키워드
Ansible Architecture
inventory
추가로 정리해야할 부분
수업 정리
- Ansible 아키텍쳐 구성 내용
- 시스템 유형으로 컨트롤 머신과 관리 노드가 있음
- 컨트롤 로드에 Ansible이 설치되며, 관리 노드들은 컨트롤 머신에 의해 유지되거나 관리됨
- 관리 노드들은 인벤토리 파일에 나열되어야 하며, 여기에는 호스트이름 또는 IP 주소로 저장
- 인벤토리에 각 관리 노드들의 기능별로 그룹화 시켜서 저장도 가능
- 시스템 관리자는 컨트롤 로드에 로그인하여 플레이북 또는 원격 전송 명령을 사용하여 관리 노드를 제어할 수 있고, 이 때 인벤토리에 저장된 관리 노드들을 패턴 형식으로 지정하여 제어할 수 있음
- 컨트롤 로드는 기본적으로 SSH를 사용하여 관리 노드와 통신
- 플레이북에서 참조한 모듈은 관리 노드에 복사되며, 관리 노드에서 실행
- 사용되는 모듈의 종류로는 코어(core) 모듈과, 사용자 지정 모듈 등
- Ansible 구성 파일
- Ansible의 작동 방식을 구성하는 파일
- 인벤토리 파일의 위치, 관리 노드에 연결하는 방법, 연결 한 후 작동 방법 등 무수히 많은 구성을 지정할 수 있음
- 기본 Ansible 구성 파일의 위치는 /etc/ansible/ansible.cfg
- Ansible 구성 파일 우선 순위
- ANSIBLE_CONFIG 환경 변수
- 현재 디렉토리의 ansible.cfg
- 홈 디렉토리의 ~/.ansible.cfg
- /etc/ansible/ansible.cfg
- 우선 순위가 높은 파일에 정의된 값이 이전 정의된 값보다 우선함
- Ansible 작동 방식 제어 우선 순위
- Ansible 작동 방식을 제어하기 위해 Ansible 구성 파일 외에도 ansible 명령의 옵션, 플레이북 키워드, 변수를 이용해 동작을 제어할 수 있음
- -e 옵션에 지정한 변수
- 변수
- 플레이북 키워드
- 명령의 옵션
- Ansible 구성 파일
- Ansible 작동 방식을 제어하기 위해 Ansible 구성 파일 외에도 ansible 명령의 옵션, 플레이북 키워드, 변수를 이용해 동작을 제어할 수 있음
- 인벤토리
- Ansible은 인프라에 존재하는 여러 호스트를 관리함
- 호스트의 목록 또는 그룹을 지정한 인벤토리 파일이 필요하며 인벤토리가 정의되면 패턴을 사용하여 Ansible을 실행할 노드 또는 그룹을 선택함
- 기본 인벤토리 파일은 /etc/ansible/hosts 이며, -i 옵션을 사용하여 다른 인벤토리 파일을 지정할 수 있음
- 인벤토리 파일은 일반적으로 INI 파일 형식을 가지고 있으며, YAML 형식으로 지정할 수 있음
- 정적 인벤토리
- 사용자가 직접 INI 또는 YAML 형식으로 파일을 직접 작성
- 기본 그룹
- all : 모든 호스트 포함
- ungrouped : 그룹에 속하지 않은 모든 호스트 포함
- 여러 그룹에 속한 호스트
- 각 호스트는 하나 이상의 그룹에 속할 수 있음
- 중첩 그룹을 이용한 인벤토리 단순화
- 동적 인벤토리
- 가상화, 클라우드 및 컨테이너 환경과 같이 시간이 지남에 따라 관리 노드의 변화가 많은 경우에 사용
- 클라우드 공급자, LDAP 및 CMDB 등 동적 외부 인벤토리 시스템에서 호스트의 목록을 동적으로 가져올 수 있음
- 연결 방법
- 인벤토리 플러그인
- 인벤토리 스크립트
- AWS 에서 연결방법을 사용하기 위해서는 파이썬용 AWS SDK boto 패키지를 설치해야 함.
- 인벤토리 확인
- ansible 또는 ansible-inventory 명령으로 확인할 수 있음
- 기본 인벤토리 파일이 아닌 경우 -i 또는 –inventory 옵션을 사용할 수 있음
- 패턴
- Ad-hoc 명령 또는 플레이북을 실행할 때 작업을 실행할 관리 노드 또는 그룹을 지정할 때 패턴을 이용해 관리 노드를 선택
- 패턴은 단일 호스트, IP 주소, 인벤토리 그룹을 참조할 수 있고, 집합, 와일드카드, 정규화 표현식 등 사용이 가능
- 모듈
- 모듈은 Ansible을 이용해 관리 노드에 작업을 실행하는 핵심 요소
- 모듈은 Python 코드로 이루어져 있으며, /usr/lib/python3/dist-packages/ansible 경로에 있음.
- ansible-doc 명령을 이용해 모듈의 목록을 확인하고, 모듈의 사용법을 확인할 수 있음
- Ad-Hoc 명령
- 플러그인 확인 명령어
- Ansible ad-hoc 명령은 하나 이상의 관리 노드에 단일 작업을 실행하는 임시 명령
- 임시 명령은 거의 반복하지 않는 간단한 작업에 주로 사용
- 플러그인 확인 명령어
-
Intro
-
YAML is popular
- Configuration files all written in YAML
- Widely use format
- For diff. Devops tools and applications
- Docker, Kubernetes, Ansible, Prometheus, etc…
-
What is YAML?
- YAML is a data serialization language, > Like XML, JSON
-
What is a serialization language? Standard format to transfer data
YAML Ain't Markup Language File extension: .yaml .yml
-
Why learn YAML? YAML Format compared to XML and JSON
YAML Format compared to others
- human readable and intuitive
YAML XML JSON Line Separation
IndentationTags
Angle bracketCurly brackets
{}- Clean, Human Readable form of the 3
💡 YAML is superset of JSON: Any valid JSON file is also a valid YAML file
-
YAML Use Cases
Docker compose file, Ansible, Kubernetes, Prometheus -
YAML Syntax
- Spaces(Indetation) should be exactly same for each attributes
-
Indenting well or install a yaml plugin/extension on ur preferred IDE
- Key-Value Pair; Basic cpnt. of YAML
- Comments; b2w attrb. OR anywhere to make YAML readable, understandable
- Object; By indenting, individual k-v pair into obj
- Lists; By using dash-, stay at same level
- Boolean; value like true or false / yes or no / on or off
- More of lists; Can put lists in list > list of objects
Can use Square brackets[] like list
-
Real Kubernetes YAML Configuration Example
- For Real example
- Example of App containers on k8s
- Multi-line strings
- File contents 작성할때 사용
multilinestring: "rather than using carrage return like this \n" multilinestring: | "You can use the pipe sign to express the contents of the file so all of these will be interpreted as multiline inserts" mutillinestirng: > "those are super long text. but it should be written in a one sentence. So those 3 lines will be interpreted as one sentence."
-
Environment variables
- 만약 $처럼 특정하게 정해진 변수 기호를 활용한다면 pod 외부에서 pod 내부로 접속하는 식으로 사용가능
- inside of YAML file
- mysql -h 127.0.0.1 -u root -p$MYSQL_ROOT_PASSWORD -e ‘SELECT 1’
- YAML에서 환경변수를 사용하는것은 잘알려져 OR 잘정리되어 있지않음(isn’t well documented).
-
Placeholders
- Instead of directly writing the values,
- Define placeholder. by double curly brace {{}}
metadata: name: \{\{ .Values.service.name }} spec: selector: app: \{\{ .Values.service.app }} ports: - protocol: TCP port: \{\{.Values.service.port }} targetPort: \{\{ .Values.service.targetport }}
- Multiple YAML documents
- In 1 file, define multiple cpnts
- Separates by using — three dashes
- YAML and JSON in Kubernetes
- you can use yaml and json
- but I(presenter) prefer yaml
Leave a comment