서론
해당 글은 일프로 님의 인프런 강의 쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2의 내용을 정리한 글입니다.
해당 글에 사용된 내용, 사진 및 그림은 모두 강의와 강의 자료에 포함된 내용입니다.
전체 구성도
![](https://velog.velcdn.com/images/appti/post/001c4206-28c0-4887-94c0-96cd65a3e724/image.png)
- CI/CD 과정
- CI/CD 시작 시 github에서 최신 소스 코드 다운로드
- 메이븐 라이브러리에서 필요한 의존성을 토대로 애플리케이션 빌드
- 빌드 결과로 실행할 수 있는 jar 파일 생성
- DockerHub에서 openjdk 다운로드
- openjdk 기반으로 jar를 생성할 수 있는 이미지 생성
- DockerHub에 생성된 미지 업로드
- 쿠버네티스
- jenkins가 쿠버네티스에게 kubectl을 통해 파드 생성 요청
- 쿠버네티스는 필요한 컨테이너 이미지를 DockerHub에서 다운로드
- 쿠버네티스가 컨테이너 런타임 containerd에 컨테이너 생성 요청
DevOps에서 가장 중요한 것
- 아무리 복잡한 CI/CD 흐름이 있더라도 개발 -> 빌드 -> 실행 파일 생성이라는 사이클은 변하지 않음
![](https://velog.velcdn.com/images/appti/post/992475c1-98b8-4d1f-8888-41cea8339484/image.png)
- 개발 환경
- 개발 & 빌드하기 위한 OpenJDK
- 빌드하기 위한 Gradle
- 빌드의 결과물인 jar
- CI/CD 환경
- 빌드하기 위한 OpenJDK & Gradle
- 인프라 환경에 빌드 결과물인 jar를 전달하기 위한 배포 과정
- 인프라 환경
- jar를 실행하기 위한 OpenJDK
- 애플리케이션 실행을 위한 jar
- 기존 구성
- 인프라 환경 구성
1-1. 운영 환경에서는 Red Hat 계열 리눅스 사용
1-2. 개발 환경에서는 비용 절약을 위해 오픈 소스 리눅스 사용
- CI/CD 과정에서 빌드 후 결과물인 jar(= 실행 파일)를 배포를 통해 인프라 환경에 전달
- 컨테이너 구성
- 인프라 환경 구성
1-1. 운영 환경에서는 Red Hat 계열 리눅스 사용
1-2. 개발 환경에서는 비용 절약을 위해 오픈 소스 리눅스 사용
- CI/CD 과정에서 빌드 후 결과물을 배포를 통해 인프라 환경에 전달
2-1. 도커 이미지를 DockerHub에 업로드
2-2. kubectl을 통해 배포
- 쿠버네티스가 이미지를 다운받아 컨테이너 실행
3-1. 도커 이미지에 빌드 결과인 jar와 실행을 위한 OpenJDK가 포함되어 있음
- 공통 사항
- 개발 후 실행 파일을 생성
- 즉 DevOps에서 가장 핵심이 개발 후 빌드를 통해 실행 파일을 생성하는 것
DevOps를 구성하는 오픈소스들
![](https://velog.velcdn.com/images/appti/post/18cdfbbc-a541-4815-bcd9-e3911414e361/image.png)
- DevOps는 다음과 같은 단계로 분리할 수 있음
- 계획
- 개발
- 빌드
- 테스트
- 릴리즈
- 배포 가능한 패키지를 만드는 과정
- 컨테이너 이미지를 만들기 위한 Dockerfile 등을 의미
- 배포
- 운영
- 모니터링
- 슬랙
- DevOps의 중요 포인트를 차지하고 있는 툴들과 연동 가능
- DevOps 과정 중 필요한 내용을 슬랙 알람으로 표현 가능
DevOps에 엮인 IT 직군들
![](https://velog.velcdn.com/images/appti/post/d93ff0ae-dafc-4e51-97ca-94ca12fbab7c/image.png)
- 개발자
- ~ 2년차
- 업무팀에서 사용하는 개발 환경에 적응
- 주어진 개발 범위를 해결하는 퍼포먼스
- ~ 4년차
- github 장애 등에 대응
- 개발 측면에서 변경할 부분을 스스로 찾아서 변경할 수 있는 퍼포먼스
- ~ 6년차
- 개발 환경의 몇몇 툴에 대한 초기 세팅 구성
- CI 환경 빌드 / 테스트 자동화
- ~ 8년차
- 9년차 이상
- PM/PL/아키텍트/컨설턴트를 담당할 가능성이 매우 높음
- 개발자/데브옵스 엔지니어/운영자의 직책과 관련된 업무를 모두 해결할 수 있어야 함
![](https://velog.velcdn.com/images/appti/post/956b6eba-5c29-4b3c-9672-3eaecd33bf1d/image.png)
- Ops의 종류 및 역할
- GitOps
- DevSecOps
- 빠른 배포와 보안 지원
- 보안적인 요소까지 자동화하는 것이 핵심
- MLOps
- 머신러닝, AI 분야
- 데이터 분석가가 중요한 역할을 담당
- 데이터 분석가와 개발자들의 커뮤니케이션을 위한 역할
- LLMOps
- ChatGPT와 같은 방대한 규모의 머신러닝을 위한 DevOps 파이프라인
- MLOps 고도화
- FinOps