창립30주년 기념 isaca korea conference track4 이찬우(20160826)_발표용_final
[OpenStack Days Korea 2016] Track4 - Deep Drive: k8s with Docker
-
Upload
openstack-korea-community -
Category
Technology
-
view
16.725 -
download
1
Transcript of [OpenStack Days Korea 2016] Track4 - Deep Drive: k8s with Docker
발표자는 누구?
• 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
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