kubernetes快速安装部署指南
一、部署环境说明
1、节点操作系统:CentOSLinux7。3。1611;
2、主机及角色(主机名基于hosts文件或dns服务解析):
IP地址
主机名
节点角色
172。16。0。69
master,etcd1,registry
master,etcd,privateregistry,chronyserver
172。16。0。67
node1。magedu。com
node1
172。16。0。68
node2。magedu。com
node2
如果基于hosts文件解析主机名,各节点hosts文件内容如下:172。16。0。67node1。magedu。comnode1172。16。0。68node2。magedu。comnode2172。16。0。69master。magedu。commasteretcd1registry
3、各节点通过chrony服务器完成时间同步;
4、各节点关闭firewalld。service或iptables。service,并确保其不会自动启动;
二、部署etcd
2。1服务注册(ServiceRegistration)和服务发现(ServiceDiscovery)
服务发现是大多数分布式系统或面向服务的架构中的核心组件之一,它的出现是用于解决此类环境中普遍面临的一个问题客户端如何获知运行于多个节点之上的服务的IP地址和端口?
解决此类问题的方案有两个。一是静态配置,直接将服务的相关信息写入配置文件。然而,服务数量较大时其配置复杂度会指数级上升,更何况对于一个支持自动缩扩容的系统来说,其服务地址并非固定不变,此时就需要第二种解决方案:动态服务注册和发现。服务注册:服务进程将其信息写入中心注册表(centralregistry),这些信息通常包括IP地址、端口、认证标识、协议、版本号及其它环境信息;服务发现:客户端程序的相关进程查询中心注册表服务器,以获知目标服务的相关信息;
通常情况下,多数服务发现解决方案还能够或者必须提供额外功能,例如服务健康状态监控、负载均衡、访问集成(整合多个语言客户端)、运行时依赖关系及可用性提升等。
此类问题的解决方案有两类:一类是通用目的的实现,它们基于强一致性协议提供一致性数据存储,例如Zookeeper、etcd、Doozer和Consul等,它们不但可用于服务注册和服务发现,也常被用于服务协作中的其它多种功能,例如leaderelection,以及centralizedlocking等。
另一类是专用实现,它们仅用于服务注册和服务发现,例如Airbnb的SmartStack、Netflix的Eureka、Bitly的NSQlookupd、Serf,以及SkyDNS等。
2。2etcd概述
etcdisanopensourcedistributedkeyvaluestorethatprovidessharedconfigurationandservicediscoveryforContainerLinuxclusters。etcdrunsoneachmachineinaclusterandgracefullyhandlesleaderelectionduringnetworkpartitionsandthelossofthecurrentleader。
Applicationcontainersrunningonyourclustercanreadandwritedataintoetcd。Commonexamplesarestoringdatabaseconnectiondetails,cachesettings,featureflags,andmore。
Etcdisahighlyavailable,keyvaluestoreforsharedconfigurationandservicediscovery。EtcdwasinspiredbyZookeeperandDoozer。ItswritteninGo,usesRaftforconsensusandhasaHTTPJSONbasedAPI。
Etcdistypicallyrunwiththree,fiveorsevenmembersintheensemble。ClientsusealanguagespecificbindingorimplementoneusinganHTTPclient。
ServiceregistrationreliesonusingakeyTTLalongwithheartbeatingfromtheservicetoensurethekeyremainsavailable。IfaservicesfailstoupdatethekeysTTL,Etcdwillexpireit。Ifaservicebecomesunavailable,clientswillneedtohandletheconnectionfailureandtryanotherserviceinstance。
Servicediscoveryinvolveslistingthekeysunderadirectoryandthenwaitingforchangesonthedirectory。SincetheAPIisHTTPbased,theclientapplicationkeepsalongpollingconnectionopenwiththeEtcdcluster。
SinceEtcdusesRaft,itshouldbeastronglyconsistentsystem。Raftrequiresaleadertobeelectedandallclientrequestsarehandledbytheleader。However,Etcdalsoseemstosupportreadsfromnonleadersusingthisundocumentedconsistentparameterwhichwouldimproveavailabiltyinthereadcase。Writeswouldstillneedtobehandledbytheleaderduringapartitionandcouldfail。
2。3Kubernetes场景中的etcd部署方式
开发或测试环境
2。4部署etcd
部署单节点etcd
etcd程序包位于CentOS7的Extras仓库中,配置得当后,执行如下命令即可完成安装。
master〕yuminstalletcd
etcd服务需要提供kubernetes集群的所有节点,因此需要监听于可用于外部通信的地址。编辑etcetcdetcd。conf配置文件,修改如下选项的值中的localhost为合适的值即可,例如此示例中的master,即对应的IP地址172。16。0。69。
〔member〕
ETCDNAMEetcd1
ETCDDATADIRvarlibetcddefault。etcd
ETCDLISTENPEERURLShttp:master:2380
ETCDLISTENCLIENTURLShttp:master:2379
〔cluster〕
ETCDINITIALADVERTISEPEERURLShttp:master:2380
ETCDINITIALCLUSTERetcd1http:etcd1:2380
ETCDINITIALCLUSTERSTATEnew
ETCDINITIALCLUSTERTOKENetcdcluster
ETCDADVERTISECLIENTURLShttp:master:2379
上述的各选项的意义如下:ETCDNAME:当前节点的名称;ETCDLISTENCLIENTURLS:当前节点用于与etcd客户端通信的URL列表,彼此间以逗号分隔;ECTDADVERTISECLIENTURLS:当前节点向外通告的其用于与客户通信的URL列表;ETCDINITIALCLUSTER:用于etcd启动时初始化的集群配置;构建一个多节点的etcd集群时,需要让集群成员间通信的端口监听于对外通信的IP地址上,默认为localhost;以下两个选项可用于此配置;ETCDLISTENPEERURLS:listofURLstolistenonforpeertraffic。ETCDINITIALADVERTISEPEERURLS:listofthismemberspeerURLstoadvertisetotherestofthecluster。
而后启动etcd服务即可。
master〕systemctlstartetcd。service
查看etcd集群成员列表:
master〕etcdctlChttp:master:2379memberlist
64d0398ed3861f26:nameetcd1peerURLshttp:172。16。0。69:2380
clientURLshttp:master:2379isLeadertrue
查看集群健康状态:
master〕etcdctlChttp:master:2379clusterhealth
member64d0398ed3861f26ishealthy:gothealthyresultfromhttp:master:2379
etcdctl的各子命令及其功能:
backup:backupanetcddirectory
clusterhealth:checkthehealthoftheetcdcluster
mk:makeanewkeywithagivenvalue
mkdir:makeanewdirectory
rm:removeakeyoradirectory
rmdir:removesthekeyifitisanemptydirectoryorakeyvaluepair
get:retrievethevalueofakey
ls:retrieveadirectory
set:setthevalueofakey
setdir:createanewdirectoryorupdateanexistingdirectoryTTL
update:updateanexistingkeywithagivenvalue
updatedir:updateanexistingdirectory
watch:watchakeyforchanges
execwatch:watchakeyforchangesandexecanexecutable
member:memberadd,removeandlistsubcommands
user:useradd,grantandrevokesubcommands
role:roleadd,grantandrevokesubcommands
auth:overallauthcontrols
help,h:Showsalistofcommandsorhelpforonecommand
部署etcd集群
etcd集群的启动方式支持三种机制:Static(静态):集群成员固定,初始化前直接指定成员主机URL即可;etcdDiscovery(etcd发现):集群成员地址不固定,此时可利用已经存在etcd集群来发现并创建一个新的集群,发现方式是etcd标识;DNSDiscovery(DNS发现):集群成员地址不固定,此时可利用已经存在etcd集群来发现并创建一个新的集群,发现方式是DNSSRVrecords;
具体的配置过程,请参考官方文档。
三、部署kubernetesmaster节点
3。1master节点功能概述
Kubernetesmaster包含三个核心组件:APIServer、Scheduler和ControllerManager,它们分别对应于一个要启动的服务,kubeapiserver、kubescheduler和kubecontrollermanager。
APIServer:TheKubernetesAPIservervalidatesandconfiguresdatafortheapiobjectswhichincludepods,services,replicationcontrollers,andothers。TheAPIServerservicesRESToperationsandprovidesthefrontendtotheclusterssharedstatethroughwhichallothercomponentsinteract。Scheduler:TheKubernetesschedulerisapolicyrich,topologyaware,workloadspecificfunctionthatsignificantlyimpactsavailability,performance,andcapacity。Theschedulerneedstotakeintoaccountinpidualandcollectiveresourcerequirements,qualityofservicerequirements,hardwaresoftwarepolicyconstraints,affinityandantiaffinityspecifications,datalocality,interworkloadinterference,deadlines,andsoon。WorkloadspecificrequirementswillbeexposedthroughtheAPIasnecessary。ControllerManager:TheKubernetescontrollermanagerisadaemonthatembedsthecorecontrolloopsshippedwithKubernetes。Inapplicationsofroboticsandautomation,acontrolloopisanonterminatingloopthatregulatesthestateofthesystem。InKubernetes,acontrollerisacontrolloopthatwatchesthesharedstateoftheclusterthroughtheapiserverandmakeschangesattemptingtomovethecurrentstatetowardsthedesiredstate。ExamplesofcontrollersthatshipwithKubernetestodayarethereplicationcontroller,endpointscontroller,namespacecontroller,andserviceaccountscontroller。
3。2部署master节点
kubernetes由CentOS7。3。1611的Extras仓库提供,配置完成后使用如下命令即可完成安装。
master〕yuminstallkubernetesmaster
kubernetesmaster的配置文件位于etckubernetes目录下,主要修改的有两个:apiserver和config。
配置apiserver,将各选项设定为符合环境的值:
配置kubeapiserver监听的本机地址,配置多节点集群时,应该使用对外通信的地址
KUBEAPIADDRESSinsecurebindaddress0。0。0。0
配置kubeapiserver监听的商品,默认为8080
KUBEAPIPORTport8080
Portminionslistenon
KUBELETPORTkubeletport10250
配置kubernetes集群要使用的etcd集群的成员列表
KUBEETCDSERVERSetcdservershttp:etcd1:2379
集群内各service可使用的地址范围
KUBESERVICEADDRESSESserviceclusteriprange10。254。0。016
默认的管理控制策略
KUBEADMISSIONCONTROLadmissioncontrolNamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota
自定义的其它配置选项
KUBEAPIARGS
配置公共配置文件config,定义master访问接口
配置错误日志记录方式
KUBELOGTOSTDERRlogtostderrtrue
指定日志级别,0表示debug
KUBELOGLEVELv0
设定本集群中是否允许运行特权docker容器
KUBEALLOWPRIVallowprivilegedfalse
配置controllermanager,scheduler和proxy访问master服务的接口;
KUBEMASTERmasterhttp:master:8080
3。3启动master节点
此示例中,kubeapiserver、kubescheduler和kubecontrollermanager均运行于master节点,因此直接启动它们即可。
master〕systemctlstartkubeapiserver。servicekubescheduler。service
kubecontrollermanager。service
四、部署Kubernetes集群的各Node
Kubernetes集群的各节点用于运行容器,因此部署kubernetes的相关组件之前需要事先提供容器相关的环境(Containerruntime),例如docker。以下操作需要在各Node主机分别进行。
4。1部署并启动Docker
docker位于CentOS7。3。1611的Extras仓库中,配置好之后以如下命令即可安装。
〕yuminstalldocker
配置好docker的需自定义的选项后即可启动服务,例如私有仓库等。
〕systemctlstartdocker。service
4。2部署并启动Kubelet和KubernetesNetworkProxy
Kubernetes集群的各node分别包含两个重要组件:Kubelet和KubernetesNetworkProxy,它们分别对应于一个服务kubelet和kubeproxy。kubelet:Thekubeletistheprimarynodeagentthatrunsoneachnode。ThekubeletworksintermsofaPodSpec。APodSpecisaYAMLorJSONobjectthatdescribesapod。ThekubelettakesasetofPodSpecsthatareprovidedthroughvariousmechanisms(primarilythroughtheapiserver)andensuresthatthecontainersdescribedinthosePodSpecsarerunningandhealthy。ThekubeletdoesntmanagecontainerswhichwerenotcreatedbyKubernetes。kubeproxy:TheKubernetesnetworkproxyrunsoneachnode。ThisreflectsservicesasdefinedintheKubernetesAPIoneachnodeandcandosimpleTCP,UDPstreamforwardingorroundrobinTCP,UDPforwardingacrossasetofbackends。ServiceclusteripsandportsarecurrentlyfoundthroughDockerlinkscompatibleenvironmentvariablesspecifyingportsopenedbytheserviceproxy。ThereisanoptionaladdonthatprovidesclusterDNSfortheseclusterIPs。TheusermustcreateaservicewiththeapiserverAPItoconfiguretheproxy。
kubernetesnodes位于CentOS7。3。1611的Extras仓库中,配置好之后以如下命令即可安装。
〕yuminstallkubernetesnode
kubernetesnode的配置文件位于etckubernetes目录下,主要修改的有两个:kubelet和config。
配置kubelet
kubelet服务监听的IP地址(setto0。0。0。0orforallinterfaces)
KUBELETADDRESSaddress0。0。0。0
kubelet监听的端口
KUBELETPORTport10250
当前节点的主机名,留空表示使用本机的真实主机名
KUBELETHOSTNAMEhostnameoverridenode1
apiserver的访问接口
KUBELETAPISERVERapiservershttp:master:8080
podinfrastructurecontainer
KUBELETPODINFRACONTAINERpodinfracontainerimageregistry。access。redhat。comrhel
7podinfrastructure:latest
按需定义的其它选项
KUBELETARGS
配置公共配置文件config,定义master访问接口
配置错误日志记录方式
KUBELOGTOSTDERRlogtostderrtrue
指定日志级别,0表示debug
KUBELOGLEVELv0
设定本集群中是否允许运行特权docker容器
KUBEALLOWPRIVallowprivilegedfalse
配置controllermanager,scheduler和proxy访问master服务的接口;
KUBEMASTERmasterhttp:master:8080
4。3启动node的各服务
此示例中,kubelet和kubeproxy要同时运行于Node节点,因此直接启动它们即可。
master〕systemctlstartkubelet。proxykubeproxy。service
五、集群测试
5。1kubectl概述
Kubernetes的APIServer是集群服务的访问入口,kubectl通过API与集群交互完成各种管理工具,因此,kubectl需要在管理集群之前知悉集群的访问入口,并拥有访问凭证(如果集群配置了验正和授权机制)。这些信息可以命令行选项给出,也可以通过配置文件kubeconfigfile设定。
ClientaccesstoarunningKubernetesclustercanbesharedbycopyingthekubectlclientconfigbundle(kubeconfig)。ThisconfigbundlelivesinHOME。kubeconfig。
Inordertoeasilyswitchbetweenmultipleclusters,akubeconfigfilewasdefined。Thisfilecontainsaseriesofauthenticationmechanismsandclusterconnectioninformationassociatedwithnicknames。Italsointroducestheconceptofatupleofauthenticationinformation(user)andclusterconnectioninformationcalledacontextthatisalsoassociatedwithanickname。
例如,要了解指定集群中的节点信息,可使用如下命令进行。
〕kubectlshttp:master:8080getnodes
NAMESTATUSAGE
node1Ready36m
node2Ready34m
查看集群运行状态,可使用如下命令进行。
〕kubectlshttp:master:8080clusterinfo
Kubernetesmasterisrunningathttp:master:8080
Tofurtherdebuganddiagnoseclusterproblems,usekubectlclusterinfodump。
5。2kubectl命令概览
kubectl命令在线手册获取地址为https:kubernetes。iodocsuserguidekubectl。
5。3测试于Kubernetes中运行容器
kubectlrun命令能够创建并运行一个指定的可复制的镜像,它会自动创建一个deployment或者job来管理创建的容器。例如,创建一个交互登录的基于busybox镜像的容器bbox。
〕kubectlshttp:master:8080runitbboximagebusybox
查看集群中的部署(deployment)资源:
〕kubectlshttp:master:8080getdeployments
NAME
DESIRED
CURRENT
UPTODATE
AVAILABLE
AGE
bbox
1hr1hr1hr1hr1m
查看集群中启动的Pod:
〕kubectlshttp:master:8080getpods
NAME
READY
STATUS
RESTARTS
AGE
bbox4272330656t6pzw
11
Running
0hr2m
也可以以yaml格式查看启动的Pod的详细格式的信息:
〕kubectlshttp:master:8080getoyamlpods
hostIP:172。16。0。67
phase:Running
podIP:172。17。0。2
startTime:20170731T10:32:44Z
kubectldelete命令可用于删除集群中的资源,例如此前使用kubectlrun命令自动创建的
deployment类型的资源bbox,可使用如下命令:
〕kubectlshttp:master:8080deletedeploymentbbox
deploymentbboxdeleted
六、Kubernetes的网络功能
6。1Docker网络模型存在的问题
WithDocker,eachcontainerisassignedanIPaddressthatcanbeusedtocommunicatewithothercontainersonthesamehost。Forcommunicatingoveranetwork,containersaretiedtotheIPaddressesofthehostmachinesandmustrelyonportmappingtoreachthedesiredcontainer。ThismakesitdifficultforapplicationsrunninginsidecontainerstoadvertisetheirexternalIPandportasthatinformationisnotavailabletothem。
6。2Kubernetes网络模型
Kubernetes需要其原子组件Pod彼此间可直接通信,无论它们位于集群中的哪台主机之上。因此,每个Pod必须拥有一个可路由的IP地址,相互间无须NAT或端口映射即可进行数据交换。这有别于Docker的网络模型,使用默认网络模型的两个Docker主机无满足此类需求。同时,同一个Pod内部的各容器间可直接通过loopback接口进行通信,例如同一pod内部的tomcat容器可直接经由lo接口访问mariadbserver容器上的数据。这种模型中,Pod类似于IaaS架构中的VM,同一VM上运行的多个application极容易迁移至Pod的容器上,且各Pod之间的通信也类似于各VM之间的通信。
KubernetesPAUSEcontainer
Kubernetes的每个Pod中均存在一个名为PAUSE的容器,它持有Pod的IP地址等网络属性,并将网络名称空间共享给当前Pod中的其它容器,这些容器是Pod的joined网络类型的容器。
在Pod内部,每个容器以映射容器(mappedcontainer)模型连接至PAUSE容器,通信过程中,目标地址为PodIP地址的流量首先到达PAUSE容器,而后再由PAUSE容器转发至后端的一个或多个容器。此种模型中,PAUSE容器也被称作目标容器(targetcontainer),而其它容器被称为源容器(sourcecontainer)。
概括来讲,Kubernetes的网络模型中存在四种通信模式:同一Pod内部的容器间通信:籍由同一网络名称空间中的lo接口进行;Pod间的通信:同一Kubernetes集群中的所有Pod拥有同一IP网络中的地址,Pod彼此间可通过IP地址直接通信;Pod与Service间的通信:Service的核心是VIP,它能够直接接受客户端的请求,并将请求代理至与此服务关联的各Pod;其过程是到达Service的请求被发往各Node主机的kubeproxy进程,并由其路由至相关的Pod;来自集群外部的访问:集群中的节点拥有公网IP(ExternalIP)地址时,Kubernetes可将服务暴露至此些IP地址;到此些IP地址上的服务端口的访问流量会被路由至Service的端点,而后由kubeproxy转发至目标Pod;ExternalIP非由Kubernetes
管理,管理员需要完成此工作;
Kubernetes网络解决方案
Kubernetes虽然设计了网络模型,但它自己并不实现此功能,而是借助于第三方解决解决方案,例如Flannel、Calico、Weave、OpenContrail、CiscoContiv和OpenVSwitch等等。
Flannel
FlannelisaverysimpleoverlaynetworkthatsatisfiestheKubernetesrequirements。FlannelisavirtualnetworksolutionmaintainedbytheCoreOSproject。Itsawelltested,productionreadysolution,soithasthelowestsetupcost。
ProjectCalico
Calicoisanewapproachtovirtualnetworkingandnetworksecurityforcontainers,VMs,andbaremetalservices,thatprovidesarichsetofsecurityenforcementcapabilitiesrunningontopofahighlyscalableandefficientvirtualnetworkfabric。CalicoincludespreintegrationwithKubernetesandMesos(asaCNInetworkplugin),Docker(asalibnetworkplugin)andOpenStack(asaNeutronplugin)。Calicosupportsabroadrangeofdeploymentoptionsincludingonpremiseorpubliccloud(AWS,GCE,etc)providingthesamerichsetoffeaturesacrossall。
Contiv
Contivisaopensourcecontainernetworkingandpolicyfabricforheterogeneousdockercontainerdeploymentsacrossvirtualmachines,baremetal,andpublicorprivateclouds。Astheindustrysmostpowerfulcontainernetworkingfabric,Contiv,withitsLayer2,Layer3,overlayACImodes,nativelyintegrateswithCiscoinfrastructureandmapstheapplicationintentwiththeinfrastructurecapabilitiesusingrichnetworkingandsecuritypolicies。
6。3叠加网络flannel概述
Flannel是由CoreOS项目维护的虚拟网络解决方案,它是能够满足Kubernetes网络模型需求的极简洁实现方式,但经由充分测试且可用于生产环境,部署代价极低。
运行时,Flannel需要首先确定自己使用的网络地址,例如10。1。0。016,而后为集群中的每个Docker主机分配一个子网,例如10。1。15。024或10。1。20。024等,Docker主机将此子网地址作为本机上运行的容器的可用地址池。
同一Docker主机上的Pod间通信通过docker0桥即可直接进行,而跨Docker主机的Pod间通信时,Pod的报文经由本机上的flannel桥隧道转发其目标网络所在的Docker主机的flannel桥,并到达目标网络,而后由目标Pod接收。如下图所示。
Flannel将虚拟IP和主机地址的映射关系存于etcd中,运行于各主机上的flanneld进程负责监控etcd中与当前主机相关的配置信息,并完成报文路由。
6。4安装flannel
flannel需要运行于集群的各节点,包括master主机和各Node主机。flannel程序包位于CentOS7。3。1611的Extras仓库中,配置好之后在各主机以如下命令即可完成安装。
〕yuminstallflannel
6。5配置flannel
flannel需要基于etcd存储数据,配置其使用etcd服务的URL。配置文件为etcsysconfigflanneld。配置详情如下所示。
etcd服务器URL列表
FLANNELETCDENDPOINTShttp:etcd1:2379
flannel向etcd查询网络地址池相关的配置时使用的key,其值需要手动创建
FLANNELETCDPREFIXatomic。ionetwork
传递flanneld程序的其它选项
FLANNELOPTIONS
6。6在etcd配置flanneld使用的地址池
〕etcdctlChttp:etcd1:2379mkatomic。ionetworkconfig{Network:10。99。0。016}
{Network:10。99。0。016}
6。7启动flanneld,并重启各服务
在master主机启动flanneld服务。
〕systemctlstartflanneld。service
在各Node主机上启动flanneld服务,并重启docker服务即可完成配置。
〕systemctlstartflanneld。service
〕systemctlrestartdocker。service
6。8测试
启动多个Pod,查看其启动的主机及获得的IP地址,并测试各Pod中的容器间的连通性即可。测试方法参考上文第5部分。
七、KubernetesDashboard
7。1KubernetesDashboard概述
KubernetesDashboardisageneralpurpose,webbasedUIforKubernetesclusters。Itallowsuserstomanageapplicationsrunningintheclusterandtroubleshootthem,aswellasmanagetheclusteritself。
7。2部署KubernetesDashboard
KubernetesDashboard的镜像位于gcr。io(GoogleContainersRegistry),此站点在GFW的转名单列表中,无法在国内直接访问,因此简单按照官方的文档进行部署。不过,好在有人将gcr中的镜像同步到了dockerhub中,例如docker。iomritdkubernetesdashboardamd64,部署时只需简单地将KubernetesDashboard提供的部署文件中的镜像改动一下即可。
Kubernetes1。5部署dashboard
首先确保集群中没有运行中dashboard实例:
〕kubectlgetpodsallnamespacesgrepdashboard
而后下载部署文件https:git。iokubedashboardnorbac,并修改其内容如下所示:
接着使用此文件创建Service和Pod即可。
〕kubectlshttp:master:8080createf。kubedashboardnorbac
查看创建的服务:
〕kubectlshttp:master:8080getservices
NAME
CLUSTERIP
EXTERNALIP
PORT(S)
AGE
kubernetes
10。254。0。1
443TCP
4h
通过master主机的URL(ui)即可访问Dashboard。例如,打开浏览器,键入如下地址。http:masterip:8080ui
Kubernetes1。6部署dashboard
请参考https:github。comkubernetesdashboard中给出的说明。
八、Kubernetes监控系统
8。1cAdvisor概述
cAdvisor(ContainerAdvisor)providescontainerusersanunderstandingoftheresourceusageandperformancecharacteristicsoftheirrunningcontainers。Itisarunningdaemonthatcollects,aggregates,processes,andexportsinformationaboutrunningcontainers。Specifically,foreachcontaineritkeepsresourceisolationparameters,historicalresourceusage,histogramsofcompletehistoricalresourceusageandnetworkstatistics。Thisdataisexportedbycontainerandmachinewide。
cAdvisorhasnativesupportforDockercontainersandshouldsupportjustaboutanyothercontainertypeoutofthebox。Westriveforsupportacrosstheboardsofeelfreetoopenanissueifthatisnotthecase。cAdvisorscontainerabstractionisbasedonlmctfyssocontainersareinherentlynestedhierarchically。
cAdvisor是开源容器资源占用率及性能分析agent,其设计目标即为容器监控,并原生支持Docker容器。cAdvisor会自动发现当前主机上的所有容器,并收集CPU、内存、文件系统和网络资源占用率相关的数据,甚至可收集当前主机的所有监控数据。
实践中,cAdvisor运行于Kubernetes集群中的各主机上,收集、聚合、处理及导出当前主机上各容器的相关监控数据。Kubernetes新近的版本已经将cAdvisor功能集成到kubelet程序中。cAdvisor内嵌了WebUI,并通过http::输出,它默认监听于tcp协议的4194端口,因此可通过各节点的http::4194直接访问。
不过,cAdvisor的WebUI仅能显示当前节点上各容器的相关数据,如果需要集成多个主机上的cAdvisor数据于一个系统中,可以使用HeapSter。,因此cAdvisor常作为HeapSter的agent使用。
8。2HeapSter概述
Heapsterisaclusterwideaggregatorofmonitoringandeventdata。ItcurrentlysupportsKubernetesnativelyandworksonallKubernetessetups。Heapsterrunsasapodinthecluster,similartohowanyKubernetesapplicationwouldrun。TheHeapsterpoddiscoversallnodesintheclusterandqueriesusageinformationfromthenodesKubelets,theonmachineKubernetesagent。TheKubeletitselffetchesthedatafromcAdvisor。Heapstergroupstheinformationbypodalongwiththerelevantlabels。Thisdataisthenpushedtoaconfigurablebackendforstorageandvisualization。Theoverallarchitectureoftheservicecanbeseenbelow:
实践中,可将数据存储于InfluxDB,并通过Grafana进行展示。
InfluxDBisanopensourcedatabasewritteninGospecificallytohandletimeseriesdatawithhighavailabilityandhighperformancerequirements。ItexposesaneasytouseAPItowriteandfetchtimeseriesdata。HeapsterissetuptouseInfluxDBasthestoragebackendbydefaultonmostKubernetesclusters。
Grafanaisthedatavisualizationcomponentinourmonitoringsetup。ItisavailableoutoftheboxinaKubernetescluster。Thedefaultdashboarddisplaysresourceusageoftheclusterandthepodsinsideofit。Thisdashboardcaneasilybecustomizedandexpanded。
InfluxDBandGrafanaalreadyruninpodsexposingthemselvesasKubernetesservices,makingiteasyforHeapstertodiscoverthem。Withallofthisalreadyinplace,thereisminimalsetuprequiredtogetthingsupandrunning。
HeapSter是容器集群监控和性能分析工具,其设计上原生支持Kubernetes和CoreOS,也可很容易地扩展为支持其它集群的监控。Heapster收集并解析诸多数据指标,例如资源利用率、生命周期事件等,并将其通过REST端点输出为ClusterMetrics。Heapster监听于tcp协议的10025端口。
DNS有两种配置方式,在1。3之前使用etcdkube2skyskydns的方式,在1。3之后可以
使用kubednsdnsmasq的方式。
参考文献:
http:networkinsight。net201606kubernetesnetworking101
https:coreos。comkubernetesdocslatestkubernetesnetworking。html
让你选大陆3位最有战略眼光的企业家,你会选谁?理由是什么?所谓战略眼光,就是能够把握市场未来的发展方向,从而为公司的发展寻找出商机。比如在上世纪90年代,互联网刚开始起步之时,就有一批企业家就投入这个领域。再如,在本世纪初功能机称霸天……
为什么录音比自己真实声音难听?谢邀!为什么录音比自己真实声音难听?因为,录音和现实听到的自己的声音原本就是两种声音,这两种声音的构成成分本身就是不同的,听起来自然也不一样。至于说录音听起来……
马化腾宣布探星计划李彦宏称百度智能汽车两三年内面世世界人工智哦,你上面提到的这两位著名的成功企业家,他们都具有展开相应的科研创新项目的独特的组织管理及研发能力,他们的企业也都汇聚了大批专业从事创新研发的高端人才,在人才智力、企业文化、内……
一日一技协程与多进程的完美结合我们知道,协程本质上是单线程单进程,通过充分利用IO等待时间来实现高并发。在IO等待时间之外的代码,还是串行运行的。因此,如果协程非常多,多少每个协程内部的串行代码运行时间超过……
热门中概股盘前走高哔哩哔哩(BILI。US)涨超114月4日(周一)美股盘前,热门中概股多数上涨。截至发稿,哔哩哔哩(BILI。US)涨超11,爱奇艺(IQ。US)涨超9,滴滴(DIDI。US)、拼多多(PDD。US),贝壳(B……
iOS14。5。1出现随机降频,固件更新可能是一把双刃剑写本文的时候,iOS已经开始向开发者推送了第一个版本的iOS14。7测试版。同时,iOS的稳定版暂时维持在14。5。1,且已经关闭了iOS14。5版本的验证,而正式版iOS14……
LCD永不为奴红米Note10系列采用120Hz高刷屏,硬件随着发布日期的临近,现在关于红米Note10系列的相关信息已经越来越多了,其实现在已经可以确定手机的表现如何,最关键的就看在发布会上会公布出什么价格,以此来决定值不值得买。现在……
关于币圈的六个传说马斯克、木头姐站队比特币01:我是中本聪2017年8月,一个ID叫BitcoinPizza的新用户悄然入驻推特,每天都会根据当天币价实时播报10000枚比特币值多少……
我先生要花2万5千多买一个单反相机,我反对有错吗?富人买一只二万五干相机,小菜一碟。穷人就沒必要了,想当初,我年轻时低收入连海鸥照相机都买不起,想出去游玩,到照像馆里去租借。现在我的邻居好朋友,年近70岁,家中有高档相机带长镜……
FF被指造车骗局,贾跃亭收到美国退市警告11月26日,贾跃亭收到美国退市警告登上微博热搜,具体内容为贾跃亭创立的法拉第未来被指控造车骗局,并收到了一份来自美国证券交易委员会发出的退市警示函,FF存在被退市的可能。……
第三方测评夹杂利益考量回归公允中立需疏堵结合来源:科技日报第三方测评夹杂利益考量回归公允中立需疏堵结合胡麒牧数字经济智库高级研究员、中钢经济研究院首席研究员日前,有媒体调查指出,第三方测评行业鱼龙混杂,……
快递进村年底全省全覆盖11月26日,山东商报速豹新闻网记者从山东省政府网站获悉,省政府办公厅印发《关于加快农村寄递物流体系建设的实施方案的通知》,确保2021年底山东省在全国率先实现快递进村全覆盖,……