클러스터 인프라 노트

Ryu·2022년 5월 17일
0

클러스터 코드로 관리하기

여러 개의 서버로 구성된 클러스터를 인프라 레벨에서 관리하기 위한 툴 알아보기.

Ansible

파이썬 기반의 여러 서버의 환경을 구성하기 위한 도구.

기존에는 환경 설정을 위한 스크립트를 각 노드에서 돌려야했지만 앤서블을 사용하면 여러 노드들에 동시에 동일한 환경을 배포할 수 있다.

당연히 itempotent 하다.

인벤토리

hosts(.ini)파일. 어떤 서버들이 대상이냐?

서버를 그룹별로 관리할 수 있고, 컨피규레이션에 필요한 변수를 설정할 수 있다.

플레이북

무엇을 수행할 것인지? Yaml로 작성.

아래처럼 모듈을 구성하고, 각 모듈의 실패 조건을 설정할 수 있다.

---
- hosts: kube_provision
  remote_user: ruser|string
  become: yes
  become_method: sudo
  tasks:
 
  - name: 1 OS version
    debug:
      msg: " {{ ansible_distribution }} {{ ansible_distribution_version }} {{ ansible_kernel }}"
    failed_when: ansible_distribution != 'Ubuntu' or ansible_distribution_version != '20.04' or ansible_kernel != '5.4.0-59-generic'
    ignore_errors: yes

Terraform

앤서블과 비슷하다. Go 기반이고 HashiCorp가 만듦.

AWS나 구글 등 퍼블릭 클라우드를 설정할 수 있어서 인기가 좋은 것 같다.

JSON을 지원하기도 하지만 기본적으론 HCL (HashiCorp Language)가 기본이다.

과정

테라폼 코드 작성 (HCL) → Plan (선언된 리소스 생성 가능한 지 확인) → Apply (실제 적용)

Provider

테라폼이 AWS 같은 외부 서비스에 대해 동작하고자 할 때, 외부 서비스를 연결해주는 모듈이 필요함.

AWS 뿐만 아니라, RabbitMQ, Docker, Github 등의 서비스도 테라폼 프로바이더가 있다.

읽어보기: https://www.44bits.io/ko/post/terraform_introduction_infrastrucute_as_code#%EB%93%A4%EC%96%B4%EA%B0%80%EB%A9%B0-infrstructure-as-code-%EB%8F%84%EA%B5%AC-%ED%85%8C%EB%9D%BC%ED%8F%BCterraform

클러스터 스토리지, 네트워크 서비스

Rook Ceph

  • Rook
    • 쿠버네티스를 위한 스토리지 오케스트레이터
    • File, Block, Object stroage를 관리할 수 있다.
    • 기본적으로 기존 스토리지 관리자가 하던 일들을 자동화 해주는 도구이다.
  • Ceph
    • Rook이 스토리지 관리를 위해 사용하는 가상 스토리지.

NetApp Trident

넷앱이 개발한 스토리지 오케스트레이터. Rook과 동일한 역할을 한다.

Velero

클러스터 백업을 위한 도구.

Kubernetes 오브젝트에 대해서 압축 파일을 만들어 클라우드에 저장한다. PV에 대해선 snapshot을 만들어 백업할 수도 있다.

Calico

Tigera가 만든 네트워킹, 네트워크 시큐리티 솔루션.

네트워크 policy들을 정해서 내가 원하는 네트워크만 허용할 수 있다.

예를 들어 Pod에서 다른 Pod의 웹서비스(특정 포트)로 접근할 수 없게 한다.

대신, 특정 포트에 대한 엑세스를 설정해놓으면 다른 모든 포트는 다 블락되는 문제가 있었던 듯. 포트 레인지마다 설정해줘야 함.

0개의 댓글