SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
Node.js 앱 하나를
k8s에 올리면서 고민한 것들
쇼핑검색개발
정형식
컨테이너와 k8s
• 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을
실행하기 위한 운영 시스템 레벨 가상화 방법
https://ko.wikipedia.org/wiki/LXC
컨테이너와 k8s
• 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을
실행하기 위한 운영 시스템 레벨 가상화 방법
https://ko.wikipedia.org/wiki/LXC
컨테이너와 k8s
• 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을
실행하기 위한 운영 시스템 레벨 가상화 방법
https://ko.wikipedia.org/wiki/LXC
컨테이너와 k8s
• 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을
실행하기 위한 운영 시스템 레벨 가상화 방법
• `컨테이너`
• 컨테이너에 화물을 넣으려는 입장: 컨테이너 안에 넣어야 함 (신선식품, 액체 등등)
• 화물을 옮기는 입장: 내용과 상관없이 동일한 방법으로 운송 가능
컨테이너와 k8s
• 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을
실행하기 위한 운영 시스템 레벨 가상화 방법
• `컨테이너`
• 컨테이너에 화물을 넣으려는 입장: 컨테이너 안에 넣어야 함 (냉장, 액체 등등)
• 화물을 옮기는 입장: 내용과 상관없이 동일한 방법으로 운송 가능
컨테이너와 k8s
• 컨테이너가 수백개 있다면?
• 어느 머신에 어떤 컨테이너를 띄우지?
• 얘네들이 문제없이 잘 떠있나?
• 컨테이너들을 새 버전으로 바꿔야 겠다
컨테이너와 k8s
• 컨테이너가 수백개 있다면?
• 어느 머신에 어떤 컨테이너를 띄우지?
• 얘네들이 문제없이 잘 떠있나?
• 컨테이너들을 새 버전으로 바꿔야 겠다
• 쿠버네티스는 컨테이너 오케스트레이션의 사실상 표준
k8s object
• Pod: 도커 컨테이너(들)
• Deployment: Pod을 여러 개 띄워놓은 것
`node-api`
• Ingress: HTTP 요청을
서비스들한테 라우팅
https://medium.com/@ahmetb
• Service: Pod들을 네트워크로
접근할 수 있도록 묶어놓은 것
쇼핑검색개발과 k8s
• 사내 공용 클러스터가 오픈해서 기존 로직을 옮긴 신규 node.js
API 앱을 배포
• 자바 웹 (Spring MVC), node.js 웹(BFF + React SSR)도 옮기려고
계획 중
• 결국 (금전 / 비금전) 운영비용 효율화가 목적
(IaC와도 닿아있음)
쇼핑검색개발과 k8s
• 처음 올려보면서 고민했던, 그리고 지금도 고민하는 점을 공유
1. PM2를 쓸까 말까?
2. Liveness / readiness probe는 어떻게 설정할까?
3. Ingress 설정은 어떻게 안전하게 배포할까?
1. PM2를 쓸까 말까?
• PM2
• (Node.js) 프로세스를 관리해주는 도구
• 주요 기능
• 클러스터링 – node.js는 싱글 쓰레드고 장비에는 코어가 많으니까
• HA – 프로세스가 죽으면 다시 띄워줌
• 로깅 – 여러 프로세스에서 나온 로그를 모아서 볼 수 있게 + 로그 파일 rotation
• 모니터링 – 프로세스 별 CPU 사용량, 메모리 사용량 등
• 물리장비 / VM 위에서 node.js 앱을 운영할 때는 다들 씀
• k8s 위에서는?
• 쓰는 곳도 있고 안 쓰는 곳도 있다
1. PM2를 쓸까 말까?
• PM2의 역할을 k8s가 대체할 수 있을까?
• 클러스터링
• HA
• 로깅
• 모니터링
1. PM2를 쓸까 말까?
• PM2의 역할을 k8s가 대체할 수 있을까?
• 클러스터링 – Pod 개수를 늘리면 해결
• HA – Pod이 어떤 이유로 종료가 되면 restartPoliciy를 따라서 처리
https://kubernetes.io/ko/docs/concepts/workloads/pods/pod-
lifecycle/
• 로깅 & 모니터링 – 클러스터 별로 환경이 다르지만 보통 로그 확인 및
자원 모니터링 도구를 제공
• 일단은 PM2 없이, 별일 없이 운영하는 중
1. PM2를 쓸까 말까?
• 그러면 PM2는 쓸 필요가 하나도 없나?
• Pod 개수의 문제
• ex) 노드 프로세스 80개가 필요한 워크로드
• Pod 80개 vs Pod 10개 ? (PM2로 노드 프로세스 각각 8개)
• Pod마다 사이드카 컨테이너가(filbeat, nginx..) 있다면 Pod이 많은 것도 비용
• 앱이 다시 뜨는 속도
• Pm2: 프로세스가 죽음 -> 다시 띄움
• Pod: 프로세스가 죽고 -> 클러스터가 인지 -> LB에서 빼고 -> Pod 다시 띄우고 -> 다시 LB
에 넣고
• 만약 PM2를 쓴다면
• 무중단 배포 / 재시작을 위한 별도의 설정이 필요하다
• [라인 개발블로그 - 2 . ]
• (https://engineering.linecorp.com/ko/blog/pm2-nodejs/)
2. Liveness probe / Readiness probe는
어떻게 설정할까?
• K8s는 컨테이너 상태를 알기 위해 주기적으로 요청을 보냄
• 명령어, TCP 요청, HTTP 요청
• Liveness probe
• 컨테이너가 살아있는지
• Readiness probe
• 컨테이너가 요청을 처리할 준비가 되있는지
2. Liveness probe / Readiness probe는
어떻게 설정할까?
• Liveness probe
• 컨테이너가 살아있는지
• 실패: Pod이 재시작
• Readiness probe
• 컨테이너가 요청을 처리할 준비가 되있는지
• 실패: 다시 성공할 때 까지 LB에서 뺀다
• 언제 재시작되고 언제 잠깐 요청을 받지 말아야할까?
2. Liveness probe / Readiness probe는
어떻게 설정할까?
• 현재 설정
• Liveness: 항상 200 OK를 return 하는 HTTP endpoint
• Readiness: DB (Redis, MongoDB) 커넥션이 정상이어야 OK를 return
하는 endpoint
2. Liveness probe / Readiness probe는
어떻게 설정할까?
• 현재 설정
• Liveness: 항상 200 OK를 return 하는 HTTP endpoint
• Readiness: DB (Redis, MongoDB) 커넥션이 정상이어야 OK를 return
하는 endpoint
• 주의할 점
• 시작시간이 오래 걸린다면 livenessProbe의 initialDelaySeconds를 적절
히 조절
• 안그러면 계속 재시작..
• Ingress 컨트롤러 Pod에도 꼭 설정해 줄 것
• 안그러면 Pod 업데이트 할 때 순단 발생
https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes
https://stackoverflow.com/a/48578390
2. Liveness probe / Readiness probe는
어떻게 설정할까?
• 좀 써보고 나니까…
• 원래는 무중단 배포를 위해 설정했는데
• 새 버전의 이미지, 차트를 배포할 때 최소한의 안전판 역할
• 사실 물리기반 서버 배포 스크립트에도 비슷한 내용이 있음
2. Liveness probe / Readiness probe는
어떻게 설정할까?
• 좀 써보고 나니까…
• 원래는 무중단 배포를 위해 설정했는데
• 새 버전의 이미지, 차트를 배포할 때 최소한의 안전판 역할
• 사실 물리기반 서버 배포 스크립트에도 비슷한 내용이 있음
• 여전히 고민하는 지점
• Readiness probe의 내용
• Redis OK && MongoDB OK 로 설정을 해놓았는데
• 예를 들어 (혹시라도 만에 하나) 몽고DB에 장애가 나면 이 API 전체가 사용이 불
가해지는게 맞는가?
• 전체 체크는 Pod을 처음 시작할 때만 하는게 어떨까?
2. Liveness probe / Readiness probe는
어떻게 설정할까?
• 좀 써보고 나니까…
• 원래는 무중단 배포를 위해 설정했는데
• 새 버전의 이미지, 차트를 배포할 때 최소한의 안전판 역할
• 사실 물리기반 서버 배포 스크립트에도 비슷한 내용이 있음
• 여전히 고민하는 지점
• Readiness probe의 내용
• Redis OK && MongoDB OK 로 설정을 해놓았는데
• 예를 들어 (혹시라도 만에 하나) 몽고DB에 장애가 나면 이 API 전체가 사용이 불
가해지는게 맞는가?
• 전체 체크는 Pod을 처음 시작할 때만 하는게 어떨까?
• 시스템의 상태는 스펙트럼으로 생각해야 한다고 한다.
https://medium.com/@copyconstruct/health-checks-in-distributed-systems-aa8a0e8c1672
3. Ingress 설정을 안전하게 업데이트 하
는 방법이 없을까?
k8s object
• Pod: 도커 컨테이너(들)
• Deployment: Pod을 여러 개 띄워놓은 것
`node-api`
• Ingress: HTTP 요청을
서비스들한테 라우팅
https://medium.com/@ahmetb
• Service: Pod들을 네트워크로
접근할 수 있도록 묶어놓은 것
3. Ingress 설정을 안전하게 업데이트 하
는 방법이 없을까?
• Ingress를 사용하려면
• Ingress 컨트롤러 Pod을 띄워야 하고 (eg., nginx, traefik)
• 이미지는 뭐 쓸지, 몇 대 띄울지 등등
• Ingress 설정을 넣어줘야 한다
• 어떤 주소 / 경로는 어떤 서비스로..
3. Ingress 설정을 안전하게 업데이트 하
는 방법이 없을까?
• Ingress를 사용하려면
• Ingress 컨트롤러 Pod을 띄워야 하고 (eg., nginx, traefik)
• 이미지는 뭐 쓸지, 몇 대 띄울지 등등
• Ingress 설정을 넣어줘야 한다
• 어떤 주소 / 경로는 어떤 서비스로..
• 잘못된 설정을 넣을 경우
• Ingress controller ?
• Pod은 아예 뜨지를 않으니 Liveness Probe / Readiness Probe 설정으로 검출 가
능
• Ingress 설정
• ???
3. Ingress 설정을 안전하게 업데이트 하
는 방법이 없을까?
• Ingress 설정을 잘못할 경우..
• 예시) Traefik Ingress에서 서비스 weight를 잘못 넣으면(=합이 100이
초과하도록 넣으면)
• 두 서비스 아무 곳으로도 요청을 보내지 않음
• 만약 서비스 전이라면
• 충분히 테스트해보고 요청을 받기 시작할 수 있음
• 운영중이라면
• 안 바꾸면 됨
• Ingress 파일을 분리해서 작성하는 식으로
실수 가능성을 줄일 수는 있다
https://docs.traefik.io/configuration/backends/kubernetes/#annotations
3. Ingress 설정을 안전하게 업데이트 하
는 방법이 없을까?
• 하고 있지는 못하는데 하면 좋겠다 싶은 방법들
• 스테이지 클러스터를 따로 하나 만들어서 거기서 검증
• Traefik Controller를 두 군으로 띄워서 한쪽에서 검증 후 나머지에 반영
• https://docs.traefik.io/user-guide/kubernetes/#between-multiple-traefik-
deployments
• Minikube를 이용해서 테스트..?
3. Ingress 설정을 안전하게 업데이트 하
는 방법이 없을까?
• 하고 있지는 못하는데 하면 좋겠다 싶은 방법들
• 스테이지 클러스터를 따로 하나 만들어서 거기서 검증
• Traefik Controller를 두 군으로 띄워서 한쪽에서 검증 후 나머지에 반영
• https://docs.traefik.io/user-guide/kubernetes/#between-multiple-traefik-
deployments
• Minikube를 이용해서 테스트..?
• 조심만 하고 있습니다
못다한 이야기들
• 배포 / 로깅
• 클러스터 환경마다 너무 달라서 스킵. 사내 플랫폼 사용중 (관리 포인트를 줄이기 위해서)
• 손으로 하는게 익숙해지면 점차 자동화하고 싶음
• 함께 익숙해지기
• 삽질이 왕도일까?
• 경험치를 효율적으로 전파하는 법?
감사합니다

