您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  要资料 文章 文库 Lib 视频 Code iProcess 课程 认证 咨询 工具 火云堂 讲座吧   成长之路  
会员   
 
   
 
  
每天15篇文章
不仅获得谋生技能
更可以追随信仰
 
 
     
   
 订阅
  捐助
Mesos+Kubernetes集成安装部署
 
  来源:csdn 发布于 2017-3-28
331 次浏览     评价:      
 

因为Docker本身没有提供集群管理能力,对于docker集群一台台的登陆操作不太现实,因此需要引进容器集群的管理工具,主流的有mesosphere的marathon、谷歌的Kubernetes、docker社区的swarm,目前成熟度最高的是Kubernetes。Kubernetes是Google开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:

使用Docker对应用程序包装(package)、实例化(instantiate)、运行(run)。

以集群的方式运行、管理跨机器的容器。

解决Docker跨机器容器之间的通讯问题。

Kubernetes的自我修复机制使得容器集群总是运行在用户期望的状态。

Mesos是Apache下的一个开源项目,最初起源加州大学伯克利分校AMPLab。通过mesos可以将整个数据中心的物理资源CPU、内存、I/O等整合在一个虚拟资源池中,然后根据其上应用的需求动态的调整资源分配。就像操作系统将PC的处理器和RAM放入资源池,使其可以为不同的进程分配和释放资源,所以在数据中心操作系统这个概念下,mesos是作为整个集群的分布式内核。mesos目前除了可以支持微服务应用外,还支持多种大数据分布式应用,包括Hadoop、Kafaka、Spark等,因此我们把mesos作为我们的统一资源调度层。Kubernetes作为一个框架集成到mesos中,通过mesos来获得底层物理资源,我们使用Kubernetes来管理容器集群中的微服务应用。下面我会介绍在一个3节点的集群上mesos如何安装部署,以及Kubernetes如何在mesos中做集成,省略起见下面kubernetes会以ku8相称。在部署前我们需要先在服务器上安装dokcer,具体安装文档请参考我的另一篇分享。

一.mesos安装

1.1环境准备

操作系统版本需要centos7.2

docker版本需要1.9以上

安装前关闭selinux和iptables/firewalld

1.2 下载安装文件

安装mesos yum源,这个源是rpm包格式,直接安装就行了不用配置。

rpm -Uvh 
http://repos.mesosphere.com/el/7/noarch/RPMS/mesosphere-el-repo-7-1
.noarch.rpm

安装yum下载工具

yum install -y yum-utils

创建安装文件夹

mkdir -p /opt/mesos-download
cd /opt/mesos-download
mkdir mesos marathon zookeeper

依次执行如下命令,下载安装包

cd /opt/mesos-download/mesos 
yumdownloader --resolve mesos
cd /opt/mesos-download/marathon
yumdownloader --resolve marathon
cd /opt/mesos-download/zookeeper
yumdownloader --resolve mesosphere-zookeeper

最后将下载好的安装文件拷贝到集群另外两台节点上

