ABOUT ME

Today
Yesterday
Total
  • Kubernetes - Pods
    TECH/Kubernetes 2023. 11. 9. 17:42

    파드를 관리하기 위한 워크로드 리소스

    일반적으로 파드를 직접 생성할 필요 없다. 대신, DeploymentJob 과 같은 워크로드 리소스를 이용해서 생성한다. 파드가 상태를 추적할 필요가 있다면 StatefulSet 을 사용하는 것을 고려해보자.

    • k8s 클러스터 내의 파드는 두 가지 주요 방식으로 사용된다.
      • 단일 컨테이너를 실행하는 파드: "one-container-per-Pod" 모델은 가장 흔한 케이스이다. 이 경우, 파드를 단일 컨테이너를 감싸고 있는 wrapper로 생각하면 된다. k8s는 단일 컨테이너를 직접 관리하는게 아니라 컨테이너를 관리한다.
      • 함께 실행해야 하는 여러 컨테이너를 실행하는 파드: 파드는 강하게 결합되고, 리소스를 공유해야하는 여러개의 함께 위치하는 컨테이너로 구성된 애플리케이션을 캡슐화 할 수 있다. 이렇게 함께 위치한 컨테이너들은 하나의 응집된 서비스를 형성한다. 예를 들어, 한 컨테이너는 공용으로 제공되는 데이터를 저장한 공유 볼륨에서 데이터를 제공하고, 별도의 사이드카 컨테이너는 해당 파일을 새로 고치거나 업데이트 한다. 파드는 이 컨테이너들, 저장 리소스, 임시 네트워크를 하나의 유닛으로서 wrapping한다.
    • 각 파드는 주어진 애플리케이션에 대해 하나의 인스턴스만 실행하도록 되어 있다. 애플리케이션을 스케일하고 싶다면, 여러개의 파드를 이용해야 한다. k8s에서 이것은 replication 으로 부른다. replicated pods는 워크로드 리소스와 해당 워크로드 리소스의 컨트롤러에 의해 일반적으로 하나의 그룹으로서 생성되고, 관리된다.

    파드와 컨트롤러

    여러 파드를 생성하고 관리하기 위해 워크로드 리소스를 사용할 수 있다. 리소스에 대한 컨트롤러는 replication과 롤아웃 그리고 파드 실패시 automatic healing을 처리한다. 예를 들어, 노드 장애시 컨트롤러는 해당 노드의 파드가 동작을 멈춘 것을 발견하고 대체 파드를 생성한다. 스케줄러는 대체 파드를 정상 노드에 위치시킨다.

    파드가 어떻게 여러 컨테이너를 관리하는가?

    파드는 응집된 서비스 유닛을 형성하는 여러개의 동시에 동작하는 프로세스(컨테이너)를 지원하도록 설계되어 있다. 파드 내의 컨테이너들은 클러스터 내의 동일한 물리적, 가상 머신에서 자동으로 함께 위치되고, 함께 스케줄링 된다. 컨테이너는 리소스와 의존성을 공유하며, 서로 통신하고, 어떻게 종료될지를 함께 조정한다.

    예를 들어, 공유 볼륨에 있는 파일에 대한 웹 서버로서 동작하는 컨테이너가 있고, 리모트 소스에서 이 파일들을 업데이트 하는 분리된 사이드 카 컨테이너가 있다고 해보자.

    일부 파드는 app container 뿐만 아니라 init container를 가질 수 있다. 기본적으로, init container는 app container가 시작되기 전에 실행되고 종료된다.

    Working with Pods

    k8s에서 싱글톤 파드이더라도 파드를 직접 생성하는 일은 극히 드물 것이다. 왜냐면 파드는 일시적이고, disposable한 엔티티로 설계됐기 때문이다. 파드가 생성되면, 새로운 파드는 클러스터 내의 노드에 스케줄된다. 파드는 실행이 끝나거나 파드 객체가 삭제될 까지 해당 노드에 남아있다. 파드는 리소스가 부족하거나 노드가 실패하면 evicted된다.

    Note: 파드 내의 컨테이너를 재시작하는 것과 파드를 재시작하는 것을 혼동해서는 안된다. 파드는 프로세스가 아니고 실행되는 컨테이너의 환경이다. 파드는 삭제되기 전까지 지속된다.

Designed by Tistory.