Mesos+Kubernetes集成安装部署

因为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
Mesos+Kubernetes集成安装部署_第1张图片
左侧能看到目前在运行的任务,以及集群占用的和空闲的资源情况。
Mesos+Kubernetes集成安装部署_第2张图片

二. 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

Mesos+Kubernetes集成安装部署_第3张图片

查看新下来的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+Kubernetes集成安装部署_第4张图片
进入mesos监控界面,在framework标签下能看到ku8框架运行情况

Mesos+Kubernetes集成安装部署_第5张图片

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

你可能感兴趣的:(Mesos+Kubernetes集成安装部署)