피드로 돌아가기
Advancing Our Chef Infrastructure: Safety Without Disruption
Slack EngineeringSlack Engineering
DevOps

Slack이 Chef 단일 환경을 6개 환경으로 분리하고 시간 단위 카나리 롤아웃으로 배포 범위를 축소

Advancing Our Chef Infrastructure: Safety Without Disruption

Archie Gunasekara2025년 10월 23일10intermediate

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 수준으로 축소하면서 문제 감지 시간을 조기에 당길 수 있다.

원문 읽기