K8s 기본 빌딩 블럭

Jun Hwang

클러스터 내부구조.png

다이어그램에 표시된 것처럼 마스터 노드는 컨트롤 플래인으로서, 클러스터 관리를 담당합니다. 클러스터의 모든 활동을 조정하고 노드와 통신하여 Kubernetes 및 애플리케이션이 계속 실행되도록 합니다.
노드는 Kubernetes 클러스터에서 작업자 머신 역할을 합니다. 주목해야 할 한 가지 중요한 점은 이 노드가 물리적 컴퓨터 또는 가상 머신이 될 수 있다는 것입니다.

노드로 역할하기 위해서는 다음과 같은 요구 사항이 있습니다:

  • 각 노드에는 실행 중인 Kubelet이 반드시 있어야하고,
  • Docker와 같은 컨테이너 도구와
  • 실행 중인 kube-proxy 프로세스
  • 그리고, Supervisord 처럼 구성 요소를 다시 시작할 수 있는 프로세스가 있어야 합니다.

프로덕션의 설정에서는 Kubernetes를 사용하는 경우 최소한 노드 클러스터가 3개 이상인 것이 좋다는 것을 유의하세요.

실습을 위해 로컬 머신에 설치하여 테스트하려면 minikube가 간편한 방법이지만, Windows 프로페셔날에서만 가능합니다.
홈 버전의 윈도우 사용자는 인터렉티브 튜토리얼을 사용하세요.
미니큐브는 로컬 박스에 가상 머신을 생성하고 하나의 단일 노드가 포함된 간단한 클러스터를 배포하는 경량의 Kubernetes 구현체입니다.

Pods의 구성요소.png

어떤 시나리오에서는 포드에서 여러 도커 컨테이너를 실행할 수 있지만, 포드는 단일 배포 단위로서 밀접하게 연결되고 리소스를 공유하는 Kubernetes의 단일 애플리케이션 인스턴스를 나타냅니다.
포드는 일시적이고 일회적인 개체로 설계되었습니다. 그러므로 프로덕션 애플리케이션에서 단독으로 Pod를 생성하지 마십시오. 그런 생성은 기본 컨테이너가 실제로 작동하는지 테스트해야 할 때만 수행하는 것이 바람직합니다.

프로들은 Pod를 직접 사용하지 말고. 대신에 배포할 때 처럼 컨트롤러를 사용하라고 조언합니다.

게다가, 포드는 자가 치유되지 않습니다.
어떤 이유로 Pod가 죽으면 리스케줄 되지 않습니다. 또, 리소스가 부족하여 노드에서 포드가 종료되면 다른 건강한 노드에서 다시 시작되지 않습니다.
컨트롤러라고 하는 Pod를 관리하고 안정성을 추가하는 더 높은 수준의 구성이 있습니다.

수명 주기를 통해 Pod는 다음과 같은 상태를 갖습니다:

  • Pending
  • Running
  • Succeeded
  • Failed
  • Unknown
  • 그외, CrashLoopBackOff

파드의 status 필드는 phase 필드를 포함하는 PodStatus 오브젝트로 정의됩니다.

파드의 phase (단계)는 파드가 라이프사이클 중 어느 단계에 해당하는지 표현하는 간단한 고수준의 요약으로서, Phase는 컨테이너나 파드의 관측 정보에 대한 포괄적인 롤업이나, 포괄적인 상태 머신을 표현하도록 의도되지는 않았습니다. 파드 phase 값에서 숫자와 의미는 엄격하게 지켜집니다. 공식문서 내용 이외에는, 파드와 파드에 주어진 phase 값에 대해서 어떤 사항도 가정되어서는 안됩니다.

파드는 정의된 라이프사이클을 따릅니다: Pending 단계 (Phase)에서 시작해서, 기본 컨테이너 중 적어도 하나 이상이 OK로 시작하면 Running 단계를 통과하고, 그런 다음 파드의 컨테이너가 실패로 종료되었는지 여부에 따라 Succeeded 또는 Failed 단계로 이동합니다.

phase에 적용되는 값은 아래와 같습니다:

Pending은 Kubernetes 시스템에서 Pod를 수락했지만 컨테이너가 아직 생성되지 않았음을 의미합니다. 즉, 파드가 쿠버네티스 클러스터에서 승인되었지만, 하나 이상의 컨테이너가 설정되지 않았고 실행할 준비가 되지 않았습니다. 여기에는 파드가 스케줄되기 이전까지의 시간 뿐만 아니라 네트워크를 통한 컨테이너 이미지 다운로드 시간도 포함됩니다.

Running은 노드에서 포드가 예약되고 모든 컨테이너가 생성되고 적어도 하나의 컨테이너가 실행 중 상태인 실행 중입니다. 즉, 파드가 노드에 바인딩되었고, 모든 컨테이너가 생성되었으며, 적어도 하나의 컨테이너가 아직 실행 중이거나, 시작 또는 재시작 중에 있음을 의미합니다.

Succeeded는 Pod의 모든 컨테이너가 종료 상태가 0으로 종료되었음을 의미하고, 이는 성공적인 실행을 나타내며 다시 시작되지 않습니다.

Failed는 실패 상태, 즉 파드의 모든 컨테이너가 종료되었고 적어도 하나 이상의 컨테이너가 실패하여 0이 아닌 종료 상태를 반환했습니다. 다시말해, 해당 컨테이너는 non-zero 상태로 빠져나왔거나(exited) 시스템에 의해서 종료(terminated)되었음을 의미합니다.

Unknown은 알 수 없음, 즉 어떤 이유에 의해서 파드의 상태를 얻을 수 없는 경우입니다. 이 단계는 일반적으로 파드가 실행되어야 하는 노드와의 통신 오류로 인해 발생합니다.

그외에, CrashLoopBackOff이 있는데, 이는 어떤 이유로 컨테이너 시작에 실패하면 Kubernetes가 계속해서 Pod를 다시 시작하려고 시도하는 경우입니다.