가상화/LAMP(소형 IaC)를 사용하여 서버 설치를 자동화하는 방법은 무엇입니까?

가상화/LAMP(소형 IaC)를 사용하여 서버 설치를 자동화하는 방법은 무엇입니까?

서버 설치를 자동화하는 방법은 무엇입니까? 우리의 요구에 맞는 인프라/시스템은 무엇입니까?

우리는 100개 이상의 VM(주로 LAMP)을 갖춘 10개 이상의 물리적 서버를 보유하고 있습니다. 너무 많지는 않지만 자체적으로 계속 작동할 수 있는 것도 없습니다. 모든 서버에는 KVM 가상화가 있습니다. 우리는 고객을 위해 자주 수정하는 다양한 맞춤형 애플리케이션을 호스팅합니다. 따라서 이것은 확장이 필요한 단일 애플리케이션이 아닙니다. 프로젝트 팀은 고객 및 VM과 직접 협력하며 이는 필수 사항입니다.

우리가 일상적으로 겪는 문제는 VM/머신의 최근 변경 사항을 아무도 제어하지 않기 때문에 재설치가 까다로워지고, 불안정할 위험이 있으며, 사람들이 가능한 한 오랫동안 이를 연기하고, 문제가 시간이 지남에 따라 더 커진다는 것입니다.

최소한 3개월에 한 번씩, 요청 시 재설치 절차를 수립하고 싶습니다. 재설치는 코드 저장소와 백업으로 시작해야 합니다. VM 복제가 아니어야 합니다.

수동으로 수행할 경우 현재 설정에서 3개월마다 약 6개월의 비용이 소요될 것으로 추정됩니다. 어떻게 이 시간을 줄이고 프로세스의 반복성을 높일 수 있습니까?

문제는 이 작업을 자동화하는 데 어떤 소프트웨어가 도움이 될 수 있는지입니다. 최대한 가벼워야 합니다. 자동화된 노드 할당은 필요하지 않습니다. 최대한 자동화하려면 재설치만 하면 됩니다. 우리는 각 재설치에 대해 사람의 감독을 받는다고 가정합니다.

우리 노드는 대부분 1TB가 넘는 구조화된 DB 데이터, 200GB가 넘는 여러 시스템, 약 50개의 소형 맞춤형 VM을 갖춘 두 개의 시스템을 갖춘 LAMP입니다. 각 시스템의 계획된 가동 중지 시간을 쉽게 예약할 수 있으므로 이는 재설치 중 고가용성에 대한 질문이 아닙니다.

재설치를 최대한 자동화하면 됩니다.

답변1

Ansible, Saltstack, Puppet 또는 Chef와 같은 구성 관리 프레임워크가 필요합니다.

이는 구성을 관리하고 적용하는 데 사용하는 도구입니다. 그러나 실제 도구를 선택하는 것은 프로젝트의 사소한 부분입니다.

인프라에 대한 모든 변경 사항이 이 도구를 통해 관리되는 프로세스를 설계하고 배포해야 합니다.

이를 위해서는 다음이 필요합니다.

  • 도구를 사용하도록 사람들을 훈련시키다
  • 도구 없이는 변경할 수 없도록 시스템 아키텍처를 변경합니다.
  • 사람들의 근본적인 작동 방식을 바꾸는 것에 대한 저항을 다루기

소프트웨어 스택 인프라 통합도 고려해야 합니다.

각 VM의 소프트웨어 구성이 조금씩 다른 경우 다음 중 하나를 수행해야 합니다.

  • 다양한 설치에 대한 구성 관리 코드에 중복된 코드가 많습니다.
  • 어떤 구성을 적용할지 선택하는 복잡한 논리

이러한 요소 중 하나로 인해 유지 관리 오버헤드가 많이 추가되고 최종 결과는 현재 상황만큼 고통스러울 수 있습니다.

답변2

클라우드에 API 키가 있나요?

대부분의 클라우드에는 원클릭 LAMP 이미지가 있습니다. 예:

불터:https://www.vultr.com/apps/lamp/

디지털 오션:https://marketplace.digitalocean.com/apps/lamp

리노드:https://www.linode.com/docs/guides/lamp-stack-marketplace-app/

그렇지 않다면 제가 가장 선호하는 것은 VestaCP입니다.https://vestacp.com/install/

그리고https://hestiacp.com/

둘 다 Apache 백엔드, nginx 프런트엔드, MySQL/mariadb/postgres 및 php/php-fpm을 추가합니다. 옵션도 모두 있습니다.

업데이트를 위해 별도의 서버를 만들고, /root/.ssh/authorized_keys분리된 서버에 있는 공통 SSH 공개 키를 삭제합니다. 이 키는 다음과 같이 각 서버에 자동으로 로그인할 수 있습니다.

INSTANCES=(
10.0.0.5
10.0.0.6
10.0.0.7
...
)


for INSTANCE in "${INSTANCES[@]}"; do
    ssh root@${INSTANCE} /bin/bash -c "apt update -y && apt upgrade -y"
done

이것은 거의 Terraform, Kubernetes 등의 DIY입니다.

또한 GitHub에는 다음과 같은 클라우드 관련 가이드가 많이 있습니다.

또 다른 디지털 오션:https://github.com/ethanbeyer/DigitalOcean-Droplet-Setup

AWS 제품:https://github.com/elionaz/aws-LAMP/blob/master/install_lamp.sh

관련 정보