• 모든 컨테이너는 파드(pod)에 속하는데, 파드란 쿠버네티스가 하나 또는 그 이상의 컨테이너를 관리하는 데 사용하는 단위다.
  • 파드는 다른 리소스가 관리하고, 이런 고수준 리소스는 컨테이너의 세부사항을 추상화 시킨다.
  • 이 방법으로 자기수복형(self-healing) 애플리케이션이나 바람직한 상태(desired-state) 워크플로가 가능해진다.

쿠버네티스는 어떻게 컨테이너를 실행하고 관리하는가

  • 컨테이너는 일반적으로 애플리케이션 구성 요소 하나를 실행하는 가상화된 환경 가리킨다.
  • 쿠버네티스는 이 컨테이너를 또 다른 가상 환경인 파드로 감싼다.
  • 파드는 컴퓨팅의 단위로, 클러스터를 이루는 노드 중 하나에서 실행된다.
  • 파드는 쿠버네티스로 관리되는 자신만의 가상 IP 주소를 가지며 이 주소로 가상 네트워크에 접속된 다른 파드, 심지어 다른 노드에서 실행되는 파드라도 통신을 주고 받을 수 있다.
  • 파드 하나는 대개 커넽이너 하나를 포함하는데, 설정에 따라 파드 하나가여러 개의 컨테이너를 포함할 수도 있다.
  • 파드 내에 포함된 모든 컨테이너는 같은 가상 환경에 포함되어 localhost로 서로 통신할 수도 있다.
  • 파드는 ‘쿠버네티스가 컨테이너를 실행하는 수단’
    • 쿠버네티스가 직접 컨테이너를 실행하지 않는다.
    • 컨테이너를 생성할 책임을 해당 노드에 설치된 컨테이너 런타임(예: docker)에 맡기는 형태다.
    • 컨테이너 런타임은 도커가 될 수도 있고, 그 외에 특이한 것이 될 수도 있다.
    • 파드는 쿠버네티스가 관리하는 리소스고, 컨테이너는 쿠버네티스 외부에서 관리된다.
  • 파드 실행후 파드 상세 정보 확인해보기
  • kubectl에는 파드와 같은 리소스 정보를 다양한 형태로 커스터마이징해서 출력하는 기능이 있다.
  • 파드는 파드를 생성할 때 한 노드에 배정된다. 그리고 이 파드를 관리하고 파드에 포함된 컨테이너를 실행하는 책임도 이 노드가 맡는다.
    • 이 과정은 컨테이너 런타임 인터페이스(CRI)라는 공통 API를 이용하여 컨테이너 런타임과 연동되는 형태로 진행된다.
    • CRI를 사용하면 해당 노드가 어떤 컨테이너 런타임을 실행 중이더라도 같은 방식으로 노드를 관리할 수 있다.
  • 쿠버네티스는 컨테이너를 파드로 추상화했기 때문에, 컨테이너가 일시적인 문제를 일으켜도 새로운 컨테이너를 추가하여 파드 상태를 복원할 수 있다.(자기수복성)
  • kubectl에는 네트워크 트래픽을 노드에서 파드로 전달할 수 있는 기능이 있다. 이 기능을 사용하면 간편하게 클러스터 외부에서 파드와 통신할 수 있다.

컨트롤러 객체와 함께 파드 실행하기

  • 어떤 노드가 고장을 일으킨다면 파드는 유실되며, 쿠버네티스는 자동으로 유실된 파드를 새 파드로 대체하지 않는다.
  • 컨트롤러 객체는 다른 리소스를 관리하는 쿠버네티스 리소스다.
    • 컨트롤러는 쿠버네티스 API와 연동하며 시스템의 현재 상태를 감시하다가 ‘바람직한 상태’와 차이가 생기면 필요에 따라 그 차이점을 바로잡는다.
  • 컨트롤러 객체 중에서 파드를 주로 관리하는 컨트롤러 객체는 디플로이먼트이다.
    • 어떤 노드가 고장을 이르켜 파드가 유실되며, 디플로이먼트가 대체 파드를 다른 노드에 실행한다.
    • 디플로이먼트로 파드 수릴 지정하면 그만큼 스케일링이 된다.
  • 디플로이먼트를 만들면 어래처럼 디플로이먼트에게 딸린 파드를 생성한다.
  • 컨트롤러(디플로이먼트 포함)는 자신이 관리해야할 리소스를 레이블을 이용해 추적한다.
    • 모든 쿠버네티스 리소스는 간단한 키-값 쌍 형태의 레이블을 가지며, 이 레이블을 우리가 원하는 데이터를 담는 데 사용할 수 있다.
    • 컨트롤러는 레이블 셀렉터를 통해 자신이 관리하는 리소스인지 판단한다.
    • 컨트롤러는 자신이 관리하는 리소스 목록을 직접 유지하지 않아도, 레이블 셀렉터가 컨트롤러 객체의 정의에 포함되어 있기 떄문에 컨트롤러 객체가 언제라도 쿠버네티스 API를 통해 자신이 관장하는 리소스를 찾아볼 수 있다는 점에서 매우 유연한 설계다.
  • 파드의 레이블을 함부로 수정하면 파드가 디플로이먼트의 관리에서 벗어난다.
  • 레이블을 강제소 수정해서 디플로이먼트가 관리하지 않던 파드를 관리 아래로 추가할 수 있다.
  • 포트포워딩 설정은 다른 리소스에도 적용된다. 이플로먼트를 예로 들면 디플로이먼트가 선택한 파드로 트래픽이 전달된다.