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

Kubernetes集群部署

395次阅读
没有评论

共计 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、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7992876
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...
星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛NAS-4:飞牛NAS安装istore旁路由,家庭网络升级的最佳实践

星哥带你玩飞牛 NAS-4:飞牛 NAS 安装 istore 旁路由,家庭网络升级的最佳实践 开始 大家好我是...
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare也瘫了连监控都挂,根因藏在哪?

支付宝、淘宝、闲鱼又双叕崩了,Cloudflare 也瘫了连监控都挂,根因藏在哪? 最近两天的互联网堪称“故障...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...