TreeviewCopyright © Pengfei Ni all right reserved, powered by aleen42

Kubernetes 기본개념

Container

컨테이너는 이식 가능하고, 가벼운 운영 체제 레벨에서의 가상화 기술입니다. 네임 스페이스를 사용하여 다른 소프트웨어 운영 환경을 격리하고 소프트웨어가 포함된 운영 환경을 미러링하여 어디서나 컨테이너를 쉽게 실행할 수 있습니다.

컨테이너가 작고 빠르게 실행할 수 있으므로, 각 컨테이너 이미지에 어플리케이션을 패키지화할 수 있습니다. 미러링되는 일대일 어플리케이션에는 많은 이점이 있습니다. 컨테이너를 사용하는 경우 외부 인프라 환경과의 바인딩이 필요하지 않습니다. 각 어플리케이션은 외부 종속성을 필요로하지 않으며 외부 인프라 환경에 종속될 필요가 없기 때문입니다. 개발에서 프로덕션까지의 일관성(consistency)을 확보하기 위한 완벽한 솔루션입니다.

컨테이너는 모니터 및 관리에 도움이 되는 가상 머신(virtual machine)보다 더 투명합니다. 특히 컨테이너 프로세스의 라이프 사이클은 컨테이너 내의 프로세스에 의해 숨겨지기보다는 인프라에 의해 관리됩니다. 마지막으로, 각 어플리케이션은 컨테이너로 랩핑되어져 어플리케이션을 개발 관리하는 것과 컨테이너를 개발 관리하는 것은 동일합니다.

Kubernetes는 컨테이너를 관리하기 위해 팟(Pod)을 사용해야하며 각 팟에는 하나 이상의 컨테이너가 포함될 수 있습니다.

Pod

팟은 PID, IPC, 네트워크 및 UTS 네임 스페이스를 공유하는 긴밀하게 압축된 컨테이너들의 모음이며 Kubernetes 스케줄링의 기본 단위입니다. 팟의 디자인 철학은 하나의 팟에서 네트워크와 파일 시스템을 공유하도록 여러 컨테이너를 지원하는 것인데, 이로 인해 컨터이너들은 프로세스간 통신 및 파일 공유를 통해 간단하고 효율적인 방식으로 결합될 수 있습니다.

pod

Kubernetes에서는 모든 객체가 매니페스트 (yaml 또는 json)를 사용하여 정의됩니다. 예를 들어, 간단한 nginx 서비스는 nginx를 반영하는 컨테이너가 포함된 nginx.yaml로 정의 할 수 있습니다.

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80

Node

노드는 실제로 호스트를 실행하는 팟입니다. 물리적인 머신이 될 수도 있고 가상 머신이 될 수도 있습니다. 여러 팟을 다루기 위해서는 최소한 각 노드에서는 컨테이너 런타임 (예: 도커 또는 rkt), kubelet 및 kube-proxy 서비스를 실행해야 합니다.

node

Namespace

네임 스페이스는 시스템 내의 객체를 서로 다른 프로젝트 그룹 또는 사용자 그룹으로 나눌 수 있는 리소스 및 객체의 추상 콜렉션입니다. 일반적인 팟, 서비스, 복제 컨트롤러 및 배포는 네임 스페이스(기본값은 default)에 속하며 node, persistentVolumes 등은 네임 스페이스에 속하지 않습니다.

Service

서비스는 레이블을 통해 응용 프로그램에 대한로드 균형 조정 및 서비스 검색을 제공하는 응용 프로그램 서비스 추상화입니다. 레이블과 일치하는 팟 IP 및 포트 목록은 엔드 포인트를 구성하며, kube-proxy에 의해 서비스 IP 로드와 엔드 포인트 사이의 균형을 조정합니다.

각 서비스는 백엔드 컨테이너 작업에 대해 알 필요없이 다른 컨테이너가 서비스에 액세스 할 수 있는 클러스터 IP (클러스터 내에서만 액세스 할 수 있는 가상 주소)와 DNS 이름을 자동으로 할당합니다.

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - port: 8078 # the port that this service should serve on
    name: http
    # the container on each pod to connect to, can be a name
    # (e.g. 'www') or a number (e.g. 80)
    targetPort: 80
    protocol: TCP
  selector:
    app: nginx

Label

레이블은 Kubernetes 객체를 식별하고 객체에 key/value 형식으로 첨부되는 표입니다 (키의 최대 길이는 63 바이트를 초과할 수 없으며 값은 null 또는 최대 253 바이트의 문자열일 수 있음).

레이블은 고유성을 제공하지 않으며 사실 많은 객체 (예: 팟)는 특정 레이블을 사용하여 특정 어플리케이션임을 나타냅니다.

Label을 정의한 후에 다른 객체는 Label Selector를 사용하여 동일한 레이블을 가진 객체 그룹을 선택할 수 있습니다 (예: ReplicaSet 및 Service 사용 레이블을 사용하여 팟 그룹을 선택).

Label Selector는 다음과 같은 방법을 지원합니다.

  • app=nginxenv!=production와 같은 방식
  • env in (production, qa)와 같은 집합
  • app=nginx,env=test처럼 여러 라벨 (AND인 객체들)

Annotations

어노테이션은 key/value 형식으로 첨부된 주석입니다. 객체를 표시하고 선택하는 데 사용되는 레이블과 달리 어노테이션은 어플리케이션을 배포하고, 보안 정책 및 예약 정책을 지원하기 위한 추가 정보를 기록하는 데 사용됩니다. 예를 들어, deployment 객체는 주석을 사용하여 롤링 업데이트 상태를 기록합니다.

results matching ""

    No results matching ""