[openstack days korea 2016] track4 - deep drive: k8s with docker

16
A deep dive into Kubernetes 오픈스택코리아 안승규 2016218

Upload: openstack-korea-community

Post on 07-Jan-2017

16.725 views

Category:

Technology


1 download

TRANSCRIPT

AdeepdiveintoKubernetes

오픈스택코리아 안승규2016년 2월 18일

발표자는 누구?

•  OpenStack 기반 Private Cloud 구축 (2011년 7월 ~ 2015년 2월) at 삼성SDS

• 오픈스택 코리아 부대표

• 안승규.com http://www.ahnseungkyu.com

•  e-mail [email protected]

Golanguage •  shorthand

a:=42b:=“Hello”

•  interfaceandreceivertypeKubeletstruct{…}func(kl*Kubelet)syncLoop(..){…}typeSyncHandlerinterface{HandlePodSyncs(pods[]*api.Pod)}func(kl*Kubelet)HandlePodSyncs(pods[]*api.Pod)

•  commaokidiom

value,ok:=map[key]key,value:=rangemap

Golanguage(계속) •  make:slice,map,channel

c:=make(chanint)

•  gorou>negofunc(){fori:=0;i<10;i++{ c<-I}}()gofunc(){for{fmt.Println(<-c)}}()

환경 구성

[ 서버 구성 ] Master : 192.168.75.211 (etcd, kube-apiserver, kube-controller-manager, kube-scheduler) Node01 : 192.168.75.212 (kube-proxy, kubelet) Node02 : 192.168.75.213 (kube-proxy, kubelet) 버전 : etcd-2.2.1, flannel-0.5.5, k8s-1.1.2 [ 환경 변수 ] export GOROOT=/usr/local/go export PATH=$PATH:/usr/local/go/bin export GOPATH=$HOME/Documents/go_workspace:$HOME/Documents/go_workspace/src/k8s.io/kubernetes/Godeps/_workspace export PATH=$HOME/Documents/go_workspace/bin:$PATH [ 소스 다운로드 ] $ go get k8s.io/kubernetes $ cd ~/Documents/go_workspace/src/k8s.io/kubernetes

WebStorm세팅 Go Libraries : ...go_workspace/src/k8s.io/kubernetes/Godeps/_workspace

Component

[ Pod ] Container group Same network namespace, ip (Apache -> (localhost, port) -> Tomcat) Shared volumes [ Replication controllers ] Managing pod numbers [ Services ] Route to pod (using labels) IP per service type : Load balancer (GCE), NodePort (iptables)

KubernetesArchitecture

kube-apiserver

kube-controller-manager

kubelet

kube-scheduler

etcd

kube-proxy

Master Node

Reconcilia>on

[ Controller-manager ] EndpointController ReplicationManager NodeController ServiceController ResourceQuotaController NamespaceController PersistentVolumeClaimBinder PersistentVolumeRecycler [ Kubelet ] klet.syncNodeStatus klet.syncPod

kube-apiserver

cmd/kube-apiserver/apiserver.go cmd/kube-apiserver/app/server.go : Run() pkg/master/master.go : init() podStorage, eventStorage, namespaceStorage, nodeStorage, serviceStorage, controllerStorage, namespaceRegistry, serviceNodePortRegistry, endpointRegistry, nodeRegistry, serviceRegistry pkg/registry/service/registry.go type Registry interface { ListServices() CreateService() GetService() DeleteService() UpdateService() }

kube-apiserver

pkg/master/master.go : init() m.storage = map[string]rest.Storage{ "pods": podStorage.Pod, "pods/attach": podStorage.Attach, "pods/status": podStorage.Status, "pods/log": podStorage.Log, "pods/exec": podStorage.Exec, "replicationControllers": controllerStorage, "replicationControllers/status": controllerStatusStorage, "services": service.NewStorage(), "endpoints": endpointsStorage, "nodes": nodeStorage, "nodes/status": nodeStatusStorage, } pkg/apiserver/apiserver.go : InstallREST() ws *restful.WebService container *restful.Container container.Add(ws)

kube-scheduler plugin/cmd/kube-scheduler/scheduler.go plugin/pkg/scheduler/scheduler.go type Config struct { Modeler SystemModeler NodeLister algorithm.NodeLister Algorithm algorithm.ScheduleAlgorithm Binder Binder NextPod func() *api.Pod } plugin/pkg/scheduler/factory/factory.go : CreateFromConfig() scheduler.NewGenericScheduler(predicateFuncs, priorityConfigs, f.PodLister, r) plugin/pkg/scheduler/generic_scheduler.go : Schedule() nodeLister.List() findNodesThatFit() PrioritizeNodes() sort.Sort(sort.Reverse(priorityList)) hosts := getBestHosts(priorityList) ix := g.random.Int() % len(hosts)

KubeletDiagram

server.go startKubelet

cmd/kubelet pkg/kubelet

server.go RunKubelet

server.go Run

kubelet.go registerWithApiserver

updateNodeStatus

kubelet.go syncNodeStatus

kubelet.go NewMainKubelet

server.go createAndInitKubelet

kubelet.go ListenAndServe

server.go ListenAndServeKubeletServer

server.go InstallDefaultHandlers

kubelet.go Run

kubelet.go syncLoop

pkg/kubelet / cadvisor

cadvisor_linux.go New

kubelet.go HandlePodCleanups

kubelet.go cleanupOrphanedVolumes

kubelet.go syncLoopIteration

kubelet.go HandlePodAdditions

kubelet.go HandlePodUpdates

kubelet.go HandlePodDeletions

kubelet.go HandlePodSyncs

Network(Flannel)

eth0

192.168.75.213

flanneld

docker0 172.16.23.1/24

flannel0 172.16.23.0/16

tomcat8-clcec

node02

kube-dns-v9-59m06

veth905783f vethc248789

172.16.23.2 172.16.23.3

Network(Flannel)

eth0

192.168.75.213

flanneld

docker0 172.16.23.1/24

flannel0 172.16.23.0/16

tomcat8-clcec

node02

kube-dns-v9-59m06

veth905783f vethc248789

172.16.23.2 172.16.23.3

마치며…

•  CloudFoundry?OpenShiY?Kubernetes?

• 오픈스택 코리아 홈페이지 http://openstack.or.kr 홈페이지 개편 중