도커와 쿠버네틱스를 왜 배울까?
데브옵스는 소프트웨어의 개발과 운영의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다.
데브옵스는 소프트웨어 개발조직과 운영조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.
개발 프로세스 v1
코드작성 > 클라우드 서버에 배포
개발 프로세스 v2 (협업을 시작하는 시기)
코드작성 > 깃(Merge,Request or Push) > 클라우드 서버에 배포
개발 프로세스 v3(배포에 자동화를 도입하는 시기)
코드작성 > 깃 > CI/CD(Test, Build, Deploy) > 클라우드 서버에 배포
개발 프로세스 v4(롤백등 배포 전략을 확장하는 시기)
코드작성 > 깃 > CI(Test, Build) > CD (Deploy) > 클라우드 서버에 배포
개발 프로세스 v5(운영이 중요해지는 시기)
코드작성 > 깃 > CI(Test, Build) > CD (Deploy) > 클라우드 서버에 배포 > Monitoring(Metrics, Log)
아래의 4가지를 효율적으로 진행한다.
자동화 (시간 절약, 효율 증가)
측정 (빠른 분석, 효율 증가) : 로그 잘 남겨두기
공유 (팀원 지식 습득, 효율 증가)
축적 (패시브 스킬, 효율 증가)
작은 것부터 시작
많이 사용되는 도구들: 깃, 깃랩(자동빌드 및 배포 연결 가능), 도커, 쿠버네티스
자체 서버 운영 > 설정(상태) 관리 도구 등장 > 가상머신 등장 > 클라우드 등장 > PaaS 등장 > 도커 등장 > 쿠버네티스 등장 > 서비스메시 등장
1) 자체 서버 운영
서버를 설정하기 위해 많은 노력과 시간이 필요
옛날에 많이 사용하던 방식
2) 설정(상태) 관리 도구 등장
이왕 코드로 관리하면 좋을 것 같다는 배경으로 등장
러닝 커브 긴 단점
3) 가상머신 등장
한 서버에 여러 개 설치도 쉽다
현재 사애를 저장할 수도 있다
근데 처음부터 다시 셋팅하려면 어려움
서버 이미지 공유 어떻게 해야할지...
4) 클라우드
이전보다 많이 편해짐~~
AWS, Google Cloud, Azure, ...
하드웨어 파편화 문제 해결
가상화된 환경만으로 아키텍처 구성이 가능해짐
5) PaaS 등장
Vercel, Heroku, Netlify, ...
잘 구성해 놓은 곳에 소스 코드만으로 배포
일반화된 프로비저닝 방법을 제공
단점이라면, 애플리케이션을 PaaS 방식에 맞게 작성해야 함
서버에 대한 원격 접속 시스템을 제공하지 않음
서버에 파일 시스템을 사용할 수 없음
서버 패키지를 설치할 수 없음
로그 수집을 제한적인 방식으로 허용(STDOUT)
애플리케이션 배포에 대한 새로운 패러다임
크론잡(문자 발송, 예약, 정산 등), 데이터 분석, 로그 분석, 애플리케이션 성능 모니터링 등이 어려움/제한적임
6) 도커의 등장
도커가 등장하고 서버관리/개발 방식이 완전히 바뀌게 되었다.
어떠한 프로그램도(MySQL, redis, Jenkins 등) 컨테이너로 만들 수 있고,
어디서든 실행된다.(amazon 등)
가상머신처럼 독립적으로 실행되지만
훨씬 빠르고, 쉽고, 효율적이다.
무엇보다 다른 프로그램과 격리시키는 것은 도커만의 기능이다. ('자원격리')
프로세스, 파일/디렉토리를 가상으로 분리
CPU/MEMORY/IO를 그룹별로 제한
리눅스 기능을 이용해서 빠르고 효율적으로 서버 관리
가상머신은 OS 위에 또 OS가 올라간 상태에서 작동
도커는 OS 위에서 바로 동작하면서 자원 격리만 해준다.
도커가 가져온 변화
클라우드 이미지보다 관리하기 쉬움
다른 프로세스와 격리되어 가상머신처럼 사용하지만 성능저하 거의 없음
복잡한 기술을 몰라도 사용할 수 있음
이미지 빌드 기록이 남음
코드와 설정으로 관리 > 재현 및 수정 가능
오픈소스 > 특정 회사 기술에 종속적이지 않음
7) 쿠버네티스의 등장 : 배포는 어떻게 할까?
복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구
즉 많은 컨테이너들을 중앙에서 서서 지휘 및 관리 = "컨테이너 오케스트레이션"
컨테이너 오케스트레이션을 가장 잘 지원하는 도구가 쿠버네티스
쿠버네티스는 컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈 소스 플랫폼
조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것