KEMBAR78
Introduce Google Kubernetes | PPTX
Made by Yongbok Kim (ruo91)
# 0012015.09.05
Language: Korean
Linux Container를 관리 하기 편하도록
# 002
Linux Container를 관리 하기 편하도록
구글이 만든 오픈소스!
# 003
Linux Container를 관리 하기 편하도록
구글이 만든 오픈소스!
CaaS(Container as a Service)!
# 004
그럼 어떻게 발음하나요?
# 005
그럼 어떻게 발음하나요?
# 006
그럼 어떻게 발음하나요?
# 007
그럼 어떻게 발음하나요?
# 008
koo-ber-net-ees
그럼 어떻게 발음하나요?
# 009
koo-ber-net-ees
쿠버네티스
그럼 어떻게 발음하나요?
# 010
koo-ber-net-ees
쿠버네티스
혹은
그럼 어떻게 발음하나요?
# 011
koo-ber-net-ees
쿠버네티스
혹은
k-eights
그럼 어떻게 발음하나요?
# 012
koo-ber-net-ees
쿠버네티스
혹은
k-eights
케이에잇츠
# 013
그냥...
# 014
그냥...
‘쿠버네티스’로 합시다!
# 015
구글 규모만 봐도 답 나오죠.
# 016
구글 규모만 봐도 답 나오죠.
관리 할 것이 많아서요!
# 017
그래서 구글은
# 018
그래서 구글은
Large Scale,
# 019
그래서 구글은
Large Scale, High Availability
# 020
그래서 구글은
Large Scale, High Availability, Batch Job
# 021
그래서 구글은
Large Scale, High Availability, Batch Job
환경을 위해
# 022
그래서 구글은
Large Scale, High Availability, Batch Job
환경을 위해
Borg라는 프로젝트를 진행하게 됩니다.
# 023
Borg 관련 논문
http://research.google.com/pubs/pub43438.html
# 024
다년간 Borg를 통해 배운 운영 노하우를
Kubernetes에 녹여 만들었고
2014년 5~6월 경에
오픈 소스로 발표 하게 된 것 입니다.
# 025
굳이.. 오픈 한 이유를 따지자면
우린 이렇게 자랑 할거다?
(늬들도 써봐! 좋아!)
그래서 오픈 소스로 오픈 한다!
이런 이유 일듯.. 개인적인 생각 입니다.
# 026
Kubernetes는 Master, Minion, Key/Value 저장소로 나뉩니다.
각각의 역할을 살펴 보도록 하겠습니다.
1. Master
1.1 API Server
Master의 중심이 되는 것이 API 서버이며,
인증 및 Pods, Services, Replication Control 등등의 역할을 담당 합니다.
1.2 Scheduler
kubectl 명령어를 통해 지시 받은 작업을 스케줄러가 이를 가지고 있다가
API 서버로 보내주는 역할을 합니다.
1.3 Controller Manager (Replication Controller)
Pods의 Replication 부분을 모니터링하고, 여기에 변경 사항이 있으면 API Server를 통해
Pods의 증감/감소 설정을 하는 역할을 담당 합니다.
예를 들어 Pods의 replicas 수가 10일 경우 9개가 되면 자동으로 10개를 맞춰 주고,
11개 이상이 되면 하나를 죽이고, 지정 된 만큼의 수를 지키게 합니다.
# 027
2. Minion
Minion = Server 또는 Node 라고 이해 하면 됩니다.
2.1 Docker
LXC(LinuX Containers)를 쉽게 사용할 수 있도록 만들어졌고, HostOS의 커널을 그대로 사용하되,
HostOS와 Container OS의 다른 부분만을 패키징 하여 독립 된 환경을 제공 해주는 도구 입니다.
2.2 Kubelet
Minion을 제어하는 agent이며, 단일 Container 또는 Pods를 생성 해주는 역할을 담당 합니다.
3.3 Kube Proxy
간단한 L3 프록시이며, kubelet에서 생성한 Pods의 Container 들의 RR(Round Robin)을
담당하는 역할을 합니다.
3.4 Pod
여러 Container들의 묶음이 Pod 입니다.
# 028
3.5 cAdvisor
Container의 자원을 모니터링 하는 소프트웨어입니다.
단일 Container 또는 Pods에 대해 모니터링하고, 이를 Kubelet에 전달 합니다.
3.6 Label
Pods에 이름을 붙이는 것으로, 하나의 Pod에 여러 가지의 Label을 붙일 수가 있습니다.
예를 들면 환경을 나타내는 ‘Production’, ‘Development’, ‘Staging’
또는 역할을 나타내는 ‘Frontend’, ‘Backend’, ‘Worker’, ‘Logger’를 붙일 수가 있습니다.
3. Key / Value Store
키와 값을 저장하는 저장소 입니다.
Kubernetes에서는 CoreOS의 ETCD를 사용하며, 여기에 정보를 저장 합니다.
# 029
어떻게 동작하는지
Architecture를
살펴 보도록 하죠!
# 030
API Server
# 031
API Server
Scheduler
# 032
API Server
Scheduler
# 033
API Server
Scheduler
Controller
Manager
# 034
API Server
Scheduler
Controller
Manager
# 035
API Server
Scheduler
Controller
Manager
# 036
API Server
Scheduler
Controller
Manager
Master
# 037
ETCD
API Server
Scheduler
Controller
Manager
Master
# 038
ETCD
API Server
Scheduler
Controller
Manager
ETCD
Master
# 039
ETCD
API Server
Scheduler
Controller
Manager
ETCD ETCD
Master
# 040
ETCD
API Server
Scheduler
Controller
Manager
ETCD ETCD
Master
# 041
ETCD
API Server
Scheduler
Controller
Manager
ETCD ETCD
Cluster
Master
# 042
ETCD
API Server
Scheduler
Controller
Manager
ETCD ETCD
Cluster
Master
# 043
ETCD
API Server
Scheduler
Controller
Manager
ETCD ETCD
Cluster
Master
# 044
ETCD
API Server
Scheduler
Controller
Manager
ETCD ETCD
Cluster
Master
# 045
ETCD
API Server
Scheduler
Controller
Manager
Minion
ETCD ETCD
Minion
Cluster
Master
# 046
ETCD
API Server
Scheduler
Controller
Manager
Minion
ETCD ETCD
Minion
Cluster
Master
# 047
ETCD
API Server
Scheduler
Controller
Manager
Minion
Kubelet
ETCD ETCD
Minion
Kubelet
Cluster
Master
# 048
ETCD
API Server
Scheduler
Controller
Manager
Minion
Kubelet
ETCD ETCD
Minion
Kubelet
Cluster
Master
Kube Proxy Kube Proxy
# 049
ETCD
API Server
Scheduler
Controller
Manager
Minion
Kubelet
ETCD ETCD
Minion
Kubelet
Cluster
Master
Kube Proxy Kube Proxy
# 050
ETCD
API Server
Scheduler
Controller
Manager
Minion
Kubelet Kube Proxy
ETCD ETCD
Minion
Kubelet Kube Proxy
Cluster
Master
# 051
ETCD
API Server
Scheduler
Controller
Manager
Minion
Kubelet Kube Proxy
ETCD ETCD
Minion
Kubelet Kube Proxy
Cluster
Master
# 052
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Kubelet Kube Proxy
ETCD ETCD
Minion
Kubelet Kube Proxy
Cluster
Master
# 053
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Kubelet Kube Proxy
ETCD ETCD
Minion
Kubelet Kube Proxy
Cluster
Master
# 054
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Kubelet Kube Proxy
ETCD ETCD
Minion
Kubelet Kube Proxy
Cluster
Master
# 055
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Kubelet Kube Proxy
ETCD ETCD
Minion
Kubelet Kube Proxy
Cluster
Master
# 056
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod Pod
Kubelet Kube Proxy
ETCD ETCD
Minion
Pod Pod
Kubelet Kube Proxy
Cluster
Master
# 057
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod Pod
Kubelet Kube Proxy
ETCD ETCD
Minion
Pod Pod
Kubelet Kube Proxy
Cluster
Master
# 058
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master
# 059
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master
# 060
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master
# 061
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master
# 062
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master
# 063
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Web UI
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master
# 064
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Web UI
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master
# 065
Master 서버를 하나만 설정 한다면
# 066
Master 서버를 하나만 설정 한다면
장애 발생시 대처가 난감 하겠죠?
# 067
그래서,
HA 구성을 해야 합니다.
Kubernetes
Architecture
Made by ruo91
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master
# 068
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
Kubernetes
Architecture
Made by ruo91
# 069
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy
Kubernetes
Architecture
Made by ruo91
# 070
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Kubernetes
Architecture
Made by ruo91
# 071
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
VRRP
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Kubernetes
Architecture
Made by ruo91
# 072
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
VRRP
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Kubernetes
Architecture
Made by ruo91
# 073
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
VRRP
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Kubernetes
Architecture
Made by ruo91
# 074
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
VRRP
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Kubernetes
Architecture
Made by ruo91
# 075
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
VRRP
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Kubernetes
Architecture
Made by ruo91
# 076
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
VRRP
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Kubernetes
Architecture
Made by ruo91
# 077
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
VRRP
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Kubernetes
Architecture
Made by ruo91
# 078
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
VRRP
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Web UI
Kubernetes
Architecture
Made by ruo91
# 079
ETCD
API Server
Scheduler
Controller
Manager
kubelctl
Minion
Pod
cAdvisor
Pod
Nginx
Kubelet Kube Proxy
ETCD ETCD
VRRP
Internet
Minion
Pod
cAdvisor
Pod
Redis
Kubelet Kube Proxy
Cluster
Master xN
HAProxy HAProxy
Web UI
Kubernetes
Architecture
Made by ruo91
# 080
# 081
Kubernetes에서는
# 082
Kubernetes에서는
4가지 정도의
# 083
Kubernetes에서는
4가지 정도의
네트워크 문제가
# 084
Kubernetes에서는
4가지 정도의
네트워크 문제가
존재합니다.
# 085
첫째, Container 와 Container의 통신
# 086
첫째, Container 와 Container의 통신
둘째, Pods간의 통신
# 087
첫째, Container 와 Container의 통신
둘째, Pods간의 통신
셋째, Pod와 서비스간의 통신
# 088
첫째, Container 와 Container의 통신
둘째, Pods간의 통신
셋째, Pod와 서비스간의 통신
넷째, 외부와 내부간의 통신
# 089
이런 문제를 해결 하기 위해
# 090
이런 문제를 해결 하기 위해
다음과 같은 것들로
# 091
이런 문제를 해결 하기 위해
다음과 같은 것들로
해결이 가능합니다.
# 092
OpenVSwitch를 사용하는 방법.
# 093
Flannel - Overlay Network를 사용하는 방법.
# 094
Weave - Overlay Network를 사용하는 방법.
# 095
Weave - Overlay Network를 사용하는 방법.
# 096
Calico - BGP를 사용하여 Real IP를 할당 하는 방법.
# 097
Linux Bridge를 사용하는 방법.
Link: http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/
# 098
관련 링크
http://kubernetes.io/
https://www.yongbok.net/blog/google-kubernetes-container-cluster-manager/
# 099
Thank you!

Introduce Google Kubernetes