[CloudClub] 90DaysOfDevOps 추가

박서연·2023년 9월 21일

Cloud

목록 보기
8/13
post-thumbnail

2주차: Docker & K8S

서비스 매쉬 & 이스티오

  1. 배경
    ✔️ 쿠버네티스가 등장한 이후 최근 많은 기업이 MSA(Microservices Architecture)를 채택 => 하나의 애플리케이션에서 동작하는 모놀리식 아키텍처와 달리, MSA는 나누어진 서비스와 인스턴스 수만큼 관리 대상이 급격히 증가
    ✔️ 서비스 간 복잡한 연결 구조 때문에 장애 추적이 어렵고, 장애가 발생한 서비스로 인해 타 서비스를 호출하는 로직이 수행되지 않는 장애 전파 현상 발생
  1. 서비스 메쉬 (Service Mesh)
    ⚡️ 서비스 메쉬 아키텍처는 MSA의 트래픽 문제를 보완하는 마이크로서비스 간 커뮤니케이션 인프라
    ⚡️ 마이크로서비스 간의 직접 통신을 하지 않게 되어 위의 문제 해결 가능
    ⚡️ 사이드카 패턴 : 모든 응용 프로그램 컨테이너에 사이드카 컨테이너를 추가하여 배포. 사이드카는 서비스에 들어오거나 나가는 모든 네트워크 트래픽 처리. 서비스가 타 서비스를 직접 호출하는 것이 아니라 프록시(proxy)를 통해 호출 => 대규모의 마이크로서비스 환경이더라도 별도 작업 없이 서비스 연결뿐만 아니라 로깅, 모니터링, 보안, 트래픽 제어 가능
  1. 이스티오 (Istio)
    = 쿠버네티스 기반의 서비스 메쉬
    서비스 메쉬의 기본 아키텍처는 위에서 말한 바와 같이 서비스 간의 직접 호출이 아닌 사이드카 패턴의 프록시를 배치해 통신하는 것. 이러한 서비스 메쉬 기술의 대표적인 구현체가 이스티오

🔻 부하분산과 트래픽 관리
🔻 보안
🔻 모니터링

  1. 서비스 메쉬 적용시 고려사항
    복잡성 + 사이드카 컨테이너 수 증가 + 기술력 미성숙

https://www.samsungsds.com/kr/insights/mesh.html

3주차: Learn Infrastructure as Code & Automate Configuration Management

HashiCorp

Ansible - 인벤토리

❓ 인벤토리란 Ansible이 인프라에 존재하는 여러 호스트를 관리하는데, 이런 호스트의 목록 또는 그룹을 지정하는 파일

기본 인벤토리 파일

/etc/ansible/hosts

명령어로 확인 가능 => head -10 /etc/ansible/hosts
명령어를 통해 기본 인벤토리 파일의 처음 10줄을 출력하도록

1. 정적 인벤토리

✔️ 사용자가 직접 INI 또는 YAML 형식으로 파일 작성

🔻 기본 그룹

그룹속한 호스트
all모든 호스트 포함
ungrouped그룹에 속하지 않는 모든 호스트 포함

🔻 여러 그룹에 속한 호스트

🔻 중첩 그룹을 이용한 인벤토리 단순화

INI 형식

# [all] 은 생략 가능
mail.example.com
192.168.56.51

[webservers]
foo.example.com
bar.example.com

[dbservers]
one.example.com
two.example.com
three.example.com


# 여러 그룹에 속한 호스트
[east]
foo.example.com
one.example.com
two.example.com

[west]
bar.example.com
three.example.com


# 중첩 그룹을 이용한 인벤토리 단순화
[prod:children]
east

[test:children]
west

YAML 형식

all:
  hosts:
    mail.example.com:
      ansible_host: 192.168.56.51
  children:
    webservers:
      hosts:
        foo.example.com:
        bar.example.com:
    dbservers:
      hosts:
        one.example.com:
        two.example.com:
        three.example.com:
    east:
      hosts:
        foo.example.com:
        one.example.com:
        two.example.com:
    west:
      hosts:
        bar.example.com:
        three.example.com:
    prod:
      children:
        - east
    test:
      children:
        - west

2. 동적 인벤토리

✔️ 관리 노드의 변화가 많을 경우 정적 인벤토리로 호스트를 관리하는 것은 어려움 => 클라우드 공급자, LDAP 및 CMDB 등 동적 외부 인벤토리 시스템에서 호스트의 목록을 동적으로 가져올 수 있음

동적 인벤토리 연결 방법
1. 인벤토리 플러그인
2. 인벤토리 스크립트

💡 가능하면 인벤토리 스크립트보다 인벤토리 플러그인 사용 권장

동적 인벤토리 플러그인

AWS EC2 인스턴스의 목록을 가져오는 동적 인벤토리 플러그인 사용법

  1. Python용 AWS SDK boto3 패키지 설치
    sudo apt install -y python3-boto3

  2. 인벤토리 구성 파일

# aws ec2 ansible dynamic inventory plugin
plugin: aws_ec2

# set aws_access_key and secret_key.
aws_access_key: [AWS ACCESS KEY]
aws_secret_key: [AWS SECRET KEY]

# set the regions.
regions:
  - [AWS REGIONS]
  1. AWS EC2 동적 인벤토리 플러그인 테스트
ansible-inventory -i test_aws_ec2.yaml --graph

@all:
  |--@aws_ec2:
  |  |--ec2-34-204-0-109.compute-1.amazonaws.com
...

0개의 댓글