所在位置:首頁 -- 物聯網/云計算 -- 正文

Mesos+Kubernetes集成安裝部署


發布時間:2017-4-1  來源:admin

 因為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/*  [email protected]:/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框架運行情況

中國聯通研究院——軟件與系統實驗室

中国北京单场足球彩票 股票分析师微信头像 内蒙古11选五最大遗漏 时时彩二码不定位技巧 时时彩一条龙 新吉林十一选五开奖结果查询 山西快乐十分软件 快三技巧稳赚大小 重庆时时存在改码吗 诛仙3飞升后怎么赚钱 福彩计划软件手机版 美女二人麻将单机游戏 pk10是怎样的骗局 重庆时时龙虎斗走势图 河北彩票快三开奖结果 时时彩qq群 实战彩票网