共计 8749 个字符,预计需要花费 22 分钟才能阅读完成。
鉴于 docker 如此火爆,Google 推出 kubernetes 管理 docker 集群,不少人估计会进行尝试。kubernetes 得到了很多大公司的支持,kubernetes 集群部署工具也集成了 gce,coreos,aws 等 iaas 平台,部署起来也相当的方便。鉴于网上众多资料基于的是不少老版本,本篇文章针对最新的 kubernetes 及其依赖组件的部署简要阐述。通过本文可以比较粗暴的运行你的 kubernetes 集群,要优雅还需要更多的工作。部署主要分为三步:
1、准备机器并打通网络
如果要部署 kubernetes 集群至少 3 台机器,一个作为 master 两个作为 minion。如果有 4 台机器还可以一个作为 etcd 服务,如果更多可以部署一个 etcd 集群和更多的 minion,这里以 4 台机器为例子,这里说的机器可以是物理机也可以是 kvm 虚拟机。机器列表:
2、部署相关组件
kubernetes 安装主要分成 3 部分:etcd 集群、master 节点和 minions。
本文为了方便以 4 台云主机为例搭建一个 kubernetes 集群,云主机机器分配如下所示:
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 |
2.1 etcd 集群
本次示例中以一台云主机作为 etcd node,如需 etcd 集群请参照后续 etcd 使用介绍进行搭建。
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 下
2.2. master 节点
master 节点上只涉及 kubernetes 安装,首先下载 kubernetes 执行以下指令。
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 拷贝到 /bin
2.3. minion 节点
minion 节点涉及到 kubernetes、cadvisor 和 docker 的安装,master 上安装是已经下载了 kubernetes,将解压出的 kubelet 和 kube-proxy 拷贝到所有 minion 上。
在 minion 节点上将 kubelet、kube-proxy 拷贝到 /bin。
(ps: 拷不拷贝到 /bin 都无所谓,将这些可执行文件的路径加到 $PATH 中可以)
安装 cadvisor:
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 看看是否正常。
3、运行 kubernetes 集群
3.1. kubernetes 配置文件
本节涉及的配置文件和在 GCE 上以及通过 yum 安装的 kubernetes 的配置文件不一定吻合,是全手动安装的暂时解决方案,如果已经集成到 kubernetes 项目下的 cluster,可以运行 kubernetes 本身的一键部署采用 salt 部署整个集群,不需要手动操作,所以这里配置文件只适用于尚未被支持的平台上进行部署。所有需要的配置文件和执行脚本打包为 kube-start.tar.gz。
3.1.1. etcd 配置文件
etcd 配置文件为 cfg-etcd:
ETCD_NAME=”-nameetcd-1″
etcd 节点名称,如果 etcd 集群只有一个 node,这一项可以注释不用配置,默认名称为 default,这个名字后面会用到。
ETCD_PEER_ADDRESS=”-initial-advertise-peer-urls http://hostip:7001″
etcd 集群之间 node 的通讯地址,一般指定 7001 或者 2380 端口,这里 etcd node 的 ip 为 10.180.64.7,所以这一项配置修改为 http://10.180.64.7:7001。
ETCD_CLIENT_ADDRESS=”-advertise-client-urls http://hostip:4001″
etcd node 对外服务的地址,一般指定 4001 或者 2379 端口,这里修改为 http://10.180.64.7:4001。
ETCD_DATA_DIR=”-data-dir /home/data/etcd”
etcd 存储数据的目录,自己指定,不同的目录相同的配置也会导致产生不同的 etcd 集群。
ETCD_LISTEN_PEER_ADDRESS=”-listen-peer-urls http://0.0.0.0:7001″
etcd node 监听的地址,如果为 0.0.0.0 将会监听所有接口,这里配置为 http://0.0.0.0:7001。
ETCD_LISTEN_CLIENT_ADDRESS=”-listen-client-urls http://0.0.0.0:4001″
对外服务监听地址,配置为 http://0.0.0.0:4001。
ETCD_CLUSTER_MEMBERS=”-initial-clusteretcd-1=http://ip_etcd-1:7001 etcd-2=http://ip_etcd-2:7001″
etcd 集群成员地址的列表,因为为 etcd 集群内部,所以需指定 7001 或者 2380 端口,这里只有一个 node,而且没有配置 ETCD_NAME,那么默认名称为 default,这里配置为 default=http://10.180.64.7:70001。
ETCD_CLUSTER_STATE=”-initial-cluster-statenew”
etcd 集群状态,new 表示新建一个集群,existing 表示已经存在。
ETCD_ARGS=””
需要额外添加的参数,可以自己添加,etcd 的所有参数可以通过 etcd - h 查看。
3.1.2. kubernetes 集群配置文件
cfg-common:
KUBE_ETCD_SERVERS=”–etcd_servers=http://10.180.64.7:4001″
etcd 服务地址,前面已经启动了 etcd 服务,这里配置为 http://10.180.64.7:4001。
KUBE_LOGTOSTDERR=”–logtostderr=true”
表示错误日志记录到文件还是输出到 stderr。
KUBE_LOG_LEVEL=”–v=0″
日志等级。
KUBE_ALLOW_PRIV=”–allow_privileged=false”
允许运行特权容器。
3.1.3. apiserver 配置文件
cfg-apiserver:
KUBE_API_ADDRESS=”–address=0.0.0.0″
监听的接口,如果配置为 127.0.0.1 则只监听 localhost,配置为 0.0.0.0 会监听所有接口,这里配置为 0.0.0.0。
KUBE_API_PORT=”–port=8080″
apiserver 的监听端口,默认 8080,不用修改。
KUBE_MASTER=”–master=10.180.64.6:8080″
apiserver 的服务地址,controller-manager、scheduler 及 kubelet 都会用到这个配置,这里配置为 10.180.64.6:8080
KUBELET_PORT=”–kubelet_port=10250″
minion 上 kubelet 监听的端口,默认 10250,无需修改
KUBE_SERVICE_ADDRESSES=”–portal_net=10.254.0.0/16″
kubernetes 可以分配的 ip 的范围,kubernetes 启动的每一个 pod 以及 serveice 都会分配一个 ip 地址,将从这个范围分配。
KUBE_API_ARGS=””
需要额外添加的配置项��简单地启用一个集群无需配置。
3.1.4. controller 配置文件
cfg-controller-manager:
KUBELET_ADDRESSES=”–machines=10.180.64.8,10.180.64.9″
kubernetes 集群中 minion 的列表,这里配置为 10.180.64.8,10.180.64.9
KUBE_CONTROLLER_MANAGER_ARGS=””
需要额外添加的参数
3.1.5. scheduler 配置文件
cfg-schedule:
如果需要额外参数可以自行添加,这里暂时不添加新的参数。
3.1.6. kubelet 配置文件
cfg-kubelet:
KUBELET_ADDRESS=”–address=10.180.64.8″
minion 监听的地址,每个 minion 根据实际的 ip 配置,这里 minion1 上为 10.180.64.8,minion2 上为 10.180.64.9。
KUBELET_PORT=”–port=10250″
监听端口,不要修改,如果修改,同时需要修改 master 上配置文件中涉及的配置项。
KUBELET_HOSTNAME=”–hostname_override=10.180.64.8″
kubernetes 看到的 minion 的名称,使用 kubecfglist minions 时看到的将是这个名称而不是 hostname,设置和 ip 地址一样便于识别。
KUBELET_ARGS=””
额外增加的参数
3.1.7. proxy 配置文件
cfg-proxy:
如有额外参数自行配置,这里不需要添加。
3.2. kubernetes 启动
将 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
更多的使用请看接口章节。
—————————————— 分割线 ——————————————
免费下载地址在 http://linux.linuxidc.com/
用户名与密码都是 www.linuxidc.com
具体下载目录在 /2015 年资料 /12 月 / 2 日 /Kubernetes 集群部署 /
下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm
—————————————— 分割线 ——————————————
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2015-12/125770.htm