kubernetes获得了不少大公司的支持,kubernetes集群部署工具也集成了gce,coreos,aws等iaas平台,部署起来也至关的方便。鉴于网上众多资料基于的是很多老版本,本篇文章针对最新的kubernetes及其依赖组件的部署简要阐述。经过本文能够比较粗暴的运行你的kubernetes集群,要优雅还须要更多的工做。部署主要分为三步:node
若是要部署kubernetes集群至少3台机器,一个做为master两个做为minion。若是有4台机器还能够一个做为etcd服务,若是更多能够部署一个etcd集群和更多的minion,这里以4台机器为例子,这里说的机器能够是物理机也能够是kvm虚拟机。linux
master:10.180.64.6 etcd: 10.180.64.7 minion1:10.180.64.8 minion2:10.180.64.9
至于网络可使用flannel,或者openvswitch,这方面的资料网上不少,能够google或者baidu下。git
kubernetes安装主要分红3部分:etcd集群、master节点和minions。github
本文为了方便以4台云主机为例搭建一个kubernetes集群,云主机机器分配以下所示:redis
ip, 角色 10.180.64.6, Kubernetes master 10.180.64.7, Etcd node 10.180.64.8, Kubernetes minion1 10.180.64.9, Kubernetes minion2
本次示例中以一台云主机做为etcd node,如需etcd集群请参照后续etcd使用介绍进行搭建。docker
root@cnsdev-paas-master:~# curl -L https://github.com/coreos/etcd/releases/download/v2.0.0-rc.1/etcd-v2.0.0-rc.1-linux-amd64.tar.gz-o etcd-v2.0.0-rc.1-linux-amd64.tar.gz root@cnsdev-paas-master:~# tar xzvf etcd-v2.0.0-rc.1-linux-amd64.tar.gz root@cnsdev-paas-master:~# cdetcd-v2.0.0-rc.1-linux-amd64
拷贝etcd下的全部可执行文件到/bin下。json
master节点上只涉及kubernetes安装,首先下载kubernetes执行如下指令。ubuntu
root@cnsdev-paas-master:~#wget https://github.com/GoogleCloudPlatform/kubernetes/releases/download/v0.8.0/kubernetes.tar.gz root@cnsdev-paas-master:~#tar -zxvfkubernetes.tar.gz root@cnsdev-paas-master:~#cdkubernetes/server/kubernetes root@cnsdev-paas-master:~#tar -zxvfkubernetes-server-linux-amd64.tar.gz root@cnsdev-paas-master:~#cd server/bin
在master节点上将kube-apiserver、kube-controller-manager、kube-scheduler、kubecfg、kubectl拷贝到/binapi
minion节点涉及到kubernetes、cadvisor和docker的安装,master上安装是已经下载了kubernetes,将解压出的kubelet和kube-proxy拷贝到全部minion上。tomcat
在minion节点上将kubelet、kube-proxy拷贝到/bin。
(ps:拷不拷贝到/bin都无所谓,将这些可执行文件的路径加到$PATH中能够)
root@cnsdev-paas-master:wget https://github.com/google/cadvisor/releases/download/0.7.1/cadvisor
直接是可执行文件,不用解压了,拷贝到/bin下
安装docker:
在minion上安装docker,kubernetes会调用docker api建立pod做为worker容器,同时kubernetes自己的agent线程等也能够运行在docker里面,这样kubernetes升级也会比较容易。 debian 7下安装docker可使用ubuntu的源,运行如下指令:
root@cnsdev-paas-master:echo debhttp://get.docker.io/ubuntu docker main | sudo tee/etc/apt/sources.list.d/docker.list root@cnsdev-paas-master:apt-key adv--keyserver keyserver.ubuntu.com --recv-keys36A1D7869245C8950F966E92D8576A8BA88D21E9 root@cnsdev-paas-master:apt-getupdate root@cnsdev-paas-master:apt-getinstall -y lxc-docker
运行一下dockerversion看看是否正常。
本节涉及的配置文件和在GCE上以及经过yum安装的kubernetes的配置文件不必定吻合,是全手动安装的暂时解决方案,若是已经集成到kubernetes项目下的cluster,能够运行kubernetes自己的一键部署采用salt部署整个集群,不须要手动操做,因此这里配置文件只适用于还没有被支持的平台上进行部署。全部须要的配置文件和执行脚本打包为kube-start.tar.gz。
etcd配置文件为cfg-etcd:
etcd节点名称,若是etcd集群只有一个node,这一项能够注释不用配置,默认名称为default,这个名字后面会用到。
etcd集群之间node的通信地址,通常指定7001或者2380端口,这里etcd node的ip为10.180.64.7,因此这一项配置修改成http://10.180.64.7:7001。
etcd node对外服务的地址,通常指定4001或者2379端口,这里修改成http://10.180.64.7:4001。
etcd存储数据的目录,本身指定,不一样的目录相同的配置也会致使产生不一样的etcd集群。
etcd node监听的地址,若是为0.0.0.0将会监听全部接口,这里配置为http://0.0.0.0:7001。
对外服务监听地址,配置为http://0.0.0.0:4001。
etcd集群成员地址的列表,由于为etcd集群内部,因此需指定7001或者2380端口,这里只有一个node,并且没有配置ETCD_NAME,那么默认名称为default,这里配置为default=http://10.180.64.7:70001。
etcd集群状态,new表示新建一个集群,existing表示已经存在。
须要额外添加的参数,能够本身添加,etcd的全部参数能够经过etcd -h查看。
cfg-common:
etcd服务地址,前面已经启动了etcd服务,这里配置为http://10.180.64.7:4001。
表示错误日志记录到文件仍是输出到stderr。
日志等级。
容许运行特权容器。
cfg-apiserver:
监听的接口,若是配置为127.0.0.1则只监听localhost,配置为0.0.0.0会监听全部接口,这里配置为0.0.0.0。
apiserver的监听端口,默认8080,不用修改。
apiserver的服务地址,controller-manager、scheduler及kubelet都会用到这个配置,这里配置为10.180.64.6:8080
minion上kubelet监听的端口,默认10250,无需修改
kubernetes能够分配的ip的范围,kubernetes启动的每个pod以及serveice都会分配一个ip地址,将从这个范围分配。
须要额外添加的配置项,简单地启用一个集群无需配置。
cfg-controller-manager:
kubernetes集群中minion的列表,这里配置为10.180.64.8,10.180.64.9
须要额外添加的参数
cfg-schedule: 若是须要额外参数能够自行添加,这里暂时不添加新的参数。
cfg-kubelet:
minion监听的地址,每一个minion根据实际的ip配置,这里minion1上为10.180.64.8,minion2上为10.180.64.9。
监听端口,不要修改,若是修改,同时须要修改master上配置文件中涉及的配置项。
kubernetes看到的minion的名称,使用kubecfglist minions时看到的将是这个名称而不是hostname,设置和ip地址同样便于识别。
额外增长的参数。
cfg-proxy: 若有额外参数自行配置,这里不须要添加。
将kube-start.tar.gz解压,拷贝cfg-etcd、kube-etcd到etcd node上,为kube-etcd增长可执行权限。拷贝其中的cfg-common、cfg-apiserver、cfg-controller-manager、cfg-schedule、apiserver、controller、schedule拷贝到master上,为apiserver、controller和schedule增长可执行权限。拷贝cfg-common、cfg-kubelet、cfg-proxy、cadv、kube、proxy到全部minion主机上,同时确保每个minion的cfg-kubelet修改正确,为cadv、kube、proxy增长可执行权限。
首先在etcd node上运行etcd服务,执行
root@cnsdev-paas-master:./kube-etcd &
检验etcd是否正常,在master上执行
root@cnsdev-paas-master:curl -L http://10.180.64.7:4001/version etcd 2.0.0-rc.1
而后在master上顺序执行
root@cnsdev-paas-master:./apiserver& root@cnsdev-paas-master:./controller & root@cnsdev-paas-master:./schedule &
最后在全部的节点上顺序执行
root@cnsdev-paas-master:./cadv & root@cnsdev-paas-master:./kube & root@cnsdev-paas-master:./proxy &
全部组件都运行以后,到master上检测下状态。
查看下集群情况
root@cnsdev-paas-master:~# kubecfg listminions Minionidentifier Labels ---------- ---------- 10.180.64.9 10.180.64.8
能够看出集群中有两个节点10.180.64.8和10.180.64.9,正是部署的2个节点。
查看当前集群的pod
root@cnsdev-paas-master:~#kubecfg list pods Name Image(s) Host Labels Status ---------- ---------- ---------- ---------- ---------- e473c35e-961d-11e4-bc28-fa163e8b5289 dockerfile/redis 10.180.64.9/ name=redisRunning
这里的redis你就当没看见,若是刚建立的集群这个时候是没有pod的,固然若是你是在gce或者aws上一键建立的,默承认能会看到kubernetes命名的pod,这是默认启动的状态监测的东东。
集群已经建立好了,那就来建立个tomcat的replicationController玩玩吧。有多种接口方式能够实现这个,这里选择json,须要写一个tomcat-controller.json的文件告诉kubernetes该怎么建立这个controller。固然文件的名字能够随意点,只要能看懂就行。tomca-controller.json大概长这个样子:
{ "id":"tomcatController", "kind":"ReplicationController", "apiVersion":"v1beta1", "desiredState": { "replicas": 2, "replicaSelector":{"name":"tomcatCluster"}, "podTemplate":{ "desiredState": { "manifest": { "version": "v1beta1", "id": "tomcat", "containers": [{ "name": "tomcat", "image":"tutum/tomcat", "ports":[{ "containerPort":8080,"hostPort":80} ] }] } }, "labels": {"name":"tomcatCluster"}} }, "labels": { "name":"tomcatCluster", } }
里面各项值的含义看完kubernetes实现分析以后就会明白了。写好文件以后就让kubernetes执行吧。
root@cnsdev-paas-master:/home/pod# kubecfg -ctomcat-pod.json create replicationControllers
若是告诉你success,那么能够查看下集群的controller
root@cnsdev-paas-master:/home/pod# kubecfg listreplicationControllers Name Image(s) Selector Replicas ---------- ---------- ---------- ---------- redisController dockerfile/redis name=redis 1 tomcatController tutum/tomcat name=tomcatCluster 2
请无视redis,这时候看到tomcat的replicationController已经起来了,Replicas=2表示要在集群里面运行2个docker,docker运行的镜像就是tutum/tomcat了,若是你的minion上面没有这个镜像那么kubernetes就要去docker hub上为你下载了,若是本地有这个镜像那么kubernetes就直接在minion上为你运行2个tomcat的container(pod),来看看这一切是否是真的。
root@cnsdev-paas-master:/home/pod# kubecfg listpods Name Image(s) Host Labels Status ---------- ---------- ---------- ---------- ---------- 643582db-97d1-11e4-aefa-fa163e8b5289 tutum/tomcat 10.180.64.9/ name=tomcatCluster Running e473c35e-961d-11e4-bc28-fa163e8b5289 dockerfile/redis 10.180.64.9/ name=redis Running 64348fde-97d1-11e4-aefa-fa163e8b5289 tutum/tomcat 10.180.64.8/ name=tomcatCluster Running
更多的使用请看接口章节。