Kubernetes란?

다수의 머신(노드)으로 이루어진 클러스터 위에서 컨테이너를 배치하고, 개수를 유지하고, 업데이트하고, 접속 대상을 제공하기 위한 오케스트레이션 기반. 이용자는 Deployment나 Service 등의 리소스로 '바람직한 상태'를 선언하고, 컨트롤러가 실제 상태를 관찰하여 선언에 가깝게 만든다(조정, reconcile). 최소 단위는 Pod로, Pod가 사라지면 자동으로 다시 만들어지며, 롤링 업데이트나 부하에 따른 자동 스케일링도 수행할 수 있다. 줄여서 K8s라고도 쓴다.

일본어 명칭: Kubernetes

Kubernetes은(는) 클라우드와 컨테이너의 기초 등 1개 분야의 연습 문제 10개에 나와요.

분야: 클라우드와 컨테이너의 기초

주요 리소스

Pod는 컨테이너를 묶은 최소 단위, ReplicaSet은 Pod의 수를 유지하는 것, Deployment는 그것을 사용해 버전 업데이트나 롤백을 수행하는 것입니다. Service는 여러 Pod에 안정적인 이름과 주소를 부여하고, Ingress는 클러스터 밖에서 온 HTTP 요청을 경로나 호스트 이름으로 Service에 분배합니다. ConfigMap과 Secret은 설정이나 기밀 값을 이미지와 분리하여 전달하고, namespace는 클러스터 안을 팀이나 환경별로 구분합니다.

선언과 조정

이용자는 '이 버전의 Pod를 3개 실행한다' 같은 상태를 YAML 등으로 선언하여 Kubernetes에 등록합니다. 컨트롤러는 반복해서 실제 상태를 확인하여, Pod가 사라지면 만들고 수가 많으면 줄입니다. 절차가 아니라 결과를 선언하므로, 같은 정의를 몇 번 적용해도 같은 상태에 수렴하며, 노드 고장에서도 자동으로 회복합니다.

자원 지정과 프로브

컨테이너에는 확보하고 싶은 CPU나 메모리의 양(requests)과 상한(limits)을 지정하며, 스케줄러는 requests를 바탕으로 Pod를 둘 노드를 고릅니다. readiness 프로브는 요청을 받을 수 있는지 조사하여 분배를 제어하고, liveness 프로브는 응답하지 않게 된 컨테이너를 재시작시킵니다. HorizontalPodAutoscaler는 requests에 대한 사용률 등의 지표로부터 Pod의 수를 늘리고 줄입니다.

도전해 보기: Kubernetes 관련 문제

Kubernetes에서 배포하고 관리하는 최소 단위로, 하나 이상의 컨테이너를 묶어 같은 IP 주소와 볼륨을 공유하게 하는 것은?

  1. A노드
  2. BService
  3. CPod
정답과 해설 보기

정답: C. Pod

Pod는 Kubernetes가 배치하여 실행하는 최소 단위로, 안의 컨테이너는 네트워크 네임스페이스를 공유하므로 서로 localhost로 통신할 수 있고 같은 볼륨도 사용할 수 있습니다. 대부분의 경우 하나의 Pod에 하나의 애플리케이션 컨테이너를 넣으며, 로그 전송 등의 보조 컨테이너를 같은 Pod에 추가하기도 합니다. Pod는 일회용이어서 다시 만들어지면 IP 주소도 바뀌므로, 보통은 Deployment 등을 통해 간접적으로 관리합니다. 노드는 Pod가 동작하는 머신이고, Service는 여러 Pod에 대한 안정적인 접속 대상입니다.

Kubernetes에서 replicas: 3을 지정한 Deployment의 Pod가 3개 동작하고 있다. 이 중 하나의 Pod를 kubectl delete pod로 삭제했을 때 일어나는 일로 올바른 것은?

  1. ADeployment의 설정도 replicas: 2로 바뀌고, Pod는 2개인 채로 계속 동작한다
  2. B실제 개수가 지정한 3에 못 미치게 된 것을 컨트롤러가 감지하고 새 Pod를 하나 만든다
  3. CDeployment에 속한 나머지 2개의 Pod도 삭제되어 Deployment 전체가 정지한다
정답과 해설 보기

정답: B. 실제 개수가 지정한 3에 못 미치게 된 것을 컨트롤러가 감지하고 새 Pod를 하나 만든다