scp   -r /opt/mesos-download/*  root@xxxx:/opt/mesos-download/

1.3 配置主机名列表

注意!这一步非常关键,集群中的3个节点都需要配置,我们当初就是slave节点没有配置hosts文件导致找不到master节点,花了好长时间才找到问题。

hostnamectl --static set-hostname master

用这种方式配置不用重新启动服务器,退出客户端再进去就能看到更改。hosts文件按如下编辑:

1.4 安装zookeeper

cd /opt/mesos-download/zookeeper 
sudo yum localinstall -y *.rpm

将master节点上的/var/lib/zookeeper/myid设置为1,如果安装多个master节点依次设置为2、3。将zookeeper地址信息配置到/etc/zookeeper/conf/zoo.cfg文件中,如下:

启动zookeeper

sudo systemctl enable zookeeper 
sudo systemctl start zookeeper

看一下zookeeper进程能否正常启动,zookeeper启动不起来往往是因为网络墙没有关闭。

1.5 安装Master

依次进入各个文件夹执行本地rpm安装

cd /opt/mesos-download/mesos 
yum localinstall -y *.rpm
cd /opt/mesos-download/marathon
yum localinstall -y *.rpm

将zookeeper地址信息配置到mesos配置文件/etc/mesos/zk中,注意!这步如果忘记做了的话也会在后边导致slave节点找不到master节点。

设置mater冲裁数:将/etc/mesos-master/quorum中的数设置为1

注意!本例中因为节点数量有限只做了一个master,如果是在生产环境中为了避免单点故障,应该做3个master节点,并且在每个master节点上都装zookeeper,这样就可以通过zookeeper的选举机制做HA。在有3个zookeeper的时候该quorum值取2,表示做仲裁的时候2票通过。

启动master节点相关服务

sudo systemctl enable mesos-slave 
sudo systemctl restart mesos-slave
sudo systemctl enable mesos-master marathon
sudo systemctl restart mesos-master
sudo systemctl restart marathon

注意!这种方式是master节点既做master节点也做slave节点,如果你想该节点只做master的话就应该关闭slave进程。

1.6 安装slave

把master节点的安装文件夹/mesos-download拷贝到所有slave节点,进入本地安装包文件夹下执行安装。

cd /opt/mesos-download/mesos 
sudo yum localinstall -y *.rpm

将zookeeper地址信息配置到mesos配置文件/etc/mesos/zk中,同上。

启动slave节点上的相关服务,这时需要关闭slave节点的master服务。

sudo systemctl disable mesos-master 
sudo systemctl stop mesos-master
sudo systemctl enable mesos-slave
sudo systemctl restart mesos-slave

1.7 mesos安装完成

登陆mesos监控界面,验证安装完是否正常

http://xxxxxx:5050

左侧能看到目前在运行的任务,以及集群占用的和空闲的资源情况。

二. kubernetes集成安装

2.1下载安装文件

在mesos上运行的ku8只有master节点,没有slave节点,可以把ku8的master节点装在集群任意一台上。ku8的安装文件可以在github上找到release版,本例中通过Git工具直接下载。

yum –y install git
mkdir –p /opt/kubernetes-download
cd /opt/kubernetes-download
git clone https://github.com/kubernetes/kubernetes

2.2安装Go语言环境

另外因为ku8是用go语言编写的,默认装系统的时候没有安装,所以在编译ku8前还要安装go语言的包。

mkdir –p /opt/kubernetes-download/golang
cd /opt/mesos-download/golang
yumdownloader --resolve golang
yum -y localinstall *.rpm

2.3 安装etcd数据库

etcd是个键值对数据库,ku8在做应用服务暴露额时候它来保存服务注册信息。etcd安装包可以在github上找到,把etcd安装文件上传到ku8 master节点,解压后进入安装目录。

cd opt/etcd-v2.3.2
cp etcd etcdctl /usr/bin
cp etcd.service /usr/lib/systemd/system
mkdir /var/lib/etcd
mkdir /etc/etcd
vi /etc/etcd/etcd.conf

修改etcd配置文件,照着这个把地址改成master节点的IP就行了其他不用变,注意复制的时候要把中文都去掉,以防乱码。

# [member]
ETCD_NAME=etcd1
#etcd 数据存放位置
ETCD_DATA_DIR="/var/lib/etcd_data"
#集群内部监听url
ETCD_LISTEN_PEER_URLS="http://10.255.242.170:2380"
#广播给集群内部其他成员url
ETCD_INITIAL_ADVERTISE_PEER_URLS=
"http://10.255.242.170:2380"
# 供外部客服端url
ETCD_LISTEN_CLIENT_URLS="http://10.255.242.170:2379"
#广播给外部客服端url
ETCD_ADVERTISE_CLIENT_URLS="http://10.255.242.170:2379"
# [cluster]
# etcd 集群列表ETCD_INITIAL_CLUSTER="
etcd1=http://10.255.242.171:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
# 初始集群状态
ETCD_INITIAL_CLUSTER_STATE="new"

启动etcd后台服务

systemctl daemon-reload
systemctl start/restart etcd
systemctl enable etcd

检查etcd运行状态,通过节点信息列表能看到我们现在有一台etcd。

etcdctl cluster-health
etcdctl member list

2.4 编译ku8

进入ku8安装文件夹, 编译完成后执行make test 检查是否成功,如果只有一个错的话也没关系。

cd /opt/kubernetes-download/kubernetes
export KUBERNETES_CONTRIB=mesos
make
make test

2.5 配置运行环境变量

ku8集成安装的时候没有用自己的配置文件,所有的配置参数都需要在运行后台服务的时候通过环境变量注入进去,所以我们需要把环境变量都配置到系统里。

vi /etc/profile
export KUBERNETES_MASTER_IP=$(hostname -i)
export KUBERNETES_MASTER=
http://${KUBERNETES_MASTER_IP}:8888
export PATH=
"/opt/kubernetes-download/kubernetes/_output/local/go/bin:$PATH"
export MESOS_MASTER=zk://10.1.24.170/mesos

配置完了再执行下source

source  /etc/profile

2.6 创建mesos-cloud.conf文件

配置成如下,这个文件主要是告诉ku8去哪里找mesos master节点,地址就是mesos master节点或者是zookeeper的地址。

cd /opt/kubernetes-download/kubernetes
vi mesos-cloud.conf
[mesos-cloud]
mesos-master = zk://10.1.24.24:2181/mesos

2.7配置docker

所有安装docker的节点都需要改,不光是kub8的master节点。

vi  /etc/sysconfig/docker

有用的就是这几个,其他不用动。注意!这个option一定要加,否则ku8就会启动docker失败。

#OPTIONS='--selinux-enabled'
DOCKER_CERT_PATH=/etc/docker
OPTIONS='--exec-opt native.cgroupdriver=cgroupfs'

因为ku8调度docker的时候需要google pause插件的支持,所以我们需要登陆每台安装docker的节点, 从公共库上下载google pause 镜像。

docker pull docker.io/google/pause
docker images

查看新下来的pause镜像的image id,根据这个id给镜像重新打个tag。

docker tag  imageid  gcr.io/google_containers/pause:2.0

重启docker

systemctl restart docker

 

2.8 mesos slave节点配置

这个操作可以使kubernetes slave使用ip而不是hostname作为ip信息,避免了docker跨节点无法通讯的问题。

cd /etc/mesos-slave 
hostname -i > ip
echo false > hostname_lookup
systemctl restart mesos-slave

2.9 启动ku8服务

这是最关键一步,要启动ku8的三个守护进程,分别是api server、controller、scheduler,在启动前首先echo下${KUBERNETES_MASTER_IP}这些环境变量,看都配置对了没有,然后再逐一启动,如果有失败的再去查看对应的log文件,例如api server的/var/log/kubenetes-mesos/apiserver.log。

cd /opt/kubernetes-download/kubernetes

nohup km apiserver --address=${KUBERNETES_MASTER_IP} --etcd-servers=http://${KUBERNETES_MASTER_IP}:2379 --service-cluster-ip-range=10.10.10.0/24 --port=8888 --cloud-provider=mesos --cloud-config=mesos-cloud.conf --secure-port=0 --v=1 >/var/log/kubenetes-mesos/apiserver.log 2>&1 &

nohup km controller-manager --master=${KUBERNETES_MASTER_IP}:8888 --cloud-provider=mesos --cloud-config=./mesos-cloud.conf --v=1 >/var/log/kubenetes-mesos/controller.log 2>&1 &

nohup km scheduler --address=${KUBERNETES_MASTER_IP} --mesos-master=${MESOS_MASTER} --etcd-servers=http://${KUBERNETES_MASTER_IP}:2379 --mesos-user=root --api-servers=${KUBERNETES_MASTER_IP}:8888 --cluster-dns=10.10.10.10 --cluster-domain=cluster.local --v=2 >/var/log/kubenetes-mesos/scheduler.log 2>&1 &

2.10验证启动正常

执行ku8命令,查询现在部署的pod(docker组的概念)

kubectl get pod

进入mesos监控界面,在framework标签下能看到ku8框架运行情况

中国联通研究院——软件与系统实验室

   
 订阅
  捐助
 
相关文章

云计算的架构
对云计算服务模型
云计算核心技术剖析
了解云计算的漏洞
 
相关文档

云计算简介
云计算简介与云安全
下一代网络计算--云计算
软浅析云计算
 
相关课程

云计算原理与应用
云计算应用与开发
CMMI体系与实践
基于CMMI标准的软件质量保证
 

深度解析---云安全
汉周云计算白皮书简版
基于云计算的通讯录产品设计
云计算呼叫中心的应用
中国式的云计算服务模式
云计算技术和体系结构调研
相关培训课程

云计算原理与应用
Windows Azure 云计算应用

摩托罗拉 云平台的构建与应用
通用公司GE Docker原理与实践
某研发中心 Openstack实践
知名电子公司 云平台架构与应用
某电力行业 基于云平台构建云服务
云计算与Windows Azure培训
北京 云计算原理与应用
 
 
 
 
 
每天2个文档/视频
扫描微信二维码订阅
订阅技术月刊
获得每月300个技术资源
 
 

关于我们 | 联系我们 | 京ICP备10020922号 京公海网安备110108001071号