피드로 돌아가기
Slack EngineeringDevOps
원문 읽기
Advancing Our Chef Infrastructure: Safety Without Disruption
Slack이 Chef 단일 환경을 6개 환경으로 분리하고 시간 단위 카나리 롤아웃으로 배포 범위를 축소
AI 요약
Context
단일 공유 Chef 프로덕션 환경에서 새로 프로비저닝되는 노드들이 즉시 최신(결함 있을 수 있는) 설정을 적용받아, 대규모 스케일 아웃 이벤트 중 수십 또는 수백 개의 노드가 손상된 구성으로 시작될 수 있었다.
Technical Solution
- 단일 프로덕션 Chef 환경을 6개 환경으로 분할: prod-1부터 prod-6으로 구분하고, Poptart Bootstrap 도구에서 노드의 AZ ID를 검사하여 자동으로 매핑
- prod-1을 카나리 환경으로 운영: 매시간 정각에 최신 변경사항을 적용하여 프로덕션 환경에서 주기적으로 검증
- prod-2부터 prod-6까지 릴리스 트레인 모델 도입: 이전 버전이 모든 프로덕션 환경을 통과한 후에만 다음 환경으로 단계적 배포
- Kubernetes 크론 잡으로 배포 일정 관리: 샌드박스 환경에 정각 배포, 개발 환경에 정각 배포, 프로덕션 환경에 30분 이후 단계적 배포
- 로컬 상태 확인 기반 폴백 메커니즘: 모든 노드에 12시간 interval 크론 잡을 구성하여 Chef Summoner 실패 감지 시 직접 Chef 실행 트리거
Key Takeaway
계획된 카나리 환경과 단계적 릴리스 트레인을 통해 단일 환경에서의 전체 플릿 영향을 특정 가용 영역으로 제한하면, 기존 워크플로우를 유지하면서도 결함 감지 윈도우를 수 배 확장할 수 있다.
실천 포인트
분산 인프라 환경에서 정기적 구성 업데이트가 필요한 경우, 가용 영역 기반 환경 분리와 1시간 단위의 카나리 롤아웃 모델을 적용하면 배포 영향도를 1/6 수준으로 축소하면서 문제 감지 시간을 조기에 당길 수 있다.