Docker基础平台安装
1. 前言
1.1. 文档目标
假定您对docker及相关生态有一定的了解,参照此文档,可以完成以下工作
² 完成docker基础组件的安装
² 完成docker网络组件的安装配置
² 完成docker平台管理组件的安装
1.2. 平台目标
² Docker应用部署平台
² 各主机资源统一调度
² 应用实例快速伸缩
² 方便的服务发现机制
² 内部DNS访问容器
² 跨主机容器网络
² 容器内应用健康检查
1.3. 环境要求
操作系统:centos 7.1 及以上
主机数量:建议三台及以上物理或虚拟机
1.4. 涉及组件
组件 | 备注 |
Docker deamon | |
Zookeeper | 作为mesos集群基础 |
Mesos-master | Mesos主及控制台 |
Mesos-slave | |
Marathon | Marathon框架控制台 |
Etcd | 容器网络分配中心 |
flannel | 容器网络服务 |
Docker registry | 镜像仓库 |
Mesos-dns | DNS组件 |
Marathon-lb | 自动Haproxy代理组件 |
1.5. 组件规划
IP | 标签 | 说明 | 基础环境 |
192.168.2.45 <docker, flannel,etcd> | scope:back num:1 | DNS服务器 | Mesos-master Mesos-slave Marathon |
192.168.2.46 <docker, flannel,etcd> | scope:back num:2 db:s | Mesos-master Mesos-slave | |
192.168.2.47 <docker, flannel> | scope:back num:3 db:m | Mesos-master Mesos-slave Marathon | |
192.168.2.44 <docker, flannel,etcd> | scope:font;num:1 | HA-PROXY(预留) | Mesos-slave |
192.168.2.48 <docker, flannel> | scope:font;num:2 | DNS服务器 | Mesos-slave |
192.168.2.49 <docker, flannel> | scope:font;num:3 | HA-PROXY(预留) | Mesos-slave Marathon |
1.6. 平台访问参考
名称 | 访问路径 |
Mesos平台 | 192.168.2.45:5050 |
Marathon平台 | http://192.168.2.45:8080/ui/#/apps |
Etcd | http://192.168.2.46:2379 |
Registry | 192.168.2.39:5000 |
Haproxy |
2. 安装部署
2.1. 安装docker
² 作用:docker运行基础组件
² 安装目标:所有主机
² 脚本:
yum -yremove docker-engine
rm -rfdocker.sh
wget http://192.168.2.37/soft/docker.sh
chmod +xdocker.sh
./docker.sh192.168.2.39:5000
2.2. 安装etcd集群
² 作用:跨主机网络配置信息存储,集群模式
² 安装目标:集群主机,三台
² 脚本
rm -rf etcd-cluster.sh
wget http://192.168.2.37/soft/etcd-cluster.sh
chmod +x etcd-cluster.sh
./etcd-cluster.sh etcd03 etcd01=http://192.168.2.47:2380,etcd02=http://192.168.2.48:2380,etcd03=http://192.168.2.49:2380
2.3. 安装flannel网络
² 作用:跨主机网络虚拟网关组件
² 安装目标:所有主机
² 脚本
# 写入子网配置
etcdctlset /coreos.com/network/config '{"Network":"172.88.0.0/16", "Backend":{"Type":"vxlan"}}'
etcdctlget /coreos.com/network/config
#
安装
flannel
yum -y remove flannel
rm -rf flannel.sh
wget -N http://192.168.2.37/soft/flannel.sh
chmod +x flannel.sh
./flannel.sh http://192.168.2.44:2379,http://192.168.2.45:2379,http://192.168.2.46:2379
2.4. 搭建私有镜像库
² 作用:本地docker镜像仓库
² 安装目标:单机
² 脚本
docker run-d --net=host --privileged --restart always \
-v/home/data:/var/lib/registry \
index.alauda.cn/library/registry:2.4.1
2.5. 配置本地私有镜像库
² 作用:使所有docker主机能使用该镜像库
² 安装目标:所有主机
² 脚本
vim/usr/lib/systemd/system/docker.service
#在这行加入参数:ExecStart=/usr/bin/docker daemon --insecure-registry192.168.2.39:5000 -H fd://
systemctldaemon-reload
servicedocker restart
ps-ef|grep docker
# 应该显示 /usr/bin/docker daemon --insecure-registry192.168.2.39:5000 -H fd://
2.6. 安装zookeeper集群
² 作用:作为mesos集群基础
² 安装目标:建议三台主机,集群方式
² 脚本
# 启动zk应用
docker run-d \
-e MYID=1\
-eSERVERS=192.168.2.37,192.168.2.38,192.168.2.39 \
--name=zookeeper--net=host --restart=always 192.168.2.39:5000/zookeeper:3.4.8
² 注意事项
n 不同ZK实例启动时MYID的值需要不同,以便能构成ZK集群
2.7. Mesos平台主从安装
² 作用:Mesos平台,整合各主机CPU及内存资源,统一调度
² 安装目标:
n Mesos-主 统一资源调度;建议三台机器,自动通过zk选举master
n Mesos-从 负责向主服务器反馈本机资源情况及接受调度,安装到所有主机(包括mesos-主)
² 脚本
n 本机IP变量
# 先获取并设计本机IP变量
exportHOST=$(ifconfig eth0 | grep 'inet'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{print $2}')
echo $HOST
n 安装mesos-主,连接到zk集群
# mesos
主,连接到
zk
集群
docker run -d \
-e MESOS_HOSTNAME=$HOST \
-e MESOS_IP=$HOST \
-e MESOS_QUORUM=1 \
-e MESOS_ZK=zk://192.168.2.45:2181,192.168.2.46:2181,192.168.2.47:2181/mesos \
--name mesos-master --net host --restart always 192.168.2.39:5000/mesos-master:0.28.1
n 安装mesos-从
docker run-d \
-eMESOS_HOSTNAME=$HOST \
-eMESOS_IP=$HOST \
-eMESOS_MASTER=zk://192.168.2.45:2181,192.168.2.46:2181,192.168.2.47:2181/mesos \
-eMESOS_ATTRIBUTES=key:back1 \
-v/sys/fs/cgroup:/sys/fs/cgroup \
-v /var/run/docker.sock:/var/run/docker.sock\
--namemesos-slave --net host --privileged --restart always \
192.168.2.39:5000/mesos-slave:0.28.1/usr/sbin/mesos-slave --attributes='scope:back;num:2;db:s'
² 注意事项
n Mesos从安装时,需要注意规划并设定attributes,可以用来区分特定主机资源,如某主机供mysql使用,其值为key:value ;在其框架上发布docker应用时,可指定部署到有特定属性的主机
2.8. Marathon框架安装
² 作用:基于mesos的服务框架,用来运行长时间任务
² 安装目标:三台主机,主从互备
² 脚本
docker run-d \
-eMARATHON_HOSTNAME=$HOST \
-eMARATHON_HTTPS_ADDRESS=$HOST \
-eMARATHON_HTTP_ADDRESS=$HOST \
-e MARATHON_MASTER=zk://192.168.2.45:2181,192.168.2.46:2181,192.168.2.47:2181/mesos\
-eMARATHON_ZK=zk://192.168.2.45:2181,192.168.2.46:2181,192.168.2.47:2181/marathon\
--namemarathon --net host --restart always 192.168.2.39:5000/marathon:1.1.1
2.9. 安装DNS服务器
² 作用:docker容器内部可使用dns相互访问
² 安装目标:二台主机,主备
² 脚本
curl-XPOST 'http://192.168.2.45:8080/v2/apps' -H 'Content-Type: application/json'-d '{
"id":"/base/mesos-dns-48",
"env": {
"LOCAL_IP":"192.168.2.48",
"MESOS_ZK":"zk://192.168.2.45:2181,192.168.2.46:2181,192.168.2.47:2181/mesos",
"MESOS_DNS_EXTERNAL_SERVERS":"114.114.114.114,8.8.4.4",
"MESOS_DNS_REFRESH":"10"
},
"container": {
"docker": {
"image": "192.168.2.39:5000/mesos-dns",
"network":"HOST"
},
"type": "DOCKER"
},
"cpus": 0.2,
"mem": 128,
"instances": 1,
"constraints":[["hostname", "CLUSTER", "192.168.2.48"]]
}'
² 注意事项
n 脚本中constraints中标红的IP需要更改,表示DNS服务器部署到该主机上
2.10. 增加DNS服务配置
² 作用:使各主机及各主机上容器优先使用内部DNS服务器
² 安装目标:所有主机
² 脚本
sudo sed-i '1s/^/nameserver 192.168.2.45\n/' /etc/resolv.conf
sudo sed-i '1s/^/nameserver 192.168.2.48\n/' /etc/resolv.conf
2.11. 安装服务访问代理
² 作用:通过marathon启动的docker应用可以按规定方式由haproxy反向代理访问
² 安装目标:建议两台以上,主备
² 脚本
docker run-d --privileged -e PORTS=11112 \
--net=host--restart=always 192.168.2.39:5000/marathon-lb --sse \
-mhttp://192.168.2.45:8080 -m http://192.168.2.47:8080 -mhttp://192.168.2.49:8080 \
--group proxy44
² 注意事项
n 不同主机上的代理,需要有不同的group,使用marathon发布应用时使用不同的label来标示使用哪个代理
² 代理使用方式
# 使用方式1 主机+路径
HAPROXY_GROUP=proxy44
HAPROXY_0_PATH=/v1/test
HAPROXY_0_VHOST=client2.com
# 使用方式2 主机
HAPROXY_GROUP=proxy44
HAPROXY_0_VHOST=client2.com
# 使用方式3 IP+servicePort
#HAPROXY_0_PORT重新默认的serviceport
HAPROXY_GROUP=proxy44
HAPROXY_0_PORT=8787
# 使用方式4 IP+PATH
HAPROXY_GROUP=proxy44
HAPROXY_0_PATH=/v1/test
HAPROXY_0_VHOST=192.168.2.44
如CAS以下配置,即可通过192.168.2.44:8787 或 49:8787访问到CAS应用容器
2.12. 完结
至此,docker的基础平台,mesos-marathon平台搭建完成