4월 26일 쿠버네티스 온라인 세미나 Q&A _ (1) Maintenance

NAVER Cloud
NAVER Cloud
Published in
5 min readMay 8, 2019

‘네이버 클라우드 플랫폼의 개발자들은 컨테이너를 어떻게 사용할까?’

지난 4월 26일 진행하였던 쿠버네티스 웨비나에서 많은 분들이 궁금해하신 질문들과 그에 대한 답변입니다. 컨테이너와 도커, 쿠버네티스 활용에 도움이 되셨으면 합니다.

□ Maintenance

Q1.

쿠버네티스에서 제공하는 무중단 서비스(Fault Tolerance)가 HA(High availability)와 차이 나는 부분이 있나요? 아무리 무중단 서비스라 해도 컨테이너가 죽은 몇 초 동안에도 서비스에 장애가 발생할 수 있기 때문에 이러한 부분을 어떻게 무중단 서비스로 해결하는지 궁금합니다.

A1.

컨테이너 오케스트레이션의 경우 Old Version를 유지하면서 New Version이 모두 배포됐을 때 Old Version를 제거하기 때문에 무중단 배포가 가능합니다. 이 방식은 아래 BlueGreen 배포 링크를 참고해주세요.

- High Availability: 고가용성은 긴 시간 동안 운영이 가능한 시스템의 상태를 말하며, 99.9%처럼 퍼센트로 표시합니다.

- Fault Tolerance: 시스템의 결함이 고장으로 이어지지 않도록 하는 것; HA(고가용성)와 매우 유사하지만 중단 시간을 제로로 보장

BlueGreen 배포: https://www.ianlewis.org/en/bluegreen-deployments-kubernetes

Q2.

특정 pod 에서 CPU 나 Memory 선점을 막고자 리소스 limit 값을 설정하고 그 값에 도달하면 사용자 알림이나 재시작 등의 동작을 하고 싶은데 참고할 문서가 있을까요?

A2.

임계치에 대한 알람 기능은 prometheus의 alertmanager(https://prometheus.io/docs/alerting/alertmanager/) 을 이용할 수 있습니다.

Q3.

Readiness Probe로 실패 시 service에서 제외한다고 하셨는데 그럼 제외한 이후 실패한 컨테이너는 그대로 남게 되나요 아니면 종료시키고 다시 시작되나요?

A3.

Readiness Probe는 애플리케이션이 일시적으로 트래픽을 처리할 수 없을 경우에 사용합니다. 애플리케이션을 종료하기를 원하지도 않지만, 트래픽을 보내는 것 또한 의도치 않을 때 사용합니다. 주기적으로 서비스 가능한 상태인지 체크하는 방법으로서, 종료시키고자 한다면 Liveness Probe와 연계하여 사용하셔야 합니다.

Q4.

롤링 업데이트의 버전 관리 최대 수는 얼마이며 주기는 어떻게 되나요?

A4.

Deployment 에서 관리할 수 있는 버전 관리의 수는 기본이 10개이며 spec.revisionHistoryLimit 값을 지정하면 원하는 개수로 관리가 가능합니다.

Kubernetes Service에서 업데이트 주기를 관리하지는 않습니다.

참고: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#revision-history-limit

Q5.

k8s에서 무중단 서비스를 위한 롤링업데이트를 할 때 특정 pod나 컨테이너에 사용자 세션이 유지되고 있다면 강제로 세션을 종료하거나 타임아웃을 설정할 수 있나요?

A5.

쿠버네티스에서 특정 사용자의 연결이 특정 pod에 상태가 유지되길 원하는 경우, 쿠버네티스의 Service에 SessionAffinity를 통해 설정하실 수 있습니다. 기본적으로 ClientIP기반으로 동작합니다. Ingress의 경우에는 세션 사용을 위한 쿠키명을 입력하는 것으로 설정하실 수 있습니다. 세션 유지는 사용자의 앱 설정에 의존성이 있습니다.

Q6.

Kubernetes 에서 IPC 자원도 관리한다고 들었는데 해당 기반에서 컨테이너 간 IPC 통신도 가능한 건가요?

A6.

기본적으로 k8s의 Pod 간 IPC 통신은 별도 설정 없이 되지 않아 이 정책을 따라가고 있습니다.

Q7.

저장된 이미지의 보관 및 삭제 정책,

fail pod의 최대 유지 기간 (문제 원인 분석 등의 목적 등),

이미지의 확대 시 증분인지 새로운 pod 생성인지 궁금합니다.

A7.

Pod의 경우에는 Liveness Probe를 통해 실패한 컨테이너는 제거가 됩니다. 기본값은 10초마다 질의하며, 3번 실패 시 컨테이너를 회수합니다.

이 경우 pod의 로그 또한 제거되며, 로그 확인을 위해 pod를 유지하는 방법보다는 pod의 로그를 외부로 전송하는 방법을 권장해드리고 있습니다. fluentd 등의 솔루션을 연동하여 object storage에 전송하는 방법을 통해 로그 중앙화를 구성할 수 있습니다.

네이버 클라우드 플랫폼에서는 손쉬운 로그 연동을 위해 이후 솔루션 제공 예정에 있습니다. 각 가상머신에 저장된 컨테이너 이미지들은 쿠버네티스의 imageManager에 의해 관리되며, 사용되지 않은 이미지들은 제거됩니다.

내부 설정으로 image-gc-high-threshold, image-gc-low-threshold의 값이 있으며 디스크의 80% 용량을 차지했을 때 삭제를 시도합니다.

Q8.

k8s도 컨테이너로 올라가는 걸로 알고 있는데 k8s로 무중단 업데이트가 가능한가요?

A8.

BlueGreen 배포를 이용하시면 무중단 업데이트가 가능합니다.

BlueGreen 배포: https://www.ianlewis.org/en/bluegreen-deployments-kubernetes

--

--

NAVER Cloud
NAVER Cloud

We provide cloud-based information technology services for industry leaders from startups to enterprises.