상세 컨텐츠

본문 제목

25.03.21. Ansible

AWS CLOUD SCHOOL 9기

by AI Engineer crystal 2025. 3. 21. 13:34

본문

Ansible

  1. 앤서블 본체:
    • 앤서블 소프트웨어 자체를 의미합니다. 앤서블은 서버/클라이언트 구조가 아닌, 별도의 데몬 프로세스(side car)를 두지 않고 필요한 작업을 실행할 때마다 실행됩니다.
  2. 인벤토리:
    • 인벤토리는 서버 접속 정보를 정의하는 파일입니다. 여러 서버를 그룹화하거나 개별 서버에 대해 파라미터를 설정할 수 있습니다. 인벤토리를 통해 앤서블이 관리할 대상 서버 목록과 각 서버에 대한 정보를 정의할 수 있습니다.
  3. 모듈:
    • 앤서블에서 실행되는 하나하나의 명령을 모듈이라 합니다. 모듈을 통해 다양한 작업을 자동화할 수 있습니다. 예를 들어:
      • OS 작업: 패키지 설치, 서비스 관리, 사용자 관리 등
      • 파일 작업: 파일 복사, 편집, 템플릿 처리
      • 데이터베이스 작업: MySQL, PostgreSQL 사용자 및 테이블 관리
      • 클라우드 서비스 작업: AWS, Azure, GCP, OpenStack 등
      • 네트워크 장비 작업
  4. 플레이북:
    • 플레이북은 앤서블에서 실행할 작업들의 집합을 정의한 스크립트입니다. 플레이북은 YAML 형식으로 작성됩니다. 이를 통해 사용자는 필요한 작업들을 순차적으로 정의하고 실행할 수 있습니다. 프로그래밍 언어 대신 YAML을 사용하여 구성됩니다. 플레이북을 통해 명령과 설정을 자동화하고 일관되게 실행할 수 있습니다.

Ansible의 기본 요구사항:

  • SSH: Ansible은 기본적으로 원격 호스트에 접근하기 위해 SSH를 사용합니다. SSH를 통해 대상 서버에 명령을 보내고, 상태를 확인하며, 패키지를 설치하거나 설정을 변경할 수 있습니다.
  • Python: Ansible은 대상 시스템에 Python이 설치되어 있어야 작동합니다. Ansible의 많은 모듈들이 Python 기반으로 작동하기 때문에 Python이 필수입니다. 대부분의 리눅스 시스템에 기본적으로 Python이 설치되어 있지만, 일부 경량화된 시스템이나 컨테이너에서는 Python이 없을 수 있습니다. 이때, Ansible은 Python을 원격 시스템에 설치하는 명령을 실행할 수 있습니다.

Bastion Host:

  • Bastion Host는 원격 시스템에 접속하는 중앙 서버 역할을 합니다. 주로 내부 네트워크에 위치한 서버에 접근할 때 외부에서 직접 접근할 수 없으므로, Bastion Host를 통해 SSH 연결을 진행하는 방식을 사용합니다.
  • Ansible을 Bastion Host에 설치하여, 다른 서버(예: Kubernetes 클러스터의 노드들)로 자동화 작업을 수행하는 구조가 일반적입니다. Bastion Host는 내부 시스템에 접근할 수 있는 권한을 가지고 있으며, 외부와 내부 네트워크 사이의 중개 역할을 합니다.

Docker와 Kubernetes에서의 Ansible 사용:

  • Docker 컨테이너Kubernetes(K8s) 환경에서는 Ansible을 이용해 여러 컨테이너나 노드에 대한 설정을 자동화할 수 있습니다.
  • Sidecar 패턴:
    • Docker나 Kubernetes에서 Sidecar 패턴은 주로 보조 역할을 하는 컨테이너를 말합니다. 예를 들어, 앱 컨테이너와 함께 실행되는 로깅, 모니터링 또는 네트워크와 관련된 부가적인 작업을 담당합니다.
    • Ansible은 이러한 환경에서도 활용될 수 있는데, 특히 Kubernetes 클러스터 내에서 컨테이너를 배포하거나 설정을 자동화하는 데 유용합니다. Ansible이 Bastion Host에서 실행되면서 Kubernetes API 서버와 통신하거나 SSH를 통해 컨테이너 내부에 접근하여 작업을 처리할 수 있습니다.

Ansible과 Kubernetes 환경에서의 배치 예시:

  1. Bastion Host에서 Ansible 실행:
    • Bastion Host에 Ansible을 설치하고, 이를 통해 내부 네트워크에 위치한 Kubernetes 클러스터의 노드들 또는 Docker 컨테이너에 대해 작업을 자동화합니다.
    • 예를 들어, Ansible playbook을 작성하여 Kubernetes 클러스터에 배포할 애플리케이션을 설치하거나, 특정 작업을 수행할 수 있습니다.
  2. Bastion Host를 통한 SSH 연결:
    • 외부에서 Bastion Host로 SSH 접속 후, Ansible을 통해 내부의 다양한 시스템들에 접근하여 자동화 작업을 처리합니다.
    • 예를 들어, K8s 클러스터 내에서 여러 노드에 대한 설정을 변경할 때 Bastion Host를 통해 SSH로 접근하여 Ansible Playbook을 실행할 수 있습니다.

설치 및 실행 흐름:

  1. Bastion Host에 Ansible 설치:
    • Bastion Host는 외부 네트워크와 내부 네트워크를 연결하는 역할을 합니다. Ansible은 Bastion Host에서 실행되며, 해당 시스템에서 KubernetesDocker에 배포할 작업을 자동화합니다.
    • 예를 들어, Bastion Host에서 Ansible을 사용하여 Kubernetes 클러스터에 앱을 배포하거나, 시스템 설정을 자동으로 관리하는 방식으로 활용됩니다.
  2. Python과 SSH 설정:
    • Ansible은 SSH를 통해 원격 시스템에 접근하고, 대상 시스템에서 Python이 설치되어 있어야만 제대로 작동합니다. 대부분의 리눅스 시스템에서는 Python이 기본적으로 설치되어 있지만, 경우에 따라 Python을 설치하거나 Python 환경을 설정해야 할 수도 있습니다.
  3. Kubernetes 클러스터 내에서 Ansible 사용:
    • Kubernetes 클러스터 내의 각 노드에 대한 작업을 Bastion Host에서 Ansible을 이용해 자동화합니다. 예를 들어, 클러스터의 Pod 배포를 자동화하거나, 각 노드의 패키지 관리, 설정 변경 등을 처리할 수 있습니다.
    • 또한, Ansible을 사용하여 K8s 클러스터의 서비스컨테이너를 관리할 수도 있습니다.

관련글 더보기