Más contenido relacionado

Destacado

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Destacado (20)

Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 

NODE.js 앱 하나를 k8s에 올리면서 고민한 것들

  • 1. Node.js 앱 하나를 k8s에 올리면서 고민한 것들 쇼핑검색개발 정형식
  • 2. 컨테이너와 k8s • 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법 https://ko.wikipedia.org/wiki/LXC
  • 3. 컨테이너와 k8s • 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법 https://ko.wikipedia.org/wiki/LXC
  • 4. 컨테이너와 k8s • 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법 https://ko.wikipedia.org/wiki/LXC
  • 5. 컨테이너와 k8s • 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법 • `컨테이너` • 컨테이너에 화물을 넣으려는 입장: 컨테이너 안에 넣어야 함 (신선식품, 액체 등등) • 화물을 옮기는 입장: 내용과 상관없이 동일한 방법으로 운송 가능
  • 6. 컨테이너와 k8s • 단일 컨트롤 호스트 상에서 여러 개의 고립된 리눅스 시스템 (컨테이너)들을 실행하기 위한 운영 시스템 레벨 가상화 방법 • `컨테이너` • 컨테이너에 화물을 넣으려는 입장: 컨테이너 안에 넣어야 함 (냉장, 액체 등등) • 화물을 옮기는 입장: 내용과 상관없이 동일한 방법으로 운송 가능
  • 7. 컨테이너와 k8s • 컨테이너가 수백개 있다면? • 어느 머신에 어떤 컨테이너를 띄우지? • 얘네들이 문제없이 잘 떠있나? • 컨테이너들을 새 버전으로 바꿔야 겠다
  • 8. 컨테이너와 k8s • 컨테이너가 수백개 있다면? • 어느 머신에 어떤 컨테이너를 띄우지? • 얘네들이 문제없이 잘 떠있나? • 컨테이너들을 새 버전으로 바꿔야 겠다 • 쿠버네티스는 컨테이너 오케스트레이션의 사실상 표준
  • 9. k8s object • Pod: 도커 컨테이너(들) • Deployment: Pod을 여러 개 띄워놓은 것 `node-api` • Ingress: HTTP 요청을 서비스들한테 라우팅 https://medium.com/@ahmetb • Service: Pod들을 네트워크로 접근할 수 있도록 묶어놓은 것
  • 10. 쇼핑검색개발과 k8s • 사내 공용 클러스터가 오픈해서 기존 로직을 옮긴 신규 node.js API 앱을 배포 • 자바 웹 (Spring MVC), node.js 웹(BFF + React SSR)도 옮기려고 계획 중 • 결국 (금전 / 비금전) 운영비용 효율화가 목적 (IaC와도 닿아있음)
  • 11. 쇼핑검색개발과 k8s • 처음 올려보면서 고민했던, 그리고 지금도 고민하는 점을 공유 1. PM2를 쓸까 말까? 2. Liveness / readiness probe는 어떻게 설정할까? 3. Ingress 설정은 어떻게 안전하게 배포할까?
  • 12. 1. PM2를 쓸까 말까? • PM2 • (Node.js) 프로세스를 관리해주는 도구 • 주요 기능 • 클러스터링 – node.js는 싱글 쓰레드고 장비에는 코어가 많으니까 • HA – 프로세스가 죽으면 다시 띄워줌 • 로깅 – 여러 프로세스에서 나온 로그를 모아서 볼 수 있게 + 로그 파일 rotation • 모니터링 – 프로세스 별 CPU 사용량, 메모리 사용량 등 • 물리장비 / VM 위에서 node.js 앱을 운영할 때는 다들 씀 • k8s 위에서는? • 쓰는 곳도 있고 안 쓰는 곳도 있다
  • 13. 1. PM2를 쓸까 말까? • PM2의 역할을 k8s가 대체할 수 있을까? • 클러스터링 • HA • 로깅 • 모니터링
  • 14. 1. PM2를 쓸까 말까? • PM2의 역할을 k8s가 대체할 수 있을까? • 클러스터링 – Pod 개수를 늘리면 해결 • HA – Pod이 어떤 이유로 종료가 되면 restartPoliciy를 따라서 처리 https://kubernetes.io/ko/docs/concepts/workloads/pods/pod- lifecycle/ • 로깅 & 모니터링 – 클러스터 별로 환경이 다르지만 보통 로그 확인 및 자원 모니터링 도구를 제공 • 일단은 PM2 없이, 별일 없이 운영하는 중
  • 15. 1. PM2를 쓸까 말까? • 그러면 PM2는 쓸 필요가 하나도 없나? • Pod 개수의 문제 • ex) 노드 프로세스 80개가 필요한 워크로드 • Pod 80개 vs Pod 10개 ? (PM2로 노드 프로세스 각각 8개) • Pod마다 사이드카 컨테이너가(filbeat, nginx..) 있다면 Pod이 많은 것도 비용 • 앱이 다시 뜨는 속도 • Pm2: 프로세스가 죽음 -> 다시 띄움 • Pod: 프로세스가 죽고 -> 클러스터가 인지 -> LB에서 빼고 -> Pod 다시 띄우고 -> 다시 LB 에 넣고 • 만약 PM2를 쓴다면 • 무중단 배포 / 재시작을 위한 별도의 설정이 필요하다 • [라인 개발블로그 - 2 . ] • (https://engineering.linecorp.com/ko/blog/pm2-nodejs/)
  • 16. 2. Liveness probe / Readiness probe는 어떻게 설정할까? • K8s는 컨테이너 상태를 알기 위해 주기적으로 요청을 보냄 • 명령어, TCP 요청, HTTP 요청 • Liveness probe • 컨테이너가 살아있는지 • Readiness probe • 컨테이너가 요청을 처리할 준비가 되있는지
  • 17. 2. Liveness probe / Readiness probe는 어떻게 설정할까? • Liveness probe • 컨테이너가 살아있는지 • 실패: Pod이 재시작 • Readiness probe • 컨테이너가 요청을 처리할 준비가 되있는지 • 실패: 다시 성공할 때 까지 LB에서 뺀다 • 언제 재시작되고 언제 잠깐 요청을 받지 말아야할까?
  • 18. 2. Liveness probe / Readiness probe는 어떻게 설정할까? • 현재 설정 • Liveness: 항상 200 OK를 return 하는 HTTP endpoint • Readiness: DB (Redis, MongoDB) 커넥션이 정상이어야 OK를 return 하는 endpoint
  • 19. 2. Liveness probe / Readiness probe는 어떻게 설정할까? • 현재 설정 • Liveness: 항상 200 OK를 return 하는 HTTP endpoint • Readiness: DB (Redis, MongoDB) 커넥션이 정상이어야 OK를 return 하는 endpoint • 주의할 점 • 시작시간이 오래 걸린다면 livenessProbe의 initialDelaySeconds를 적절 히 조절 • 안그러면 계속 재시작.. • Ingress 컨트롤러 Pod에도 꼭 설정해 줄 것 • 안그러면 Pod 업데이트 할 때 순단 발생 https://cloud.google.com/blog/products/gcp/kubernetes-best-practices-setting-up-health-checks-with-readiness-and-liveness-probes https://stackoverflow.com/a/48578390
  • 20. 2. Liveness probe / Readiness probe는 어떻게 설정할까? • 좀 써보고 나니까… • 원래는 무중단 배포를 위해 설정했는데 • 새 버전의 이미지, 차트를 배포할 때 최소한의 안전판 역할 • 사실 물리기반 서버 배포 스크립트에도 비슷한 내용이 있음
  • 21. 2. Liveness probe / Readiness probe는 어떻게 설정할까? • 좀 써보고 나니까… • 원래는 무중단 배포를 위해 설정했는데 • 새 버전의 이미지, 차트를 배포할 때 최소한의 안전판 역할 • 사실 물리기반 서버 배포 스크립트에도 비슷한 내용이 있음 • 여전히 고민하는 지점 • Readiness probe의 내용 • Redis OK && MongoDB OK 로 설정을 해놓았는데 • 예를 들어 (혹시라도 만에 하나) 몽고DB에 장애가 나면 이 API 전체가 사용이 불 가해지는게 맞는가? • 전체 체크는 Pod을 처음 시작할 때만 하는게 어떨까?
  • 22. 2. Liveness probe / Readiness probe는 어떻게 설정할까? • 좀 써보고 나니까… • 원래는 무중단 배포를 위해 설정했는데 • 새 버전의 이미지, 차트를 배포할 때 최소한의 안전판 역할 • 사실 물리기반 서버 배포 스크립트에도 비슷한 내용이 있음 • 여전히 고민하는 지점 • Readiness probe의 내용 • Redis OK && MongoDB OK 로 설정을 해놓았는데 • 예를 들어 (혹시라도 만에 하나) 몽고DB에 장애가 나면 이 API 전체가 사용이 불 가해지는게 맞는가? • 전체 체크는 Pod을 처음 시작할 때만 하는게 어떨까? • 시스템의 상태는 스펙트럼으로 생각해야 한다고 한다. https://medium.com/@copyconstruct/health-checks-in-distributed-systems-aa8a0e8c1672
  • 23. 3. Ingress 설정을 안전하게 업데이트 하 는 방법이 없을까?
  • 24. k8s object • Pod: 도커 컨테이너(들) • Deployment: Pod을 여러 개 띄워놓은 것 `node-api` • Ingress: HTTP 요청을 서비스들한테 라우팅 https://medium.com/@ahmetb • Service: Pod들을 네트워크로 접근할 수 있도록 묶어놓은 것
  • 25. 3. Ingress 설정을 안전하게 업데이트 하 는 방법이 없을까? • Ingress를 사용하려면 • Ingress 컨트롤러 Pod을 띄워야 하고 (eg., nginx, traefik) • 이미지는 뭐 쓸지, 몇 대 띄울지 등등 • Ingress 설정을 넣어줘야 한다 • 어떤 주소 / 경로는 어떤 서비스로..
  • 26. 3. Ingress 설정을 안전하게 업데이트 하 는 방법이 없을까? • Ingress를 사용하려면 • Ingress 컨트롤러 Pod을 띄워야 하고 (eg., nginx, traefik) • 이미지는 뭐 쓸지, 몇 대 띄울지 등등 • Ingress 설정을 넣어줘야 한다 • 어떤 주소 / 경로는 어떤 서비스로.. • 잘못된 설정을 넣을 경우 • Ingress controller ? • Pod은 아예 뜨지를 않으니 Liveness Probe / Readiness Probe 설정으로 검출 가 능 • Ingress 설정 • ???
  • 27. 3. Ingress 설정을 안전하게 업데이트 하 는 방법이 없을까? • Ingress 설정을 잘못할 경우.. • 예시) Traefik Ingress에서 서비스 weight를 잘못 넣으면(=합이 100이 초과하도록 넣으면) • 두 서비스 아무 곳으로도 요청을 보내지 않음 • 만약 서비스 전이라면 • 충분히 테스트해보고 요청을 받기 시작할 수 있음 • 운영중이라면 • 안 바꾸면 됨 • Ingress 파일을 분리해서 작성하는 식으로 실수 가능성을 줄일 수는 있다 https://docs.traefik.io/configuration/backends/kubernetes/#annotations
  • 28. 3. Ingress 설정을 안전하게 업데이트 하 는 방법이 없을까? • 하고 있지는 못하는데 하면 좋겠다 싶은 방법들 • 스테이지 클러스터를 따로 하나 만들어서 거기서 검증 • Traefik Controller를 두 군으로 띄워서 한쪽에서 검증 후 나머지에 반영 • https://docs.traefik.io/user-guide/kubernetes/#between-multiple-traefik- deployments • Minikube를 이용해서 테스트..?
  • 29. 3. Ingress 설정을 안전하게 업데이트 하 는 방법이 없을까? • 하고 있지는 못하는데 하면 좋겠다 싶은 방법들 • 스테이지 클러스터를 따로 하나 만들어서 거기서 검증 • Traefik Controller를 두 군으로 띄워서 한쪽에서 검증 후 나머지에 반영 • https://docs.traefik.io/user-guide/kubernetes/#between-multiple-traefik- deployments • Minikube를 이용해서 테스트..? • 조심만 하고 있습니다
  • 30. 못다한 이야기들 • 배포 / 로깅 • 클러스터 환경마다 너무 달라서 스킵. 사내 플랫폼 사용중 (관리 포인트를 줄이기 위해서) • 손으로 하는게 익숙해지면 점차 자동화하고 싶음 • 함께 익숙해지기 • 삽질이 왕도일까? • 경험치를 효율적으로 전파하는 법?