0부터 시작하는 가상머신과 네트워크 공부 - DevOps와 Load Balancer
0. 가상화를 하는 이유
- 가상화를 이용하면 IT 대응력, 유연성, 확장성을 높이면서 비용을 대폭 절감할 수 있다. 또한, 가상화의 이점인 워크로드 모빌리티 증가(가상 머신을 옮기는 것), 성능 및 리소스 가용성 향상, 운영 자동화를 통해 IT 관리를 간소화하고 소유 및 운영 비용을 절감할 수 있다
1. DevOps에서 중요한 것
- A. 네트워크
- B. 서버 ( linux -> opensource -> cloudstack, openstack = linux 환경에서 opensource인 openstack을 통해 환경 구축 가능 )
- C. 서버를 관리하기 위한 것들이 필요
- 스크립트 : bash, python, go, php - 대용량 환경에서는 부적합
- Ansible (명세 파일 (yaml)을 통해 구성 정보를 전달하여 작동. Started, Stopped, host:all등을 작성하여 원하는 기능을 작동시키며 멱등성이 적용되있다. 오픈소스 IT 자동화 툴로서, 프로비저닝, 구성 관리, 애플리케이션 배포, 오케스트레이션, 기타 여러 가지 수동 IT 프로세스를 자동화 시켜준다), Terraform ( 오픈 소스 인프라로 루비 사용 )
- 멱등성 : 동작을 보장하는 것으로, 설치 되있는 것/시작한 것/멈춘 것...을 보장하는 것이다. 즉, 이미 동작중인 프로세스를 중복으로 실행하는 것을 방지할 수 있다
- D. 컨테이너 ( 도커 - > Swarm -> K8S ) (Swarm이란 오케스트레이션 툴로 여러 호스트 서버의 컨테이너들을 배포 및 관리를 위한 툴이다)
- 하나의 컴퓨터에서 중복되는 프로그램은 설치하지 못한다. 허나, 컨테이너나 가상머신을 통해 환경을 구성하면 설치 가능하다
- 좌측그림은 가상 머신의 App은 Guest Os ~ Physical Resource까지 전부 거쳐서 가야하므로 성능이 떨어진다. 이는 치명적이다
- 그러므로 우측 그림과 같이 도커의 컨테이너를 사용하면 Host OS의 Kernel을 사용하게 되어 성능 저하가 감소되며, 컨테이너라는 제한된 환경을 통해 그림과 같이 중복된 프로그램을 설치할 수 있다. 이는 가상머신처럼 독립된 공간이기 때문이다
- 각 페이지마다 컨테이너를 만들어 서로 독립적인 공간을 만든다. 독립적이기에 각 페이지는 서로 다른 개발 환경( ex. django, spring )에서 개발을 할 수 있으며, 이 각각의 개발 환경으로 만들어진 페이지는 Key-Value와 같은 방식으로 서로 통신할 수 있다
- AutoScale은 성능을 증가시키는 UP scale과 동일한 SCALE을 추가시켜 늘려주는 OUT scale이 있다. 이는 서버나 하나의 페이지에 트래픽이 증가했다고 했을때 해당 서버나 컨테이너등을 SCALE OUT하여 트래픽을 원할하게 처리해 줄 수 있다
- 오케스트레이션? 오케스트레이션은 컴퓨터 시스템과 애플리케이션, 서비스의 자동화된 설정, 관리, 조정해준다. 컨테이너 오케스트레이션은 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화해준다
- E. 배포 환경
- git은 형상 관리 도구이며, 이는 git과 gitlab이나 github를 사용하여 웹 서버에 페이지를 배포하는 과정이다
- 버전 관리가 가능하며 만약 배포한 버전에 오류가 있다면, 한 단계 전 commit으로 돌려서 새 버전 적용 전 단계로 되돌아갈 수 있으며, 이는 서버가 동작중에서도 가능하다
- 파이프라인을 통해 git에 올리는 것부터 배포까지 자동으로 수행된다
- F. 사용자 Web Console
- 자격증 : 정보 처리 기사 ( 1순위 ), AWS , CKAD 는 따면 좋다
2. Load Balancer
- 한 페이지에 대해 여러대의 서버를 두고, 이 다수의 서버를 관리하기 위해 Load Balancer를 사용한다. Load Balancer는 요청된 트래픽을 서버들에게 나눠서 할당해준다 ( A,B 사용자가 한 페이지에 동시에 접속할 때 A 사용자는 1 서버로, B 사용자는 2 서버로... )
- Network Load Balancer : L4 계층에서 동작, Port에 대한 작업
- Application Load Balancer : L7 계층에서 동작, Data에 대한 작업
- 서버에는 아무나 접속하면 안되므로, 보안 계층인 ACL ( ACCESS CONTORL LIST )을 통해 트래픽 접근을 제어한다
- 보안 그룹을 통해서도 트래픽 접근을 제어할 수 있다