Kubernetes에서는 이용자가 'Pod를 3개 실행한다'는 바람직한 상태를 선언하고, 컨트롤러가 실제 상태를 반복해서 관찰하여 차이가 있으면 선언에 가까워지도록 조작합니다(조정, reconcile). Pod를 하나 삭제하면 실제 개수가 2가 되므로, ReplicaSet의 컨트롤러가 새 Pod를 만들어 3으로 되돌립니다. 노드 고장으로 Pod가 사라진 경우에도 같은 구조로 다른 노드에 Pod가 다시 만들어집니다. Pod의 수를 정말로 줄이고 싶을 때는 Pod를 지우는 것이 아니라 Deployment의 replicas를 변경합니다.

자주 묻는 질문

Docker와 Kubernetes는 무엇이 다른가요?

Docker는 주로 머신 1대에서 이미지를 만들고 컨테이너를 실행하기 위한 도구입니다. Kubernetes는 다수의 머신에 걸쳐 어느 노드에서 실행할지, 몇 개 실행할지, 어떻게 업데이트할지를 관리하는 기반입니다. Kubernetes는 Docker 등으로 만든 표준 형식의 이미지를 사용하여 컨테이너를 실행합니다.

작은 시스템에서도 Kubernetes를 사용해야 하나요?

꼭 그렇지는 않습니다. Kubernetes는 높은 가용성이나 자동 회복, 다수 서비스의 관리에 강점이 있는 반면, 클러스터 운용에는 지식과 수고가 듭니다. 규모가 작으면 머신 1대에서의 컨테이너 실행이나 클라우드의 관리형 컨테이너 실행 서비스 쪽이 적합한 경우도 있습니다.

해설 속 Kubernetes

Kubernetes이(가) 나오는 문제 (10)

  1. Kubernetes에서 배포하고 관리하는 최소 단위로, 하나 이상의 컨테이너를 묶어 같은 IP 주소와 볼륨을 공유하게 하는 것은?
  2. Kubernetes에서 replicas: 3을 지정한 Deployment의 Pod가 3개 동작하고 있다. 이 중 하나의 Pod를 kubectl delete pod로 삭제했을 때 일어나는 일로 올바른 것은?
  3. Kubernetes의 Deployment에서 Pod 템플릿의 컨테이너 이미지를 새 버전으로 변경했다. 기본 업데이트 방식(RollingUpdate)에서 일어나는 일로 올바른 것은?
  4. Kubernetes에서 Pod는 다시 만들어질 때마다 IP 주소가 바뀐다. 다른 애플리케이션이 라벨로 고른 여러 Pod에, 바뀌지 않는 이름과 주소로 접속하여 부하를 분산할 수 있게 하는 리소스는?
  5. Kubernetes 클러스터에서 하나의 호스트 이름으로 도착한 HTTPS 요청 중 경로가 /api로 시작하는 것은 api의 Service로, 그 밖의 것은 web의 Service로 분배하고 싶다. 이 분배 규칙을 정하는 데 적합한 리소스는?
  6. Kubernetes의 Secret에 데이터베이스의 비밀번호를 저장한다. Secret의 설명으로 올바른 것은?
  7. Kubernetes의 웹 애플리케이션에서, liveness 프로브의 확인 처리 안에서 의존 대상인 데이터베이스에 접속할 수 있는지까지 조사하도록 했다. 이 설정으로 일어날 수 있는 문제로 가장 적절한 것은?
  8. Kubernetes의 HorizontalPodAutoscaler에서 Pod의 CPU 사용률 목표를 70%, Pod 수의 범위를 1~10으로 했다. 현재 5개 Pod의 평균 CPU 사용률이 30%이다. 필요한 Pod의 수를 ⌈현재 수 × 현재 사용률 ÷ 목표 사용률⌉(⌈ ⌉은 올림)로 구할 때, 필요한 Pod의 수로 올바른 것은?
  9. Kubernetes에서 컨테이너에 설정하는 자원의 requests와 limits의 설명으로 올바른 것은?
  10. 위와 같이 데이터베이스의 접속 대상을 이미지에 써 넣지 않고, 컨테이너를 시작할 때 환경 변수로 전달하도록 했다. 이 설계의 주된 이점으로 가장 적절한 것은?

관련 용어

Pod 컨테이너(Container) 환경 변수(Environment Variable) 컨테이너 이미지(Container Image) DNS(도메인 네임 시스템) HTTP(하이퍼텍스트 전송 프로토콜) TLS 리버스 프록시(Reverse Proxy) 데드락(Deadlock) 가용 영역(Availability Zone)

용어집으로 돌아가기