ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kubernetes] Kubernetes Object
    Container 2017. 3. 7. 18:00


    Resource Categories


    : Object를 Resource Type에 따라 분류함

    Workloads

    : 클러스터에서 컨테이너를 관리하고 실행하는데 사용하는 객체들이다.

        • Deployment
        • Jobs
        • Pod
        • ReplicationController
        • StatefulSets

    Discovery & Load Balancing

    : 이 자원들은 외부 접속이 가능하며 부하 분산된 'Service'에 'Workloads'를 연결하는데 사용하는 객체들이다.

        • Service
        • Ingress

    Config & Storage

    : 이 자원들은 애플리케이션에 초기화 데이터를 삽입하는데 사용하고, 컨테이너 외부에 있는 데이터를 유지하는데 사용하는 객체들이다.

        • ConfigMaps
        • Secrets
        • Volumes

    Metadata

    : 이 자원은 'workloads'를 scaling(크기 조정)을 위한 HorizontalPodAutoscaler와 같이 클러스터 내의 다른 자원의 동작을 구성하는 데 사용하는 객체들이다.

        • ThirdPartyResource
        • Event

    Cluster

    : 이 자원 객체들은 클러스터 자체 구성 방법을 정의한다. 일반적으로 클러스터 운영자에 의해서만 사용된다.

        • Namespace
        • Node
        • Role



    Workloads

    : workload 자원은 클러스터에서 컨테이너를 관리하고 실행한다. 컨테이너는 Pod를 통한 컨트롤러에 의해 생성된다. Pod는 컨테이너를 실행하고 컨테이너에 유입된 공유 또는 영구 저장소 볼륨 및 구성 또는 비밀 데이터와 같은 환경 종속성을 제공한다.


    주요 object는 다음과 같다.

    - Deployments : stateless(이전 상태 기록 x) 영구적 App (예: http 서버)

    - StatefulSets : stateful(상태 기억) 영구적 App (예: 데이터베이스)

    - Jobs : Run-to-completion(현재 작업이 다음 작업이 실행되기 전에 끝남) App (예: 배치 작업)


    Deployment

    : Deployment를 통해 Pod 및 ReplicaSets에 대한 선언적 업데이트가 가능하다.

    (rolling updaterollback 등을 지원하는 pod, replica set 이다.)


    ##Deployment Config to run 3 nginx instances (max rollback set to 10 revisions).

    apiVersion: extensions/v1beta1

    kind: Deployment

    metadata:

      # Unique key of the Deployment instance

      name: deployment-example

    spec:

      # 3 Pods should exist at all times.

      replicas: 3

      # Keep record of 2 revisions for rollback

      revisionHistoryLimit: 2

      template:

        metadata:

          labels:

            # Apply this label to pods and default

            # the Deployment label selector to this value

            app: nginx

        spec:

          containers:

          - name: nginx

            # Run this image

            image: nginx:1.10



    job

    Job은 단일 작업의 구성을 나타낸다.

    ##Job Config to print pi up to 2000 digits (then exit).
    apiVersion: batch/v1
    kind: Job
    metadata:
      # Unique key of the Job instance
      name: example-job
    spec:
      template:
        metadata:
          name: example-job
        spec:
          containers:
          - name: pi
            image: perl
            command: ["perl"]
            args: ["-Mbignum=bpi", "-wle", "print bpi(2000)"]
          # Do not restart containers after they exit
          restartPolicy: Never




    Discovery & Load balancing

    : Discovery 및 Load Balancing 자원은 엑세스 가능한 부하 분산된 'service'와 'workloads'를 연결(접착)할 책임이 있다. 기본적으로 Workloads는 오직 클러스터내에서만 접근할 수 있고, LoadBalancer 혹은 NodePort Service를 사용하여 반드시 외부적으로 노출되어야만 한다. 개발을 위해 내부적으로 Workloads는 api master를 통한 proxy(kubectl proxy)를 거쳐 접근되어질 수 있다.


    자원의 주요 object는 다음과 같다.

    - Services : 여러 Workload 복제를 거쳐 부하분산된 하나의 ip endpoint를 제공함

    - Ingress : 하나 이상의 라우팅되는 http endpoint를 제공함.


    service

    : service는 프록시가 수신하는 로컬 포트(예:3306)와 프록시를 통해 전송된 요청에 응답할 pod를 결정하는 선택기로 구성된 소프트웨어서비스(예:mysql)의 명명된 추상화이다. 


    ##Service Config: app label이 있는 모든 Pod의 트래픽을 load balancing 한다. port 80에서 수신하고, port 80으로 보낸다. 외부에서 엑세스할 수 있는 endpoint를 노출한다.

    kind: Service
    apiVersion: v1
    metadata:
      # Unique key of the Service instance
      name: service-example
    spec:
      ports:
        # Accept traffic sent to port 80
        - name: http
          port: 80
          targetPort: 80
      selector:
        # Loadbalance traffic across Pods matching
        # this label selector
        app: nginx
      # Create an HA proxy in the cloud provider
      # with an External IP address - *Only supported
      # by some cloud providers*
      type: LoadBalancer


Designed by Tistory.