backend/kubernetes docs

kubernetes docs - Container

seul chan 2020. 5. 22. 21:56

Container

Image

사용자 docker image를 생성하고 레지스트리에 푸시하여 대비한다.

image 속성은 docker 커맨드에서 지원하는 문법과 같음.

Image update

이미지 업데이트 방법은 정책에 따라 달라짐.

기본 Pull 정책은 IfNotPresent이다. 이는 이미 존재하는 이미지에 대해서는 pull 하지 않음.

pull을 강제하고 싶으면 다음중 하나를 하면 된다.

  • container의 imagePullPolicyAlways로 설정
  • imagePullPolicy를 생략하고 :latest를 사용
  • imagePullPoicy와 사용할 이미지 태그 새략
  • AlwaysPullImages adminssion controller 활성화

:lastest 사용은 피하는게 좋다고 한다. 구성 모범 사례- 컨테이너 이미지 참고

Use pirvate registry

요 부분은 각각의 private registry에서 사용하는 credential 및 사용법에 대해서 자세히 설명해 둔 것이다. 필요할 경우 해당 문서를 직접 참고하는 것이 좋을듯

컨테이너 개요

컨테이너는 런타임에 필요한 종속성과 애플리케이션의 컴파일 된 코드를 패키징 하는 기술

컨테이너는 기본 호스트 인프라 환경에서 애플리케이션의 실행환경을 분리한다. 따라서 다양한 클라우드 환경이나 운영체제에서 쉽게 배포 할 수 있다.

Container Image

컨테이너 이미지는 즉시 실행할 수 있는 소프트웨어 패키지

  • application을 실행하는데 필요한 모든 것을 포함 (code, runtime, application, system libraries)
  • 원칙적으로 컨테이는 변경되지 않음 (이미 구동 중인 컨테이너의 코드를 변경할 수 없음)

Container Runtime

컨테이너 런타임은 컨테이너 실행을 담당하는 소프트웨어.

  • Kubernetes는 Docker, containered, CRI-O 등 여러 컨테이너 런타임을 지원한다.

런타임 클래스 -> later

이 부분은 잘 이해가 되지 않아 일단 넘어간다.

Feature stake: Kubernetes v1.12 [alpha]

런타임클래스는 컨테이너 런타임을 구성을 선택하는 기능

컨테이너 환경 변수

Container environment

Kubernetes containere environment는 컨테이너에 중요한 몇 가지 리소스를 제공

  • 하나의 이미지와 한 개 이상의 볼륨이 결합된 파일 시스템
  • 컨테이너 자신의 정보
  • 클러스터 내의 다른 오브젝트 정보

컨테이너 라이프사이클 훅

컨테이너가 관리 라이프사이클 동안의 이벤트에 의해 발동되는 코드를 실행하기 위해서 컨테이너 라이프사이클 훅 프레임워크를 사용하는 방법에 대해서 설명

개요

Angular 등 다른 프로그래밍 언어 프레임워크처럼 Kubernetes도 컨테이너에 lifecycle hook을 제공한다.

이는 container가 관리 라이프사이클의 이벤트를 인지하고 이에 맞는 훅이 실행될 떄 핸들러에 코드를 실행할 수 있게 해 준다.

Container hook

container에 노출되는 훅은 두가지가 있다

PostStart

  • 컨테이너가 생성된 직후에 실행
  • entrypoint에 앞서 실행된다는 보장은 없음
  • 파라미터는 핸들러에 전달되지 않음

PreStop

  • API요청이나 liveness probe 실패 등의 이벤트로 컨테이너가 종료되기 직전에 호출된다.
  • 이미 terminated, completed 상태라면 preStop 훅 요청이 실패

훅 핸들러 구현

훅의 핸들러를 구현하고 등록함으로써 접근 가능.

  • Exec - 컨테이너의 cgroups와 namespace 안에서 pre-stop.sh같은 특정 커맨드를 실행
  • HTTP - 특정 엔드포인트에 대해 HTTP 요청 실행

훅 핸들러 실행

hook이 호출되면 해당 hook이 등록된 컨테이너에서 핸들러를 실행한다.

가능한 한 가벼운 hook handler를 만들어야 함