阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Kubernetes集群部署

117次阅读
没有评论

共计 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 虚拟机。机器列表:

master:10.180.64.6
etcd:10.180.64.7
minion1:10.180.64.8
minion2:10.180.64.9
至于网络可以使用 flannel,或者 openvswitch,这方面的资料网上很多,可以 google 或者 baidu 下。

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

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计8749字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中