서재/밥벌이

쿠버네티스 개발 전략

눈써비 2024. 10. 15. 23:11

클라우드 네이티브 프로그래밍을 위한 쿠버네티스 개발 전략

어느순간 부터 cloud native나 MSA가 들어가야 잘 팔리는 세상이 되었다.

마케팅 용어 같기도 하고,

아직은 제대로 하는 사람은 만나본 적이 없는 신기루 같은 기술.

 

어쨋든 확실하긴 하다.

제대로된 클라우드 네이티브를 하고자 한다라면 쿠버네티스는 빠질 수가 없긴 하다.

 

이력만 봐도 저자는 쿠버네티스를 제대로 하고 있는 것이 보이는데,

내용도 어디서 베끼지 않고 확실하게 본인 생각과 함께 실무적인 접근을 보여주는 좋은 책이다.

 

특히 한국인이 쓴 대부분의 쿠버네티스 복붙책이 아닌 제대로 된 책.

그나저나 허준이라는 분 이름이 낯 익어서 (동의보감 말고!!) 검색을 좀 해보니, 필즈상(Fields Medal) 받으신 허준 교수와 동명이인

 

가장 좋았던 점 중에서,

내가 현재 고민하고 있는,

 

현재 우리(카르페디엠) 환경에서 외부 연결을 어떤 것으로 할 것인가?

1. NodePort?

2.클라우드 제공자의 LB?

3.MetalLB?

4.Ingress?

 

에 대해 명확한 길을 보여주었다.

태양이는 2. 클라우드 제공자의 LB를 추천했지만, 우리 개발 환경에서는 너무 비싼 것이기도 하고,

많은 영세한 업체들에게는 저렴한 솔루션을 보여주어야 한다.

 

결론은 4.Ingress이고, nginx ingress controller 로 결정.

출처 : https://www.manning.com/books/kubernetes-in-action-second-edition?a_aid=kubiaML&a_bid=de3ae03f

 

내년(2025년)에 나올 쿠버네티스 인 액션의 개정판에서 나온 내용이다.

 

이 중 우리회사의 테스트서버 아키텍처는 가장 왼쪽.

App A ~ Z를 nginx에서 reverse proxy로 다른 도메인들로 서비스 하고 있다.

사실 큰 불만은 없고, 단지 쿠버네티스 실무를 해보기 위해서 가장 오른쪽 모델로 이동해보려고 한다.

각 App들을 컨테이너화 하는 것인데, 이 부분에 대해서는 약간의 노가다성으로 컨테이너화 및 자동배포를 연결하면 되고,

가장 앞단의 reverse proxy를 무엇으로 할까에 대한 고민이었다.

 

다행히 저자 덕분에 결정을 쉽게 내릴 수 있었다.

ingress의 능력치를 제대로 언급해 주었다.

 

이제 책을 정리해보자.

지은이의 글에서 설정보다 관례(convention over configuration)를 언급,

최근 읽었던 Spring Boot Up&Running 가 떠올랐다. 이 책에서도 spring boot의 장점 중 하나로 꼽았었다.

요새 쿠버네티스랑 spring boot를 교차해서 읽다보니 결국 개발자들의 생각은 비슷비슷 하다 라는 관점이 또 떠오른다.

(심지어 내용도 섞임)

 

1장 애플리케이션을 빈틈없이 실행하고 우아하게 종료하기

파드에 대한 설명도 간단히 나왔으나 패스하고 내가 중요하게 본 부분에 집중.

 

파드를 제대로 실행하기 위한 기법

쿠버네티스 프로브의 종류

1.  활성 프로브(liveness probe) : health check

2. 준비성 프로브(readiness probe) : 서비스가 제대로 올라간 것 판별

3. 스타트업 (startup probe) : 쿠버네티스 1.20 버전에서 추가/ 쓸일 별로 없을 듯. 필요하면 그때 보자

 

파드를 제대로 종료하기

graceful 종료를 위한 방법 안내.

우리 소스에서 젠킨스 배포할 때 제대로 적용하고 있었는지 큰 관심을 안가졌었는데,

다행히 적용이 잘 되어 있었다.

또한 kill을 디폴트로 하는 경우 sigterm인 것도 다시 한 번 확인

