본문 바로가기

Infrastructure/Kubernetes

(43)
[Pod] 초기화 컨테이너 초기화 컨테이너 쿠버네티스 공식문서를 확인하며 초기화 컨테이너에 대해서 기억해야 하는 부분을 기록한다. 초기화 컨테이너는 파드의 앱 컨테이너들이 실행되기 전에 실행되는 특수한 컨테이너로 앱 이미지에는 없는 유틸리티 또는 설정 스크립트 등을 포함할 수 있다. 초기화 컨테이너는 containers 배열에 과 나란히 파드 스펙에 명시할 수 있다. 초기화 컨테이너는 일반 컨테이너와 비교하여 아래와 같은 차이가 있다. 초기화 컨테이너는 항상 완료를 목표로 실행된다. 각 초기화 컨테이너는 다음 초기화 컨테이너가 시작되기 전에 성공적으로 완료되어야 한다. 파드의 초기화 컨테이너가 실패하면, kubelet은 초기화 컨테이너가 성공할 때까지 반복적으로 재시작한다. 만약 파드의 restartPolicy를 Never로 설정..
[Pod] 라이프사이클 라이프사이클 쿠버네티스 공식문서를 확인하며 파드 라이프사이클에 대해서 기억해야 하는 부분을 기록한다. 파드는 정의된 라이프사이클을 따르며, Pending 단계에서 시작해서, 기본 컨테이너 중 적어도 하나 이상이 OK로 시작하면 Running 단계를 통과하고, 파드의 컨테이너가 실패로 종료되었는지 여부에 따라 Succeeded 또는 Failed 단계로 이동한다. 파드가 실행되는 동안, kubelet은 일종의 오류를 처리하기 위해 컨테이너를 다시 시작할 수 있다. 파드 내에서, 쿠버네티스는 다양한 컨테이너 상태를 추적하고 파드를 다시 정상 상태로 만들기 위해 취할 조치를 결정한다. 쿠버네티스 API에서 파드는 명세와 실제 상태를 모두 가지고 이러한 오브젝트의 상태는 일련의 파드 컨디션으로 구성된다. 사용자의..
[Pod] 개념 파드 쿠버네티스 공식문서를 확인하며 파드에 대해서 기억해야 하는 부분을 기록한다. “파드”는 쿠버네티스에서 생성하고 관리할 수 있는 배포 가능한 가장 작은 컴퓨팅 단위이며 하나 이상의 컨테이너의 그룹이다. “그룹”은 스토리지 및 네티워크를 공유하고, 해당 컨테이너를 구동하는 방식에 대한 명세를 갖는다. “파드의 콘텐츠”는 항상 함께 배치되고, 함께 스케줄되며, 공유 콘텍스트에서 실행된다. 파드는 애플리케이션 별 “논리 호스트"를 모델링한다. 여기에는 상대적으로 밀접하게 결합된 하나 이상의 애플리케이션 컨테이너가 포함된다. 클라우드가 아닌 콘텍스트에서, 동일한 물리 또는 가상 머신에서 실행되는 애플리케이션은 동일한 논리 호스트에서 실행되는 클라우드 애플리케이션과 비슷하다. 애플리케이션 컨테이너와 마찬가지로..
[워크로드] 개념 워크로드 쿠버네티스 공식문서를 확인하며 워크로드에 대해서 기억해야 하는 부분을 기록한다. “워크로드”는 쿠버네티스에서 구동되는 애플리케이션을 뜻한다. “워크로드”가 단일 컴포넌트이거나 함께 작동하는 여러 컴포넌트이든 관계없이, 쿠버네티스에서는 워크로드를 일련의 파드 집합 내에서 실행한다. 쿠버네티스에서 **Pod는 클러스터에서 실행 중인 컨테이너 집합을 의미**한다. 파드에는 정의된 라이프사이클이 있다. 일단 파드가 클러스터에서 실행되고 나서 해당 파드가 동작 중인 노드에 심각한 오류가 발생하면 해당 노드의 모든 파드가 실패하고 이러한 상황을 최종(final)로 취급한다. 최종 상황에서 사용자는 향후 노드가 복구되는 것과 상관 없이 Pod를 새로 생성해야 한다. “워크로드 리소스”는 사용자를 대신하여 파..
[컨테이너] 환경변수와 라이프사이클 훅(Hook) 환경변수와 라이프사이클 훅(Hook) 쿠버네티스 공식문서를 확인하며 환경변수와 라이프사이클 훅(Hook)에 대해서 기억해야 하는 부분을 기록한다. 환경변수 컨테이너 환경 컨테이너 환경은 컨테이너에 몇 가지 중요한 리소스를 제공한다. 하나의 이미지와 하나 이상의 볼륨이 결합된 파일 시스템 컨테이너 자신에 대한 정보 클러스터 내의 다른 오브젝트에 대한 정보 컨테이너 정보 컨테이너의 “호스트네임”은 컨테이너가 동작 중인 파드의 이름과 같다. **hostname 커맨드 또는 libc의 gethostname 함수 호출을 통해서 구할 수** 있다. 파드 이름과 네임스페이스는 다운워드(Downward) API를 통해 환경 변수로 구할 수 있다. 컨테이너 이미지에 정적으로 명시된 환경 변수와 마찬가지로, 파드 정의에서..
[컨테이너] 런타임클래스 런타임클래스(RuntimeClass) 쿠버네티스 공식문서를 확인하며 런타임클래스에 대해서 기억해야 하는 부분을 기록한다. 런타임클래스는 컨테이너 런타임 구성을 선택하는 기능으로 파드의 컨테이너를 실행하는 데 사용된다. 동기 서로 다른 파드간에 런타임클래스를 설정하여 성능과 보안의 균형을 유지할 수 있다. 일부 작업에서 높은 수준의 정보 보안 보증이 요구되는 경우, 하드웨어 가상화를 이용하는 컨테이너 런타임으로 파드를 실행하도록 예약하는 것을 선택할 수 있다. 이러한 작업은 몇가지 추가적인 오버헤드가 있지만 대체 런타임을 추가 분리하는 이익이 있다. 런타임클래스를 사용하여 컨테이너 런타임이 같으나 설정이 다른 여러 파드를 실행할 수 있다. [정리] 런타임클래스는 컨테이너 런타임을 구성하기 위해 사용되고 서..
[컨테이너] 이미지 이미지 쿠버네티스 공식문서를 확인하며 컨테이너 이미지에 대해서 기억해야 하는 부분을 기록한다. 컨테이너 이미지는 애플리케이션과 모든 소프트웨어 의존성을 캡슐화하는 바이너리 데이터를 나타낸다. 컨테이너 이미지는 독립적으로 실행할 수 있고 런타임 환경에 대해 잘 정의된 가정을 만드는 실행 가능한 소프트웨어 번들이다. 일반적으로 파드에서 참조하기 전에 애플리케이션의 컨테이너 이미지를 생성해서 레지스트리로 푸시한다. 이미지 이름 컨테이너 이미지는 일반적으로 pause, example/mycontainer 또는 kube-apiserver와 같은 이름을 부여하며 이름에는 레지스트리 호스트와 포트 번호까지 포함될 수 있다. 레지스트리 호스트 이름을 지정하지 않으면, 쿠버네티스는 도커 퍼블릭 레지스트리를 의미한다고 가..
[클러스터 아키텍처] 컨테이너 런타임 인터페이스(CRI) 컨테이너 런타임 인터페이스(CRI) 쿠버네티스 공식문서를 확인하며 CRI(컨테이너 런타임 인터페이스)에 대해서 기억해야 하는 부분을 기록한다. CRI는 클러스터 컴포넌트를 다시 컴파일 하지 않아도 Kubelet이 다양한 컨테이너 런타임을 사용할 수 있도록 하는 플러그인 인터페이스다. 클러스터의 모든 노드에 동작 중인 컨테이너 런타임이 존재해야, kubelet이 파드들과 컨테이너들을 구동할 수 있다. CRI는 kubelet과 컨테이너 런타임 사이의 통신을 위한 주요 프로토콜이다. 쿠버네티스 CRI는 클러스터 컴포넌트 kubelet과 컨테이너 런타임 사이의 통신을 위한 주요 gRPC 프로토콜의 정의한다. API kubelet은 gRPC를 통해 컨테이너 런타임과 연결할 때 클라이언트의 역할을 수행한다. 런타임..