%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%84%9C%EB%B2%84%20%EC%84%A4%EC%B9%98%EB%A5%BC%20%EC%9E%90%EB%8F%99%ED%99%94%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
서버 설치를 자동화하는 방법은 무엇입니까? 우리의 요구에 맞는 인프라/시스템은 무엇입니까?
우리는 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/
둘 다 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