DevOps
Using DevOps to Solve your Delivery Challenges
- 배포는 너무 오래걸린다.
- 테스트에 대해 혼란스럽다.
- 특정 개인에 대한 높은 의존성.
- 데브옵스 모델은 lock을 제거한다.
- 데브옵스 모델은 프로비저닝한다.
Delivery는 Continuous integration + continuous deployment를 의미한다.
데프옵스의 특징
- 높은신뢰성, 높은 퍼포먼스
- 데브옵스는 프로덕트, 툴이아니다. 데브옵스는 문화이다.
- 고수준의 자동화 프로세스
- 정기적이고 반복적인 플로우를 따른다. 싸이클은 짧고, 작고 잦은 변경을 선호한다.
DevOps
- 데브옵스의 철학은 개발과 운영의 통합 문화를 만들고, 협업 변화를 촉진하기 위해 기술의 linked toolchain 을 요구하는 것이다.
toolchain?
: Target 시스템의 Software 개발을 진행하기 위해 필요한 host system의 Cross Compile(교차 컴파일) 환경이다. - DevOps의 toolchain은 수십개의 non-collaborative 툴을 포함할 수 있고, 복잡하고 어려운 작업을 자동화를 통해 task로 만들 수 있다.
- DepOps의 정의에 따르면 one-size-fits-all이 해결책이 아니다.
- DevOps는 특정 문제 및 과제에 대한 정보를 제공한다.
DevOps를 위한 microservice requirements
- microservice에 기반한 새로운 어플리케이션을 빌드하라
- 기존 microservice 어플리케이션을 클라우드로 마이그레이션하라
- 하이브리드 microservice 어플리케이션을 배포하라
- 존재하는 어플리케이션들을 microservice architecture로 발전하라.
Microservice 배포를 위해 따라야 할 Roles
- 개발자는 테스트를 반복하며 각 테스트는 pass해야한다. 또한 계속되는 피드백에 대비하자.
- 테스터는 자동화 된 파이프라인에 컴포넌트, 통합, 회귀를 포함하고 크로스 플랫폼간 API를 통해 테스트가 가능토록 하자.
- 성능테스터는 로딩 테스팅을 모니터링하고 blue/green, rolling 배포를 하자.
rolling 배포:
일반적인 배포를 의미하는데, 단순하게 한 대씩 재시작한다. 코드 변경에 따른 side effect가 발생할 수 있다blue-green 배포:
예전 배포물을 블루(blue), 신규 배포물을 그린(green)이라고 해서 붙여진 이름이다. 새로운 배포물을 배포하고 모든 연결을 새로운 배포물만 보게 하며 코드 변경에 따른 side effect가 없다. (배포시 중단시점이 없음!)
- Release 하는사람은 성능 측정을 해야한다.
- 운영자는 가용성을 모니터링하고 blue/green 배포를 해야한다.
- 엔드유저는 지속적인 피드백을 주고 변경에 대해 대비한다.
DevOps의 평가기준
배포빈도(얼마나 자주 배포하나)
- 최상: 요구될때마다
- 보통: 일주일 혹은 한달에 한번
- 최하: 한달에서 여섯달 사이에 한번
Lead time for changes(ie.코드가 커밋되고 정상적으로 동작하는데 걸리는 시간)
- 최상: 한시간 이내
- 보통: 일주일 ~ 한달사이
- 최하: 한달~여섯달 사이
Mean time to recover(복구하는데 걸리는 시간)
- 최상: 한시간 이내
- 보통: 하루 이상
- 최하: 하루 이상
Change failure rate
- 최상: 0~15%
- 보통: 31~45%
- 최하: 16~30%
Database 관련 생각해봐야 할것들
- Production data에 대한 보호,보안(바꾸는 것은 리스크가 있다)
- Test data 필요
- 환경이 다름
- 의존성
- 다수 어플리케이션이 동일 db에 접근한다.
- 이전버전과 호환성 유지
- 롤백을 어떻게 할지
DevOps Values
CALMS
- Culture - 변화를 수용하라
- Automation - CI/CD
- Lean - 엔드유저가 생상하는 value에 초점을 맞추고, 배치사이즈를 작게하라
- Measurement - 모든것을 측정하고 개선된것을 보여줘라
- Sharing - 정보를 공유하고 협업하라
DevOps Tools
Configuration Automation / Management:
Puppet, Ansible, Chef, SaltContinuous Integration:
Jenkins, CruiseControl, CapistranoMonitoring:
Icinga (nagios), Zenoss, Sweet, GraphiteContainerization:
Docker, Rocket
DevOps 관련용어
CI/CD
- Continuous Integration 그리고 Continuous Deployment의 약어
Continuous integration
- 최신코드에서 변경된것을 사용가능하도록 빌드한다.
Continuous deployment
- 가능한 빠르게 배포 단계를 거치고 빌드된 해당 패키지가 프로덕션 환경으로 전환되도록 한다.
Continuous delivery
- Continuous integration + continuous deployment
Delivery pipeline
- 일련의 자동화 단계로써 CI/CD를 수행한다.
Continuous Integration
아래와 같은 단계를 빈번하게 수행한다.
1. Development
- 배치 테스를 거친 작은 변화들이 빠르게 구현된다.
2. SCM(Source Code management)
- 여러 개발자의 변경된것사항을 병합한다.(GitHub, SVN … 활용)
3. Build
- 배포할것을 만든다.(Jenkins, Gradle, Maven … 활용)
4. Package
- 런타임때 빌드를 설치한다.
- 변경할 수 없는 이미지를 런타임때 releasing 한다.
- 클라우드에 푸쉬하고 컨테이너 이미지 빌드
Continuous integration – package step
package step에선 변경 불가능한 이미지가 만들어진다. 이는 deploying instance를 생성할 때 사용된다. 이미지를 변경하고 싶다면 삭제하고 새로 만들어야 한다.
Continuous Deployment
Production 배포까지의 과정1. Deploy to Test
- functional testing 진행, test tool을 활용한 자동화
2. Deploy to Stage
- Production 배포 전 리허설
- 통합 testing 진행
3. Deploy to Prod
- 사용자가 사용할 수 있도록 빌드
Continuous Delivery vs continuous Deployment
Zero Downtime Deployment
서비스 중단없이 새로운 버전을 배포하는것을 의미한다. DevOps는 잦은 배포를 하므로 필요하다.
Zero Downtime Deployment 특징
- 어플리케이션은 항상 사용가능하다.
- 사용자가 중단(Downtime)없이 사용할 수 있다.
- 이전버전, 새버전이 동시에 배포됨 - 트래픽이 둘 다로 전달됨.
Implementing Zero Downtime Deployment – Blue Green
Deployment
필요한경우 이전버전으로 신성하게 되돌릴 수 있다.
1.v1(blue)이 배포되어 사용자들이 사용하고 있을 때 v2(green)을 배포한다.
2.자동화된 테스트 도구로 테스트, 검증을 진행하고 사용자를 v1에서 v2환경으로 변환한다.
3.v1(blue)을 삭제한다.
DevOps로의 Transformation
- Top to Bottom문화를 변화시키는 것이 핵심이다.
- 교육을 늘리고 커뮤니케이션하고 cross-skilling 하라
- DevOps가 가능한 새로운 프로세스를 평가하라
- 스스로 재평가하고 재빌드하라
- DevOps를 지원하는 새로운 기술 평가
- 조직을 작게 나눠라
Bottom-Up Implementation
- 협업을 위한 방법을 찾아라. (사람들을 초기부터 참가시킨다.)
- 자동화 방법을 찾아라
- metrics driven이 되어라
- 새로운것을 배우고 지속적으로 개선해라
- 작은 batches와 함께 병렬적으로 일해라
- 리팩토링을 허락해라
- 경영진에게 비즈니스 가치를 입증해라
- 비즈니스의 목표, metrics, 우선순위를 이해하라.
Top-Down Implementation
- 시험 케이스를 파일럿으로 선택하라
- 우수 사레를 문서화하고 전파하라
- 팀의 역량을 강화하고 가치를 이끌어내라
- 측정 가능한 결과를 요구하라
- 과거의 baseline이 충분치 않을때 변명하지 마라
- 빠르게 실패하고 지속적으로 향상하라
- 작은성공을 기반으로 나아가라
- 비효율적인 경우 그룹간 역할 및 책임을 조율하라.