chatGPT의 할루시네이션을 경계해야하지만, 왠만해서 그냥 신뢰해버린다. ㅋㅋ

진짜 중요할 때는 별도로 찾아보고 chatGPT도 닥달하긴 한다.

 

새로운 기술을 익히다 보면, 현재 우리가 사용하는 기술을 제대로 쓰고 있나 확인도 하게 되서 늘 행복한 관점.

저자가 spring에서 graceful 종료하는 것도 깨알같이 언급해줘서 더 탄탄히 돌아보았다.

 

2장 디플로이먼트를 이용해 애플리케이션을 중단 없이 업데이트하기

이플로이먼트로 리플리카셋 관리하는 방법은 여기저기 많아서 패스하고,

롤링 업데이트에 대해 꽤나 자세하게 설명이 있다.

거기에 프로브까지 이용하자고 깨알 언급.

롤백도 알려주고, 좋다.

기본적으로 다른 책들도 있는 내용이긴한데 디테일이나 실무접근성이 좋아. 

 

3장 애플리케이션의 스케일 조정하기

스케일 아웃을 사용하는 다양한 방법들 깨알 같이 안내.

확실히 실무적이다. 읽을 수록 맘에 든다.

 

4장 애플리케이션의 설정을 체계적으로 관리하기

spring까지 또 등장하며 설정관련한 부연설명. 깨알같이 실무나 묻어나 좋다.

컨피그맵과 시크릿 사용 설명. 둘의 차이. 관리요소 등 또 깨알같이 설명.

 

5장 애플리케이션과 네트워크 연결하기

인그레스에 대한 확신을 여기서 얻었다.

딱 개발자가 필요한 요점 정리가 잘 되어 있어.

실무 안하는 사람들이 정리하는 것과 확실히 다르다.

 

6장 쿠버네티스의 저장소 활용하기

이 내용도 여기저기 많은 내용이지만,

영구히 저장하는 방법에 대해 잘 써놨다. 

다만 persistentVolume랑 persistentVolumeClaim에 대한 설명이 조금 어렵다.

다른 책에서 봐서 알고 있어서 넘어갔는데, 내용상으로 살짝 부실하다.

부연설명이 더 있었으면 완벽했는데 아쉽.

 

7장 쿠버네티스를 활용한 애플리케이션 모범사례

로그처리.

데이터베이스를 파드로 할지 고민.

세션처리 고민.

네임스페이스를 활용한 개발환경 구분.

 

기존 사용하는 어플리케이션들을 쿠버네티스로 넘어갈 때 세션은 고민될 수 밖에 없는 영역.

이 부분에 대한 안내가 깊이 있다.

 

예전 인덕대에서 LB 설정으로 인해 세션처리로 피똥을 쌌던 경험이 생각났다.

WAS에서 세션클러스트링이 안되는 경우에도 L7의 기능 혹은 L4의 cookie persistent 라는 것이 필요한데,

여튼 이런 것들에 대한 다양한 안내가 나온다.

 

그렇지. 레거시 중의 레거시는 진짜 힘들긴 하다.

 

8장 쿠버네티스 기반 배치 프로그램의 실행과 관리

쿠버네티스 job에 대한 내용.

배치 프로그램이 병렬로 돌 때 락을 할지 말지 내용 등.

늘 이런 배치를 생각하면 sprinb batch와 dbms job, os의 crontab 에서 고민하는데, 

쿠버네티스를 사용할때도 고려할 사항이 하나 생기겠다.

 

9장 애플리케이션을 쿠버네티스에 배포하기

yaml 파일 관리하는 방식이 나오고, git으로 공유하는 팁, yaml 추출 후 불필요한 부분 없애는 내용.

그리고 관리툴인 헬름에 대한 소개.

 

10장 쿠버네티스에서 실행 중인 애플리케이션의 문제를 파악하는 방법

뒤로 갈수록 나의 집중력이 떨어진다.

각종 상태 점검 명령어 소개

 

11장 kubectl을 활용하여 클러스터와 상호작용하는 다양한 방법

컨텍스트 설정과 전환.

 

끝!

뒷부분은 집중이 잘 안되기도 하고,

그래도 전체적으로 실무를 해본 느낌이 나는 좋은 책이다.

도움 받은 부분도 많다.

국내에서 책을 쓰는 분들이 이랬으면 좋겠네.

반응형