-
[Kubernetes] Kubernetes ObjectContainer 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 update, rollback 등을 지원하는 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/v1kind: Jobmetadata:# Unique key of the Job instancename: example-jobspec:template:metadata:name: example-jobspec:containers:- name: piimage: perlcommand: ["perl"]args: ["-Mbignum=bpi", "-wle", "print bpi(2000)"]# Do not restart containers after they exitrestartPolicy: NeverDiscovery & 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: ServiceapiVersion: v1metadata:# Unique key of the Service instancename: service-examplespec:ports:# Accept traffic sent to port 80- name: httpport: 80targetPort: 80selector:# Loadbalance traffic across Pods matching# this label selectorapp: nginx# Create an HA proxy in the cloud provider# with an External IP address - *Only supported# by some cloud providers*type: LoadBalancer'Container' 카테고리의 다른 글
[docker] Unknown option dm.basesize (0) 2017.03.16 [Kubernetes] CrashLoopBackOff (0) 2017.03.10 [Docker] 로컬 저장소(Registy server) 구축 && docker hub 사용 (0) 2017.03.03 [Kubernetes] CentOS 7에 Kubernetes 설치 및 클러스터 구성 (0) 2017.02.14 [Kubernetes] CentOS7에 Kubernetes on Mesos 설치 (0) 2017.02.07