개요
- 자주 사용되는 패턴들을 기억해놓으면 오픈 소스 파악이나 설치하는 데 유리함
- 쿠버네티스의 기본 리소스만 사용한 패턴이 존재함
- pod 안에 container가 작동하는 패턴이 존재함
- CRD가 사용된 패턴이 존재함
- Helm만 써도 리소스 중복 등에서 자유롭지만 CRD의 경우 고도화된 어플리케이션에서 좋음
쿠버네티스 기본 컨트롤러와 리소스가 이용된 패턴
- 대표적으로 DaemonSet과 CronJob, Job 등이 존재함
- DaemonSet은 모든 노드에 해당 Pod를 하나씩 설치해주는 것으로 모든 노드에 pod가 존재하기 때문에 각 노드의 모니터링, 노드 안에 저장 되는 로깅, 네트워크를 최적화 시킬 수 있은 nginx 인그레스 등에 사용이 됨
- CronJob, Job은 기다렸다가 실행되는 로직을 처리할 수 있음.
- Job의 parallelism은 동시에 실행되는 것이고 completions는 최종적으로 실행되는 것임. 그리고 backoffLimit는 재시도 로직인다
- 위 예시처럼 각각을 2, 4, 1로 처리했다면 처음에 실행할 때 2개가 성공이 뜨면 다시 2개가 실행이 되는데 하나가 실패가 나면 다시 재시도를 하여 성공이 뜨는지를 보고 completions가 제대로 동작하는 지를 확인하는 것임
- CronJob은 이러한 Job들을 모아서 실행시켜주는 것임
Pod의 디자인 패턴
- Pod는 처음에 격리 시켜주는 Pause Container가 존재하며 그 다음 InitContainer가 초기화 작업, 메인 작업과 보조 작업은 main과 sideCar 컨테이너가 실행함
- 위의 초기화 패턴을 보면 처음에 초기화할 때 하면 좋은 패턴들이 많이 나옴
- 사이드카 컨테이너는 메인 컨테이너와 같이 설정이 되고 yaml 파일을 봤을 때는 구별 불가
- 참고로 어댑터 패턴은 데이터 중계, 앰버서더 패턴은 통신 중계라는 차이점이 존재함
CRD가 사용된 패턴
- CRD는 생성해야할 pod를 추상화 시켜 제공해주는 것으로 kind에는 이름이 versions에는 들어가는 속성들이 들어감
- 쿠버네티스 개발자가 CRD를 정의해주면 데브옵스 엔지니어가 CRD를 생성함
- 이름의 경우 기본적으로 도메인 이름이 들어감 (필수는 아니고 약속임)
- CRD를 사용하는 패턴에는 복잡한 일을 대신 해주는 오퍼레이터 패턴과 목표 대상과 제어 대상을 동기화 시켜주는 재조정 패턴이 존재함
출처: https://inf.run/wLXM7