42 Seoul: ft_services: Introduction

Chaewon Kang·2021년 1월 18일
0

42 seoul

목록 보기
8/17
post-custom-banner

ft_services

네트워킹, 시스템 관리 프로젝트입니다.

Introduction

ft_services는 Kubernetes(쿠버네티스)로 당신을 안내합니다. 당신은 쿠버네티스를 통해 클러스터 관리 및 배포를 배우게 될 겁니다. 네트워크를 가상화하고, "클러스터링"하게 될 거에요.

General Instructions

  • srcs라는 폴더에 당신의 서버에 대한 모든 필요한 설정 파일들을 담으세요.
  • setup.sh는 리포지터리의 루트에 위치해야 합니다. 이 파일은 당신의 모든 어플리케이션을 셋업할 겁니다.
  • old, new practices 모두를 요구합니다. 도커, 쿠버네티스, 그리고 이 프로젝트를 위한 모든 유용한 문서들을 많이 많이 읽을 것을 권합니다.

Mandatory Part

서비스로서의 인프라스트럭처(Infrastructure as a Service, IaaS)는 서버, 스토리지, 네트워크를 필요에 따라 인프라 자원을 사용할 수 있게 클라우드 서비스를 제공하는 형태이다. 대표적인 기술로는 서버 가상화, 데스크톱 가상화 등이 있다. - 위키피디아

해당 프로젝트는 다양한 서비스들에 대한 인프라스트럭쳐를 세팅하는 것으로 이루어져 있습니다. 이를 위해 쿠버네티스를 이용해야 합니다. 당신은 멀티 서비스 클러스터를 세팅해야 할 겁니다. 각각의 서비스는 지정된 컨테이너에서 실행되어야 합니다. 각각의 컨테이너는 반드시 서비스와 관련된 이름을 가져야 하고, 퍼포먼스와 관련된 이유로, 컨테이너들은 Alpine Linux를 이용해서 빌드되어야 합니다.
또한 setup.sh에서 호출될 도커파일을 작성해야 합니다. 당신이 사용할 이미지들을 빌드해야 합니다. 이미 빌드된 이미지를 사용하거나, DockerHub 같은 기존의 서비스들을 이용하는 것은 금지되어 있습니다.

그리고 다음의 것들을 세팅하세요.

  • 쿠버네티스 웹 대시보드. 클러스터를 관리하는 데에 도움이 될 것입니다.
  • 서비스의 외부 접근을 관리하는 로드 밸런서. 당신의 클러스터로 접근하는 유일한 엔트리 포인트가 될 겁니다. 서비스와 연관된 포트를 반드시 유지하세요(IP:3000 for Grafana etc). 로드밸런서는 단일 ip를 가지게 될 겁니다.
  • 포트 5050번을 수신하는 워드프레스 웹사이트. MySQL 데이터베이스와 함께 동작합니다. Php-MyAdmin은 각각의 nginx 서버를 필요로 합니다. 로드밸런서는 이 서비스에 바로 리디렉트 될 수 있어야 합니다.
  • 포트 80번과 443번을 수신하는 nginx 서버 컨테이너. 80번 포트는 http 프로토콜 안에 있어야 하고, 타입 301의 경우 https 프로토콜 내의 443번 포트로 리디렉션 되어야 합니다. http 에러 발생이 아닐 경우, 표시되는 페이지가 무엇이든 상관 없습니다. 이 컨테이너는 IP:WPPORT로의 redirect 307을 만드는 /wordpress 라우트로의 액세스를 허용해야 합니다. 또, IP:PMAPORT로의 리버스 프록시와 함께 /phpmyadmin 또한 허용해야 합니다.
  • FTPS 서버는 포트 21번을 수신합니다.
  • 3000번 포트에서 동작하는 Grafana 플랫폼. 이는 InfluxDB 데이터베이스와 연결되어 있습니다. Grafana는 당신의 모든 컨테이너를 모니터링 하게 될 거에요. 각각의 서비스별로 하나의 대시보드를 만드세요. InfluxDB와 Grafana는 두 개의 개별 컨테이너에 담겨야 합니다.
  • 두 개의 데이터베이스 컨테이너 중 하나가 충돌하거나 멈추는 경우, 데이터 불변성을 꼭 지키세요.
  • ssh를 이용해 nginx 컨테이너에 접근할 수 있어야 합니다.
  • 모든 컨테이너들에서, 내부 컴포넌트들 중 무엇이라도 충돌하거나 멈추는 경우에는 재시작할 수 있어야 합니다.

서비스에 대한 모든 리디렉션은 로드밸런서를 이용해서 실행되어야 한다는 점을 꼭 기억하세요. FTPS, Grafana, Wordpress, PhpMyAdmin, 그리고 nginx의 종류는 반드시 "LoadBalancer"이어야 합니다. Influxdb와 MySQL의 종류는 반드시 "ClusterIP"이어야 합니다. 다른 엔트리들도 존재할 수는 있지만, 무엇도 "NodePort"여서는 안 됩니다.

Warning

Node Port 서비스를 사용하는 것, Ingress Controller object 또는 kubectl port-forward command 모두 금지되어 있습니다. 당신의 로드 밸런서만이 클러스터에 접근할 수 있는 유일한 엔트리 포인트여야 합니다.

Hint

클라우드 서비스가 제공하는 로드 밸런서를 사용하는 것은 의미가 없습니다. MetalLB를 참고하는 게 더 나을 거에요.

알아야 할 개념들

  • Kubernetes, Kubernetes Web Dashboard
  • IaaS
  • Load Balancer
  • Alpine Linux
  • FTPS Serever
  • Cluster Management, Cluster Deployment
  • Grafana platform
  • Influx DB
  • ClusterIP
  • Reverse Proxy
  • ...

헐...

요구사항이 이렇게나 많은데 프로젝트 기한 1주일, 블랙홀 1주일의 레전드 프로젝트... 첩첩산중이지만 또 잘 해내보자.

profile
문학적 상상력과 기술적 가능성
post-custom-banner

0개의 댓글