共计 6541 个字符,预计需要花费 17 分钟才能阅读完成。
1. 前言
对于容器编排系统,前段时间主要研究 kubernetes,现在实验室要用 dcos,所以在实验室集群上搭建了该系统,dcos 版本为 1.8.6。
使用的系统为 CentOS 7.2,机器使用情况如下表所示,实验室集群没有联外网。
机器 ip | 作用 |
---|---|
10.107.18.35 | 单独一台 boot 节点 |
10.107.19.1 | 单独一台 master 节点 |
10.107.13.150 | 4 台 slave 节点 |
10.107.19.2 | 4 台 slave 节点 |
10.107.19.3 | 4 台 slave 节点 |
10.107.18.39 | 4 台 slave 节点 |
为了避免安装失败时需要重新启动系统,这里可以在完成第 7 节,安装完成 docker 后将所有机器系统备份,出现问题时将系统还原到备份点。需要主要的是还原后要重新做第 5 步时间同步。
系统备份参考如下:
在 使用 Ubuntu 之前,相信很多人都有过使用 Windows 系统的经历。如果你备份过 Windows 系统,那么你一定记忆犹新:首先需要找到一个备份工 具(通常都是私有软件),然后重启电脑进入备份工具提供的软件环境,在这里备份或者恢复 Windows 系统。Norton Ghost 是备份 Windows 系统时经常使用的备份工具。
在备份 Windows 系统的时候你可能想过,我能不能把整个 C 盘都放到一个 ZIP 文件里去呢。这在 Windows 下是不可能的,因为在 Windows 中有很多文件在它们运行时是不允许拷贝或覆盖的,因此你需要专门的备份工具对 Windows 系统进行特殊处理。
和 备份 Windows 系统不同,如果你要备份 Ubuntu 系统(或者其它任何 Linux 系统),你不再需要像 Ghost 这类备份工具。事实上,Ghost 这类备份工具对于 Linux 文件系统的支持很糟糕,例如一些 Ghost 版本只能完善地支持 Ext2 文件系统,如果你用它来备份 Ext3 文件系统,你可能会 丢失一些宝贵的数据。
1. 备份系统
我该如何备份我的 Ubuntu 系统呢?很简单,就像你备份或压缩其它东西一样,使用 TAR。和 Windows 不同,Linux 不会限制 root 访问任何东西,你可以把分区上的所有东西都扔到一个 TAR 文件里去!
首先成为 root 用户:
$ sudo su
然后进入文件系统的根目录(当然,如果你不想备份整个文件系统,你也可以进入你想要备份的目录,包括远程目录或者移动硬盘上的目录):
# cd /
下面是我用来备份系统的完整命令:
# tar cvpzf backup.tgz –exclude=/proc –exclude=/lost+found –exclude=/backup.tgz –exclude=/mnt –exclude=/sys /
让我们来简单看一下这个命令:
“tar”当然就是我们备份系统所使用的程序了。
“cvpfz”是 tar 的选项,意思是“创建档案文件”、“保持权限”(保留所有东西原来的权限)、“使用 gzip 来减小文件尺寸”。
“backup.gz”是我们将要得到的档案文件的文件名。
“/”是我们要备份的目录,在这里是整个文件系统。
在 档案文件名“backup.gz”和要备份的目录名“/”之间给出了备份时必须排除在外的目录。有些目录是无用的,例如“/proc”、“/lost+ found”、“/sys”。当然,“backup.gz”这个档案文件本身必须排除在外,否则你可能会得到一些超出常理的结果。如果不把“/mnt”排 除在外,那么挂载在“/mnt”上的其它分区也会被备份。另外需要确认一下“/media”上没有挂载任何东西(例如光盘、移动硬盘),如果有挂载东西,必须把“/media”也排除在外。
有人可能会建议你把“/dev”目录排除在外,但是我认为这样做很不妥,具体原因这里就不讨论了。
执行备份命令之前请再确认一下你所键入的命令是不是你想要的。执行备份命令可能需要一段不短的时间。
备份完成后,在文件系统的根目录将生成一个名为“backup.tgz”的文件,它的尺寸有可能非常大。现在你可以把它烧录到 DVD 上或者放到你认为安全的地方去。
在备份命令结束时你可能会看到这样一个提示:’tar: Error exit delayed from previous errors’,多数情况下你可以忽略它。
你还可以用 Bzip2 来压缩文件,Bzip2 比 gzip 的压缩率高,但是速度慢一些。如果压缩率对你来说很重要,那么你应该使用 Bzip2,用“j”代替命令中的“z”,并且给档案文件一个正确的扩展名“bz2”。完整的命令如下:
# tar cvpjf backup.tar.bz2 –exclude=/proc –exclude=/lost+found –exclude=/backup.tar.bz2 –exclude=/mnt –exclude=/sys /
2. 恢复系统
在进行恢复系统的操作时一定要小心!如果你不清楚自己在做什么,那么你有可能把重要的数据弄丢,请务必小心!
接着上面的例子。切换到 root 用户,并把文件“backup.tgz”拷贝到分区的根目录下。
在 Linux 中有一件很美妙的事情,就是你可以在一个运行的系统中恢复系统,而不需要用 boot-cd 来专门引导。当然,如果你的系统已经挂掉不能启动了,你可以用 Live CD 来启动,效果是一样的。你还可以用一个命令把 Linux 系统中的所有文件干掉,当然在这里我不打算给出这个命令!
使用下面的命令来恢复系统:
# tar xvpfz backup.tgz -C /
如果你的档案文件是使用 Bzip2 压缩的,应该用:
# tar xvpfj backup.tar.bz2 -C /
注意:上面的命令会用档案文件中的文件覆盖分区上的所有文件。
执行恢复命令之前请再确认一下你所键入的命令是不是你想要的,执行恢复命令可能需要一段不短的时间。
恢复命令结束时,你的工作还没完成,别忘了重新创建那些在备份时被排除在外的目录:
# mkdir proc
# mkdir lost+found
# mkdir mnt
# mkdir sys
等等
当你重启电脑,你会发现一切东西恢复到你创建备份时的样子了!
2. 本文分析内容安排
1. 关闭 firewalld 和 selinux
2.ssh 免密码登录
3. 时间同步
4. 安装 overlay 模块
5. 安装 docker
6. 安装 dcos
3. 关闭 firewalld 和 selinux
- 所有机器上执行
systemctl stop firewalld && systemctl disable firewalld
执行firewall-cmd --state
查看 firewalld 是否成功关闭,应该显示not running - 所有机器执行
setenforce 0
,sed -i s/SELINUX=enforcing/SELINUX=disabled/g /etc/selinux/config
,重启后输入sestatus
查看 selinux 状态,此时应该显示disabled
4. ssh 免密码登录
在 boot 节点上执行 ssh-keygen -t rsa
生成密钥
执行 ssh-copy-id -i 10.107.x.x
分别将私钥复制到其他要免密钥登陆的机器
5. 时间同步
参考 http://www.linuxidc.com/Linux/2017-12/149541.htm
6. 安装 overlay 模块
执行命令
tee /etc/modules-load.d/overlay.conf <<-'EOF'
overlay
EOF
并重启将 overlay 模块加载如系统中,并执行 lsmod | grep overlay
查看是否加载成功,成功应该显示overlay 42451 0
7. 安装 docker
首先,通过 rpm 或者 yum install 的方式安装 docker,在没网的情况下需要先下载 docker 安装相关的 rpm 包;之后,设置 docker 的存储为 overlay,具体应该执行如下脚本:
mkdir -p /etc/systemd/system/docker.service.d && tee /etc/systemd/system/docker.service.d/override.conf <<- EOF
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --storage-driver=overlay
EOF
改变配置后需要执行 systemctl daemon-reload
命令使配置生效;
这时便可以启动 docker 了,如下:
systemctl start docker
systemctl enable docker
最后,运行 docker info
命令查看是否正常安装 docker,并且存储用的是 overlay,正确情况时显示如下图
8. 安装 dcos
- 在 boot 节点上下载 dcos 的 installer:dcos_generate_config.sh(大约 726MB),同时在与 dcos_generate_config.sh 文件同级目录下新建 genconf 目录,我是在 /home/dcos 目录下建的
mkdir -p genconf
cd genconf -
在 genconf 中新建一个 ip-detect 文件,用于探测集群中节点的 ip,我使用的文件内容为
#!/bin/bash echo $(ip addr s | grep inet | grep 10.107 | awk -F'' '{print $2}'| awk -F'/' '{print $1}')
这里不能写错,因为该文件内容最终会被拷贝到 master 和 agent 节点的
/opt/mesosphere/bin/detect_ip
中,在第 9 步启动 dcos 服务时用来探测 ip。如果,写错将不能正常启动集群,报如下错误time="2017-01-13T00:57:22+08:00" level=info msg="/opt/mesosphere/etc/endpoints_config.json not found" time="2017-01-13T00:57:22+08:00" level=error msg="Could not detect IP: fork/exec /opt/mesosphere/bin/detect_ip: exec format error" time="2017-01-13T00:57:22+08:00" level=error msg="Could not get mesos node id: Get http://:5051/state: dial tcp :5051: getsockopt: connection refused" time="2017-01-13T00:57:22+08:00" level=fatal msg="Found unhealthy systemd units"
- 在 genconf 中新建 config.yaml 文件,用于集群 master 以及 agent 节点的配置,我所用集群的配置为:
agent_list:
< ul><li>10.107.19.2</li>
< li>10.107.19.3</li>
< li>10.107.18.39</li>
< li>10.107.13.150
auth_enabled: false
bootstrap_url: file:///opt/dcos_install_tmp
cluster_name: DC/OS
exhibitor_storage_backend: static
ip_detect_path: genconf/ip-detect
master_discovery: static
master_list:</li>
< li>10.107.19.1
process_timeout: 10000
resolvers:</li>
< li>8.8.8.8</li>
< li>8.8.4.4
ssh_key_path: genconf/ssh_key
ssh_port: 22
ssh_user: root
telemetry_enabled: false
oauth_enabled: false - 将 SSH key 拷贝的 genconf 目录,具体命令为
cp /root/.ssh/id_rsa genconf/ssh_key && chmod 0600 genconf/ssh_key
- 运行
bash dcos_generate_config.ee.sh --genconf
命令创建安装文件,并提取出为集群提供文件的 docker 容器,运行完这一步后 dcos 下的目录结构如下图: - 运行
bash dcos_generate_config.ee.sh --install-prereqs
安装 dcos 需要的依赖环境。但是,如果集群没有联网,那么在运行此命令前需要首先在 master 和 agent 节点上运行yum install -y tar xz unzip curl ipset
安装依赖,否则会出错。这一步运行成功后屏幕输出如下图,其中提示的红色的错误是由于集群没有联网导致的,可以直接忽略。 - 检测各节点是否已达到了安装部署 dcos 的全部要求
bash dcos_generate_config.ee.sh --preflight
,boot 节点会检查其他节点的系统环境符不符合安装要求,是不是有配置错误,或者缺包、版本不对等问题。运行成功后证明各机器达到了部署 dcos 的要求,屏幕输出如下,其中红色错误依旧是未联网导致的,可以忽略。 - 正式安装
bash dcos_generate_config.ee.sh --deploy
,在上一步环境检查顺利通过以后,执行 deploy,其实就是从 boot 节点把安装镜像下发到各个节点而已,上一步没问题这一步一般也不会出错。运行成功后证明各机器已经成功安装 dcos,屏幕输出如下图,红色错误依旧忽略。 - 确保服务启动并且正常运行
bash dcos_generate_config.ee.sh --postflight
,这步其实就是 boot 去各个节点把 docker 镜像拉起来,DCOS 的那些组件像 mesos master、slave、marathon、mesos-dns 等都是运行在 docker 里,另外具体配置信息也是 boot 节点通过环境变量这种方式帮你注入进去,这一步一般也不会出现问题。运行成功后 dcos 服务已经启动,屏幕输出如下图,护色错误依旧忽略。 - dcos 服务监控
监控 dcos 服务的网址为http://<master-public-ip>:8181/exhibitor/v1/ui/index.html
,如下图所示,当 Hostname 前面的圆形的状态图标为绿色时,代表 DC/OS 的接口已经可用了 - 登陆 DC/OS
登陆 DC/OS 系统的接口为http://<public-master-ip>/
,登陆后界面如下图
注意:如果安装过程中出现错误需重新安装的话,需要清除已经安装的文件。具体做法是新建一个 uninstall.sh 文件,文件内容如下,将该文件改为可执行文件,然后执行即可。
/opt/mesosphere/bin/pkgpanda uninstall && \
rm -rf /opt/mesosphere /var/lib/mesos /var/lib/dcos /var/lib/zookeeper /var/log/mesos /etc/mesosphere /var/lib/mesosphere && \
rm -rf /etc/profile.d/dcos.sh /etc/systemd/journald.conf.d/dcos.conf /etc/systemd/system/dcos-cfn-signal.service /etc/systemd/system/dcos-download.service /etc/systemd/system/dcos-link-env.service /etc/systemd/system/dcos-setup.service /etc/systemd/system/multi-user.target.wants/dcos-setup.service /etc/systemd/system/multi-user.target.wants/dcos.target
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149542.htm