返回 登录
0

DC/OS 的安装与部署

阅读9491

2016年4月,Mesosphere开源了他们开发的DC/OS (数据中心操作系统),引起了广泛的关注,虽然开源版本和他们的企业版本应该还有一些差距,但是我们仍然可以从中学习其DC/OS的理念。本文介绍了DC/OS的一些基本概念,以及如何在一个小型集群中搭建一套DC/OS系统。

DC/OS 简介

DC/OS (Data Center Operating System) 核心思想是让用户可以像使用操作系统一般使用数据中心或者大规模集群。通过对于数据中心的的物理资源进行抽象,使用统一的平台管理起来,用户可以使用简单的命令行或者图形界面方便的运行应用。和现有的PaaS平台主要专注于Web应用的部署不同,DC/OS可以部署各种不同应用,从传统Web 服务器,数据库,到NoSQL服务器,分布式文件系统,以及大数据应用等。DC/OS提供了一套应用包管理服务,使用户可以像部署linux中的rpm/debian包一样在数据中心中部署应用。

类似操作系统,DC/OS 也可以分为内核空间和用户空间。Apache Mesos是DC/OS的内核,主要用来管理数据中心中的各种物理资源,把底层的物理资源调度给各个应用,并且在容器中运行应用的具体任务。用户空间由服务(Services) 和系统组件(Service Components)组成。服务可以认为是一个Marathon或者Hadoop的进程(process),而其中又会运行具体的应用或者任务,比如通过Marathon启动的web 服务器。系统组件的功能包括提供用户认证和授权,服务发现,负载均衡等。

图片描述
DC/OS的安装有多种方式,可以直接在AWS或者Azure中选定安装模版来安装;也可以在自己的本地环境通过Vagrant安装,或者下载DC/OS的installer,在本地集群中安装。本文主要介绍的是第三种安装方式。

系统和依赖软件要求

对于机器CPU和内存没有硬性要求,官方推荐的集群规模是主节点4 core + 32 GB,所有计算节点2 core + 16 GB。如果只是将DC/OS运行起来,当然不需要这么多资源,但是如果还是想要在DC/OS上运行一些应用的话,最好保证每台机子上都有足够多的CPU和内存。另外还需要一台主机做为bootstrap node来运行安装程序安装整个集群,这类似于使用chef部署应用中的chef server。本文使用的机器配置如下。

DC/OS 支持的操作系统有CoreOS,CentOS7,以及RHEL7。本文中使用的的是CentOS7。在安装DC/OS前要确保停止firewalld服务并且安装一些需要的依赖包。

$ sudo yum install –y unzip ipset

在master和agent节点上设置selinux并且创建nogroup

$ sudo sed –i s/SELINUX=enforcing/SELINUX=permissive/g /etc/selinux/config
$ sudo groupadd nogroup

在所有节点上都需要安装docker,版本要求大于1.7。docker安装可以通过以下步骤:

$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF

$ sudo yum install docker-engine

DC/OS 对于docker使用的存储驱动有特殊要求,如果在内核中已经加载了overlayfs,可以使用overlayfs做为docker的存储驱动,打开
/etc/system/system/docker.service.d/override.conf 并修改,然后重启docker。

ExecStart=/usr/bin/docker daemon —storage-driver=overlay -H fd://

也可以使用devicemapper做为存储驱动,那就需要通过lvm创建thinpool来完成。具体命令如下:

// 创建volume
$ dd if=/dev/zero of=/root/docker-volumes bs=1 count=0 seek=2G
$ losetup /dev/loop2 /root/docker-volumes

// 创建PV和VG
$ pvcreate /dev/loop2
$ vgcreate docker /dev/loop2

// 创建thin pool
$ lvcreate -n pool0 -L 1.5G docker
$ lvcreate -n pool0meta -L 0.1G docker
$ lvconvert --type thin-pool --poolmetadata docker/pool0meta docker/pool0

// 配置override.conf
ExecStart=/usr/bin/docker daemon -H fd://--storage-opt dm.thinpooldev=/dev/mapper/docker-pool0

最后重启docker。

安装DC/OS软件包

首先在安装节点上下载并运行DC/OS包(大概500M)

$ curl -O https://downloads.dcos.io/dcos/EarlyAccess/dcos_generate_config.sh
$ sudo bash dcos_generate_config.sh 

这个脚本会下载并运行一个docker容器,之后在安装节点上会创建一个/opt/mesosphere/ 文件夹。

也可以使用GUI来进行安装:

$ sudo bash dcos_generate_config.sh --web

然后访问http://<安装节点IP>:9000。由于使用GUI方式安装无法看安装过程中的日志和错误信息,不方便排查安装中的具体问题,所以本文中使用的客户端安装方式。

安装过程中需要创建一些配置文件,首先在/opt/mesosphere下创建一个genconf文件夹。在genconf文件夹下创建三个配置文件。

1.genconf/ip-detect:这个文件是为了在每个节点获取自己的IP地址,之后DC/OS会将脚本的输出广播给所有集群中的其他节点。本文使用了官方网站上的脚本获取本机eth0上的IP地址。

#!/usr/bin/env bash

set -o nounset -o errexit
export PATH=/usr/sbin:/usr/bin:$PATH
echo $(ip addr show eth0 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)

2.创建集群配置文件genconf/config.yaml: 在这个文件中需要指定master和slave的IP地址,dns服务器地址,以及安装节点登陆其他节点的ssh用户名。

--- 
agent_list:
- <agent-private-ip-1> 
- <agent-private-ip-2> 

# Use this bootstrap_url value unless you have moved the DC/OS installer assets.
bootstrap_url: file:///opt/dcos_install_tmp 
cluster_name: test
master_discovery: static
master_list:
- <master-private-ip-1>

resolvers:
- 8.8.4.4
- 8.8.8.8 

ssh_port: 22
ssh_user: <username>

3.配置安装节点对集群所有节点的无密码访问,并把ssh key拷贝到genconf/ssh_key。

接下来就可以运行脚本来进行安装了:

// 创建所有配置文件
$ bash dcos_generate_config.sh –genconf

// 安装依赖包
$ bash dcos_generate_config.sh -install-prereqs

// 检查安装前是否所有依赖都已经安装并配置正确
$ bash dcos_generate_config.sh -preflight

// 安装集群
$ bash dcos_generate_config.sh -deploy

// 检查是否所有服务都已经启动
$ bash dcos_generate_config.sh --postflight

如果在运行脚本的过程中没有出现错误的话,一个小的DC/OS集群已经安装成功了!现在就可以通过 http:// 来打开用户界面了。需要注意的是DC/OS采用了OAUTH方式认证用户并默认第一个登陆的用户是管理员。使用你的github用户来登陆自己的DC/OS集群吧。

作者简介:邱见,新加坡国立大学电子与信息工程专业博士,供职于IBM多年,主要从事云计算领域相关的工作,一直关注OpenStack, Mesos等开源社区。

评论