https://dcos.io/releases/
https://downloads.dcos.io/dcos/stable/1.12.0/dcos_generate_config.sh
https://docs.mesosphere.com/1.12/installing/production/ Nodes 要求:
Proxy/Bootstrap:用于安装集群的机器。必须安装Docker(CentOS系统要用RedHat分支的1.13版本)
Master node:建议3或者5个,开发测试可用1个。4 cores 处理器,32GB RAM,120GB 硬盘。
建议SSD硬盘挂载/var/lib/dcos。
/var/lib/dcos/mesos/master 日志目录
/var/lib/dcos/cockroach (企业版)CockroachDB
/var/lib/dcos/navstar Mnesia数据库
/var/lib/dcos/secrets (企业版)secrets保险箱
/var/lib/dcos/exhibitor Zookeeper数据库
Agent node (public):建议6个以上,1个也可以。2 cores 处理器,16GB RAM,60GB 硬盘。
/var 至少20GB 硬盘,可以访问外网或者内部的 Docker 仓库。
必须关闭 firewalld,禁用 DNSmasq 释放 53 端口。
/var/lib/mesos Master和Agent节点持久存储在这个目录,不要远程挂载!<<<--
/var/lib/mesos/slave/slaves 任务的沙盒目录
/var/lib/mesos/slave/volumes 框架使用的 ROOT 持久卷
/var/lib/mesos/docker/store 存储 docker 镜像层,用于提供 URC 容器
/var/lib/docker 存储 docker 镜像层,用于提供 docker 容器,不要远程挂载!<<<--
Agent node (private):同上,只是 private agent node,可以有更多个。 后面的安装步骤假设有上面描述的 4个节点 安装 dcos 集群。 <<<--- 其他要求:(将在后面的安装步骤中设置)
全部节点启用 SSH (Secure shell)
全部节点启用 ICMP (Internet Control Message Protocol)
(企业版)全部hostnames能够被 DNS 解析
每个节点通过 bootstrap 节点访问网络
每个节点通过 IP 连接自己和集群其他节点
(企业版)所有端口都应打开,以进行从管理节点到代理节点的来回通信
UDP 必须打开才能进入管理节点上的端口 53。为连接到集群,Mesos 代理节点服务 (dcos-mesos-slave) 使用此端口查找 leader.mesos
建议为 DC/OS 安装使用高速互联网连接。DC/OS 服务需要每秒至少 10 MBit。如果工件下载时间超过文件 /opt/mesosphere/etc/mesos-slave-common 中 MESOS_EXECUTOR_REGISTRATION_TIMEOUT 的值,某些 DC/OS 服务的安装将失败。MESOS_EXECUTOR_REGISTRATION_TIMEOUT 的默认值为 10 分钟。 安装步骤: 系统:CentOS 7.4
语言:en_US.utf-8
文件系统: xfs with d_type
检查目录是否有ftype=1:
# xfs_info /var/lib | grep -C 10 ftype=1
检查整个文件系统:
# df -Th
格式化新分区:# mkfs.xfs -n ftype=1 -f /dev/mesos/dcos
可以使用符号链接将/var/lib下的docker、mesos、dcos,可尝试如下方法:
# mkdir -p /export/mesos
# mount /dev/mesos/dcos /export/mesos
mkdir -p /export/mesos/{docker,mesos,dcos,registry}
systemctl stop docker
rm -rf /var/lib/{docker,mesos,docs,registry}
ln -s /export/mesos/docker /var/lib/docker
ln -s /export/mesos/mesos /var/lib/mesos
ln -s /export/mesos/dcos /var/lib/dcos
ln -s /export/mesos/registry /var/lib/registry
ls -l /var/lib/{docker,mesos,dcos,registry}
systemctl start docker && docker info | grep d_type 全程联网,需要 root 权限
注意:下面涉及到ssh -t命令的,请分别运行,不要一块粘贴到远程终端上。
如果安装失败,请跳到最后面的“4. 卸载 dcos”,然后重新安装。 1. 准备,在 bootstrap 节点配置SSH,然后远程关闭SELinux、Firewalld等服务,安装Docker等
1.1 配置SSH
假设不知道 root 账户密码,但可以 sudo 获得 root 权限,
可以在普通账户创建 ssh key 后复制到 root 目录,步骤如下:
$ ssh-keygen -t rsa // 生成密钥对,一路回车
$ ssh-copy-id master // 复制本地公钥到 master 节点此用户的 authorized_keys 文件,需要输入账户密码
$ ssh-copy-id agent1 // 同上,复制到 agent1 节点,假设此节点是 public agent
$ ssh-copy-id agent2 // 同上,复制到 agent2 节点,假设此节点是 private agent // 复制 ssh 给 root;禁用 sudo 密码提示。方便后面远程连接 root,需要输入账户密码
$ sudo mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh && sudo cp ~/.ssh/* /root/.ssh/; echo '%wheel ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers
$ ssh -t master "sudo mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh && sudo cp ~/.ssh/* /root/.ssh/; echo '%wheel ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers"
$ ssh -t agent1 "sudo mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh && sudo cp ~/.ssh/* /root/.ssh/; echo '%wheel ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers"
$ ssh -t agent2 "sudo mkdir -p /root/.ssh && sudo chmod 700 /root/.ssh && sudo cp ~/.ssh/* /root/.ssh/; echo '%wheel ALL=(ALL) NOPASSWD: ALL' | sudo tee -a /etc/sudoers"
$ sudo su // 切换到 root
# // 下面的操作均在 root 下执行,因此不写 # 提示符了,也不加行尾注释,方便复制 1.2 配置SELinux和firewalld等
// 先查看 SELinux 状态,如果是 enabled 状态,再进行关闭操作,并且重启
sestatus
// 如果需要,sed 替换命令,可以设置替换为 permissive(centOS 不可设置为启用)
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && reboot
ssh -t master "setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && reboot"
ssh -t agent1 "setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && reboot"
ssh -t agent2 "setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && reboot"
// 创建 nogroup 和 docker 组
groupadd nogroup && groupadd docker
// 关闭 firewalld(centOS 必须关闭 firewalld),关闭 dnsmasq(释放 53 端口,centos最小安装无此服务)
systemctl stop firewalld && sudo systemctl disable firewalld
systemctl stop dnsmasq && sudo systemctl disable dnsmasq.service ssh -t master "groupadd nogroup && groupadd docker"
ssh -t agent1 "groupadd nogroup && groupadd docker"
ssh -t agent2 "groupadd nogroup && groupadd docker"
ssh -t master "systemctl stop firewalld && sudo systemctl disable firewalld; systemctl stop dnsmasq && sudo systemctl disable dnsmasq.service"
ssh -t agent1 "systemctl stop firewalld && sudo systemctl disable firewalld; systemctl stop dnsmasq && sudo systemctl disable dnsmasq.service"
ssh -t agent2 "systemctl stop firewalld && sudo systemctl disable firewalld; systemctl stop dnsmasq && sudo systemctl disable dnsmasq.service" 1.3 安装 Docker
卸载新版本的 docker-ce(如果存在),安装 Redhat fork docker 1.13,启动,启用,查看版本
建议分别运行,以便查看是否安装正确。
如果使用国内的centos安装源,请参考:https://mirrors.tuna.tsinghua.edu.cn/help/centos/ yum remove -y docker-ce && yum install -y docker && systemctl start docker && systemctl enable docker && docker version
ssh -t master "yum remove -y docker-ce && yum install -y docker && systemctl start docker && systemctl enable docker && docker version"
ssh -t agent1 "yum remove -y docker-ce && yum install -y docker && systemctl start docker && systemctl enable docker && docker version"
ssh -t agent2 "yum remove -y docker-ce && yum install -y docker && systemctl start docker && systemctl enable docker && docker version"
如果发现错误,请检查是否有文件冲突提示,加入到 yum remove 命令中。 配置Docker仓库镜像(国内,会覆盖daemon.json)
echo '{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version
ssh -t master "echo '{\"registry-mirrors\": [\"https://docker.mirrors.ustc.edu.cn/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version"
ssh -t agent1 "echo '{\"registry-mirrors\": [\"https://docker.mirrors.ustc.edu.cn/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version"
ssh -t agent2 "echo '{\"registry-mirrors\": [\"https://docker.mirrors.ustc.edu.cn/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version" 1.4 安装其他必要组件
yum install -y tar xz unzip curl ipset net-tools ntp
ssh -t master "yum install -y tar xz unzip curl ipset net-tools ntp"
ssh -t agent1 "yum install -y tar xz unzip curl ipset net-tools ntp"
ssh -t agent2 "yum install -y tar xz unzip curl ipset net-tools ntp" 1.5 启用 NTP(网络时间协议)
ntptime; adjtimex -p; timedatectl
ssh -t master "ntptime; adjtimex -p; timedatectl"
ssh -t agent1 "ntptime; adjtimex -p; timedatectl"
ssh -t agent2 "ntptime; adjtimex -p; timedatectl" 1.6 下载 dcos 安装脚本(900MB左右)
cd /root
curl -O https://downloads.dcos.io/dcos/stable/dcos_generate_config.sh
// curl -O https://downloads.dcos.io/dcos/stable/1.12.0/dcos_generate_config.sh
chmod +x dcos_generate_config.sh 2. 创建配置文件
配置文件结构:
dcos_generate_config.sh
genconf/
genconf/config.yaml
genconf/ip-detect
genconf/ssh_keys 2.1 创建 genconf 目录,复制 ssh key,创建 ip-detect 文件
mkdir -p genconf
cd genconf
cp /root/.ssh/id_rsa ssh-key
chmod 600 ssh-key vi ip-detect
文件内容:
#!/usr/bin/env bash
# AWS:
# curl -fsSL http://169.254.169.254/latest/meta-data/local-ipv4
# GCE:
# curl -fsSl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/ip
set -o nounset -o errexit
echo $(ip addr|grep 192.168|grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | head -1)
文件结束
请将文件中 192.168 替换为本机的 ip 地址的前两组数字。
chmod +x ip-detect
./ip-detect
查看是否显示为本机 ip 2.2 创建 config.yaml。参见:https://docs.mesosphere.com/1.12/installing/production/advanced-configuration/configuration-reference/#configuration-parameters
vi config.yaml
文件内容:
bootstrap_url: http://<bootstrap_ip>:80
ip_detect_public_filename: genconf/ip-detect
master_list:
- <master-private-ip-1>
# - <master-private-ip-2>
# - <master-private-ip-3>
public_agent_list:
- <public-agent-private-ip>
agent_list:
- <private-agent-private-ip-1>
# - <private-agent-private-ip-2>
cluster_name: DCOS
exhibitor_storage_backend: static
master_discovery: static
resolvers:
- 8.8.4.4
- 8.8.8.8
ssh_key_path: /genconf/ssh-key
ssh_port: 22
ssh_user: root
use_proxy: 'false'
# http_proxy: http://<user>:<pass>@<proxy_host>:<http_proxy_port>
# https_proxy: http://<user>:<pass>@<proxy_host>:<http_proxy_port>
# no_proxy:
# - '.mesos'
# - '.thisdcos.directory'
# - '.dcos.directory'
# - '.zk'
# - '127.0.0.1'
# - 'localhost'
enable_ipv6: 'false'
telemetry_enabled: 'false'
oauth_enabled: 'false'
文件结束
文件的最后两行是关闭dcos体验反馈和oauth登录,社区版建议关闭。
resolvers最多可以3个,如需解析内网主机名,要指定内网的 DNS。
如果指定代理,请同时配置 Docker 代理,见后面“2.4 配置 Docker 代理”
企业版可指定superuser_username和superuser_password_hash,密码通过
bash dcos_generate_config.ee.sh --hash-password <superuser_password>
或者--set-superuser-password生成到config.yaml 2.3 返回 dcos_generate_config.sh 路径,准备安装
cd .. 2.4 配置 Docker 代理(可选)
mkdir -p /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/http-proxy.conf
文件开始
[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/" "HTTPS_PROXY=https://proxy.example.com:443/" "NO_PROXY=.mesos,.thisdcos.directory,.dcos.directory,.zk,127.0.0.1,localhost"
文件结束
systemctl daemon-reload && systemctl restart docker
验证代理是否被加载:
systemctl show --property=Environment docker 3. 安装 dcos
3.1 安装 dcos
bash dcos_generate_config.sh
docker rm -f nginx
docker run -d -p 80:80 -v $PWD/genconf/serve:/usr/share/nginx/html:ro --restart=always --name nginx nginx
// 安装 master 节点
ssh master
mkdir /tmp/dcos; cd /tmp/dcos
curl -O http://<bootstrap-ip>/dcos_install.sh
bash dcos_install.sh master
exit
// 安装 agent1(public agent)节点
ssh agent1
mkdir /tmp/dcos; cd /tmp/dcos
curl -O http://<bootstrap-ip>/dcos_install.sh
bash dcos_install.sh slave_public
exit
// 安装 agent2(private agent)节点
ssh agent2
mkdir /tmp/dcos; cd /tmp/dcos
curl -O http://<bootstrap-ip>/dcos_install.sh
bash dcos_install.sh slave
exit 如果安装成功
监视 Exhibitor 页面:显示master节点的zookeeper的状态,主节点融合大约需要 10 分钟
http://<master-public-ip>:8181/exhibitor/v1/ui/index.html
DCOS主页:
http://<public-master-ip>/ 3.2 配置代理(可选)
注意:下面的proxy.env是链接文件,不要用文件复制命令替换,请用vi手动修改。
如果dcos需要代理访问,只在前面的方式配置config.yaml和配置docker代理是不够的,
还需要在每个节点修改proxy.env。
检查是否代理配置成功的方法之一是:访问dcos界面的Catalog页面,默认它会去官网的Universe中获得组件列表。 配置master节点代理
ssh master
vi /opt/mesosphere/etc/proxy.env
文件开始
http_proxy=http://<user>:<pass>@<proxy_host>:<http_proxy_port>
https_proxy=https://<user>:<pass>@<proxy_host>:<https_proxy_port>
no_proxy=".mesos,.thisdcos.directory,.dcos.directory,.zk,127.0.0.1,localhost"
文件结束
systemctl restart dcos-cosmos
systemctl restart dcos-adminrouter.service 配置public agent节点代理
ssh agent1
vi /opt/mesosphere/etc/proxy.env
文件开始
http_proxy=http://<user>:<pass>@<proxy_host>:<http_proxy_port>
https_proxy=https://<user>:<pass>@<proxy_host>:<https_proxy_port>
no_proxy=".mesos,.thisdcos.directory,.dcos.directory,.zk,127.0.0.1,localhost"
文件结束
systemctl restart dcos-mesos-slave-public 配置private agent节点代理
ssh agent1
vi /opt/mesosphere/etc/proxy.env
文件开始
http_proxy=http://<user>:<pass>@<proxy_host>:<http_proxy_port>
https_proxy=https://<user>:<pass>@<proxy_host>:<https_proxy_port>
no_proxy=".mesos,.thisdcos.directory,.dcos.directory,.zk,127.0.0.1,localhost"
文件结束
systemctl restart dcos-mesos-slave 3.3 安装 dcos cli(可选)
dcos cli 可以安装到任何机器或者节点,并且有 windows、macOS和linux不同的版本。下面假设安装到了 bootstrap 节点。
在 DCOS 页面里可以通过左上角的下拉菜单安装,也可以手动安装,注意地址的版本号:
curl -O https://downloads.dcos.io/binaries/cli/linux/x86-64/dcos-1.12/dcos
mv dcos /usr/local/bin
chmod +x dcos /usr/local/bin/dcos
注意:/usr/local/bin 路径下的程序,默认不会加入 root 账户的 PATH 变量,建议返回普通用户使用 dcos 命令。
使用前设置集群地址
dcos cluster setup https://<master-IP>
dcos 3.4 安装私有 Universe(可选)
在不连接外网使用 Universe 的方法
mkdir -p ~/universe && cd ~/universe
curl -v https://downloads.mesosphere.com/universe/public/local-universe.tar.gz -o local-universe.tar.gz
curl -v https://raw.githubusercontent.com/mesosphere/universe/version-3.x/docker/local-universe/dcos-local-universe-http.service -o dcos-local-universe-http.service
curl -v https://raw.githubusercontent.com/mesosphere/universe/version-3.x/docker/local-universe/dcos-local-universe-registry.service -o dcos-local-universe-registry.service
cd ..
scp -r universe <master-IP>:~
ssh -A <master-IP>
cd universe
mv dcos-local-universe-registry.service /etc/systemd/system/
mv dcos-local-universe-http.service /etc/systemd/system/
docker load < local-universe.tar.gz
systemctl daemon-reload
systemctl enable dcos-local-universe-http
systemctl enable dcos-local-universe-registry
systemctl start dcos-local-universe-http
systemctl start dcos-local-universe-registry
验证服务是否成功
systemctl status dcos-local-universe-http
systemctl status dcos-local-universe-registry
如果有多个 Master 节点,那么都需要安装上面方法安装。 说明:本小节的例子中,将 master.mesos 替换为每个真正的 Master 节点名,
若 dcos 命令的操作系统不识别节点名,可配置 hosts(/etc/hosts) 技巧:获得主机的IP的方法,假设主机名为master.mesos
host master.mesos
host后面也可以用ip获得主机名。 用 dcos 命令添加私有 Universe,如果有多个 Master 节点,需要全部加入
dcos package repo remove Universe
dcos package repo add local-universe http://master.mesos:8082/repo
注:重新添加官网 Universe(也可在 dcos 页面的 Settings/Package Repositories 里添加)
dcos package repo add Universe https://universe.mesosphere.com/repo 为每个 Master 节点配置 Docker 信任证书:
创建 Docker 证书
dcos node ssh --master-proxy --mesos-id=<mesos-id>
sudo mkdir -p /etc/docker/certs.d/master.mesos:5000
sudo curl -o /etc/docker/certs.d/master.mesos:5000/ca.crt http://master.mesos:8082/certs/domain.crt
sudo systemctl restart docker
添加到信任(openssl那行会创建<hash_number>)
sudo cp /etc/docker/certs.d/master.mesos:5000/ca.crt /var/lib/dcos/pki/tls/certs/docker-registry-ca.crt
cd /var/lib/dcos/pki/tls/certs/
openssl x509 -hash -noout -in docker-registry-ca.crt
sudo ln -s /var/lib/dcos/pki/tls/certs/docker-registry-ca.crt /var/lib/dcos/pki/tls/certs/<hash_number>.0
exit 完成后,DCOS的Catalog页会显示信任的包。
可以手动创建一个可选的 Universe,
参见:https://docs.mesosphere.com/1.12/administering-clusters/deploying-a-local-dcos-universe/#selected-packages
例子:需要一个安装了docker,请能够make,并且能连接网络的linux机器
$ git clone https://github.com/mesosphere/universe.git --branch version-3.x
$ cd universe/docker/local-universe/
// 编译 universe-base 镜像
$ sudo make base
// 编译 1.12 版本的自定义 local-universe 镜像,最终会生成 local-universe.tar.gz
$ sudo make DCOS_VERSION=1.12 DCOS_PACKAGE_INCLUDE="cassandra:1.0.25-3.0.10,marathon:1.4.2" local-universe
$ sudo chmod 777 local-universe.tar.gz 3.5 私有 Docker Registry(可选)
除了使用 Docker hub,还可以使用私有的 Docker Registry,有下面两种情况。
3.5.1 安装 Universe 中的 Registry
参考:https://github.com/dcos/examples/tree/master/registry
内部的 Registry 服务虚拟地址默认是:registry.marathon.l4lb.thisdcos.directory:5000 方法一:使用自签名证书配置 Docker Registry
应该使用第三方机构(如 Let's Encrypt)创建授权证书,下面的例子是如何使用自签名证书。
注意:创建的证书必须安装到每个需要访问 Docker Registry 的节点。 (1) 创建证书
在 bootstrap 节点
cd ~/genconf/serve
openssl req -newkey rsa:4096 -nodes -sha256 -keyout domain.key -x509 -days 365 -out domain.crt
------
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:NY
Locality Name (eg, city) [Default City]:NYC
Organization Name (eg, company) [Default Company Ltd]:mycompany
Organizational Unit Name (eg, section) []:myorg
Common Name (eg, your name or your servers hostname) []:registry.marathon.l4lb.thisdcos.directory
Email Address []:myemailaddress@mesosphere.com
------
查看生成的 domain.crt (将作为registry-certificate)和 domain.key(将作为registry-key) 文件
ls -la domain.*
查看证书文件
cat domain.crt (2) 分发证书到需要访问 Docker Registry 的全部 agent 节点的下面位置:/etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000/ca.crt
并将证书加入到受信任的证书列表里。
mkdir -p /etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000
cp domain.crt /etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000/ca.crt
sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1; systemctl restart docker ssh -t agent1 "mkdir -p /etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000"
ssh -t agent2 "mkdir -p /etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000"
scp domain.crt agent1:/etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000/ca.crt
scp domain.crt agent2:/etc/docker/certs.d/registry.marathon.l4lb.thisdcos.directory:5000/ca.crt
ssh -t agent1 "sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1; systemctl restart docker"
ssh -t agent2 "sysctl -w net.netfilter.nf_conntrack_tcp_be_liberal=1; systemctl restart docker" (3) 在 dcos 界面的 Catalog 里添加 Registry
配置修改如下:选择Security页
勾选 enable
填写 http tls download ip 为 bootstrap 的 ip 地址
其他默认(http tls download port:80,http tls certificate filename:domain.crt,http tls key filename:domain.key)
安装即可。 (4) 测试(可选)
(4.1) 添加一个 registry-frontend 服务
在 dcos 界面的 Services 里添加一个新服务
选择 Single Contrainer
Service ID: /registry-frontend
Instances: 1
Container Image: konradkleine/docker-registry-frontend:v2
CPUs: 0.5
Memory (MiB): 128 Networking 页面
Network Type: Bridge
+ Add Service Endpoints
Container Port: 80
Service Endpoint Name: web
取消勾选 Assign Automatically (可选,设置Host Port方便以后直接访问固定端口)
Host Port: 5555
勾选 Enable Load Balanced Service Address
Load Balanced Port: 8080 Health Checks 页面
+ Add Health Check
Protocol: HTTP
Service Endpoint: web
Path: / Environment 页面
添加环境变量:
ENV_DOCKER_REGISTRY_HOST: registry.marathon.l4lb.thisdcos.directory
ENV_DOCKER_REGISTRY_PORT: 5000
ENV_MODE_BROWSE_ONLY: true
ENV_DOCKER_REGISTRY_USE_SSL: 1 (如果registry-frontend获取不到资源,可以去掉试试)
添加Labels:
DCOS_SERVICE_PORT_INDEX: 0
DCOS_SERVICE_NAME: registry-frontend
HAPROXY_GROUP: external
DCOS_SERVICE_SCHEME: http 由于不能直接访问 http://DCOS/service/registry-frontend/
因此需要到DCOS的Services/registry-frontend 的Tasks页面,点击正在运行的实例,
Marathon Task Configuration节里有 Host 和 Ports,请用这个地址直接访问。 (4.2) push 一个 nginx
docker pull nginx
docker tag nginx registry.marathon.l4lb.thisdcos.directory:5000/nginx
docker push registry.marathon.l4lb.thisdcos.directory:5000/nginx 方法二:不安全的 Docker Registry(警告:仅测试使用)
~~~~~~~~
!!!我测试无法启动docker,后来采用修改daemon.json的方法:
ssh -t master "echo '{\"insecure-registries\": [\"registry.marathon.l4lb.thisdcos.directory:5000/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version"
ssh -t agent1 "echo '{\"insecure-registries\": [\"registry.marathon.l4lb.thisdcos.directory:5000/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version"
ssh -t agent2 "echo '{\"insecure-registries\": [\"registry.marathon.l4lb.thisdcos.directory:5000/\"]}' > /etc/docker/daemon.json; systemctl restart docker; docker version"
~~~~~~~~
不配置TLS证书,修改 docker 服务来忽略安全设置。
在所有的节点执行下面命令(请复制$后面及所有行):
$ sudo tee /etc/systemd/system/docker.service.d/override.conf <<-'EOF'
[Service]
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
ExecStart=
ExecStart=/usr/bin/docker daemon -H fd:// $OPTIONS \
$DOCKER_STORAGE_OPTIONS \
$DOCKER_NETWORK_OPTIONS \
$BLOCK_REGISTRY \
$INSECURE_REGISTRY \
--storage-driver=overlay \
--insecure-registry registry.marathon.l4lb.thisdcos.directory:5000
EOF systemctl daemon-reload
systemctl restart docker 3.5.2 安装私有的 Docker Registry
假设已经有一个私有的 Docker Registry,地址是 some.docker.host.com
创建 docker.tar.gz,此文件就是 docker 登录后的本机生成的记录登录信息的文件,打成了包。步骤如下:
首先登录需要访问的私有 Registry:
docker login some.docker.host.com
~~~~~~~~
注意:如果是非https的地址,需要在加入如下到 /etc/docker/daemon.json
{
"insecure-registries" : ["myregistrydomain.com:5000"]
} 还可以创建一个自签名证书:
https://docs.docker.com/registry/insecure/#docker-still-complains-about-the-certificate-when-using-authentication mkdir -p certs
openssl req \
-newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key \
-x509 -days 365 -out certs/domain.crt
注意输入正确的domain
然后运行registry
docker run -d \
--restart=always \
--name registry \
-v `pwd`/certs:/certs \
-e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
-p 443:443 \
registry:2
最后,可能需要参考前面3.4节,添加信任到 marathon-lb。
~~~~~~~~ 然后打包
cd ~
tar -czf docker.tar.gz .docker
最后,复制到全部的节点的 /etc/ 下,比如:
scp docker.tar.gz master:/etc/
scp docker.tar.gz agent1:/etc/
scp docker.tar.gz agent2:/etc/ 之后就可以在服务定义的 json 中指定这个文件位置了,如:
"{
"id": "/some/name/or/id",
"cpus": 1,
"mem": 1024,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "some.docker.host.com/namespace/repo"
}
},
"fetch": [
{
"uri": "file:///etc/docker.tar.gz"
}
]
} 当然也可以指定一个http的地址,只要能下载到docker.tar.gz即可。 3.6 其他技巧
关闭并禁用一个 agent
sudo systemctl kill -s SIGUSR1 dcos-mesos-slave && sudo systemctl stop dcos-mesos-slave
sudo systemctl kill -s SIGUSR1 dcos-mesos-slave-public && sudo systemctl stop dcos-mesos-slave-public 3.7 升级 dcos
升级前应查阅版本发布文档,避免出错。
升级指 1.X -> 1.Y 的过程;修补是指 1.X.A -> 1.X.B;升级会重启服务;修补不会影响服务运行,但是方式是一样的。
在 bootstrap 节点生成升级文件:
dcos_generate_config.sh --generate-node-upgrade-script <installed_cluster_version>
企业版
dcos_generate_config.ee.sh --generate-node-upgrade-script <installed_cluster_version>
然后到每个节点运行:
curl -O <Node upgrade script URL>
bash dcos_node_upgrade.sh
echo $?
返回0,表示完成升级。
注意:在升级或者修补 Master 节点前,手动删除 /opt/mesosphere/lib/libltdl.so.7 可避免冲突失败。 4. 卸载 dcos
注:官方未提供卸载说明。
在所有master和agent节点执行下面命令:
/opt/mesosphere/bin/pkgpanda uninstall
rm -rf /opt/mesosphere /opt/dcos-prereqs.installed /var/lib/{mesos,dcos,zookeeper,mesosphere} /var/log/mesos /etc/mesosphere /etc/profile.d/dcos.sh /etc/systemd/journald.conf.d/dcos.conf
rm -rf /etc/systemd/system/{dcos-*,dcos.*} /etc/systemd/system/multi-user.target.wants/{dcos-*,dcos.*}
ps -ef|egrep 'mesos|dcos'|grep -v grep|awk '{print $2}'|xargs kill -9
systemctl daemon-reload
rm -rf /tmp/dcos
还需要手动改回dns解析文件,否则agent节点不能访问bootstrap,重新下载脚本:
vi /etc/resolv.conf
也可以通过 bootstrap 节点 scp 覆盖过来,如:
scp /etc/resolv.conf master:/etc/resolv.conf
scp /etc/resolv.conf agent1:/etc/resolv.conf
scp /etc/resolv.conf agent2:/etc/resolv.conf 可选重启:reboot
如果出现 Systemd 错误,可以强制重启:reboot -f 在bootstrap节点,停用nginx,转到dcos_generate_config.sh所在目录,然后删除多余文件:
docker rm -f nginx
cd /root
rm -rf dcos-*.tar genconf/{*.json,serve,state}
然后可以重新安装dcos。 5. 问题 5.1 如果安装某些服务(如:marathon-lb)运行失败,在日志中报告错误:
/usr/bin/docker-current: Error response from daemon: shim error: docker-runc not installed on system.
可以在对应的节点里配置 /etc/docker/daemon.json "hosts": ["unix:///var/run/docker.sock","tcp://0.0.0.0:2375"],
"runtimes": {
"docker-runc": {
"path": "/usr/libexec/docker/docker-runc-current"
}
},
"add-runtime": "docker-runc=/usr/libexec/docker/docker-runc-current",
"default-runtime": "docker-runc" 5.2 如果 dns 失败,可以手动更改 /opt/mesosphere/bin/gen_resolvconf.py,强制加入 dns 解析设置
contents += "search some.domain.com\n"
contents += "nameserver 10.10.10.1\n"
contents += "nameserver 10.10.10.2\n"
然后重启服务
systemctl restart dcos-adminrouter
systemctl restart dcos-mesos-dns
DCOS(centos 7.4/7.6)的更多相关文章
-
Linux系统忘记管理员密码(CentOS、RHEL、Ubuntu)
Linux系统忘记管理员密码(CentOS.RHEL.Ubuntu) 系统使用过程中,尤其是生产环境中.万一忘记管理员密码,该怎么办?是不是很绝望? 1.RHEL 7.0 重启主机进入引导界面键入e键 ...
-
使用kvm制作Eucalyptus镜像(CentOS 6.5为例)
1.前言 Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) ...
-
Qt for Linux:环境搭建(CentOS 6.5 32位)——完全从零安装
正文开始前,我们假设,用户可以操作终端 拥有root权限,以下所有操作也均由root完成 可以上网 安装了CentOS 6.5 32位 注:红色部分,每个人可能都不一样 话不多说,列出本章大致流程 1 ...
-
Linux网络那点事(CentOS、Ubuntu、Kali)
跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 在Ubuntu18.04中,传统的配置/etc/network/interfa ...
-
SVN版本管理系统的使用(CentOS+Subversion+Apache+Jsvnadmin+TortoiseSVN)
1.服务器: 192.168.4.221root 用 户操作安装 装 apache# yum install httpd httpd-devel# service httpd start# chkco ...
-
zookeeper三种模式安装详解(centos 7+zookeeper-3.4.9)
zookeeper有单机.伪集群.集群三种部署方式,可根据自己实际情况选择合适的部署方式.下边对这三种部署方式逐一进行讲解. 一 单机模式 1.下载 进入要下载的版本的目录,选择.tar.gz文件下载 ...
-
应用SVN(CentOS中搭建SVN服务器)
简单介绍如何在虚拟机 CentOS 中,搭建 SVN 服务器. 软件版本信息 Vmware 10.0.0 build-1295980 CentOS 7.0-1406-x64 Java 1.7.0_67 ...
-
MySQL5.7的安装(CentOS 7 &; Ubuntu 16.04)
CentOS 通过 yum 安装MySQL5.7 Yum Repository 下载地址:https://dev.mysql.com/downloads/repo/yum/ 选择相应的版本进行下载:R ...
-
部署Django到云服务器(centos+nginx+mysql+uwsgi+python3)【操作篇(1)】
开篇 笛卡尔说:"你不能教会一个人任何东西,你只能帮助他发现他自己内心本来就有的东西!" jacky能教你的,只能是经验和建议,要逆袭还得通过自己对数据的不断领悟,数据领域的技能都 ...
随机推荐
-
使用https的HSTS需要注意的一个问题
HSTS(HTTP Strict Transport Security) 简单来说就是由浏览器进行http向https的重定向.如果不使用HSTS,当用户在浏览器中输入网址时没有加https,浏览器会 ...
-
php使用位与运算符【&;】或【|】实现权限管理
权限值是这样的2^0=1,相应2进数为”0001″(在这里^我表示成”次方”,即:2的0次方,下同)2^1=2,相应2进数为”0010″2^2=4,相应2进数为”0100″2^3=8,相应2进数为”1 ...
-
李洪强iOS开发之拓展篇—UIDynamic(简单介绍)
iOS开发拓展篇—UIDynamic(简单介绍) 一.简单介绍 1.什么是UIDynamic UIDynamic是从iOS 7开始引入的一种新技术,隶属于UIKit框架 可以认为是一种物理引擎,能 ...
-
微信浏览器内置JavaScript 对象:WeixinJSBridge
微信公众平台开发 微信公众平台开发模式 企业微信公众平台 微信浏览器 分享到朋友圈 发送给好友 分享到腾讯微博 作者:方倍工作室 原文: http://www.cnblogs.com/txw1958/ ...
-
接口设计ie常见的问题
问题叙述性说明: 当围绕一个简单的页面布局设计.我发现了一个奇怪的相对布局问题. 同的方式围绕布局接口.它是利用左div浮动.对div设定 margin-left这样达到的效果.实现了chrome浏览 ...
-
javaWeb学习总结(8)- JSP原理
一.什么是JSP? JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术. JSP这门技术的最大的特点在于,写jsp就像在写h ...
-
Spring Boot 系列(九)数据层-集成Spring-data-jpa
实际开发中,不可避免地会对数据进行反复的增删改查操作,然而这部分工作是十分繁琐枯燥的.那么,随即而生的ORM框架就能很好的解决这个问题. 我们常用的ORM框架有:Hibernate.Mybatis.J ...
-
修改centos 7 系统时间
查看当前系统时间 date 修改当前系统时间 date -s "2018-2-22 19:10:30 查看硬件时间 hwclock --show 修改硬件时间 hwclock --set - ...
-
矩阵游戏 HYSBZ - 1059(最大流)
1059: [ZJOI2007]矩阵游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6266 Solved: 3065[Submit][Stat ...
-
exchange 2010 的两个错误
最近公司要搭建邮件服务器 过程中 碰到两个问题,记录下来. 引以为戒 . 1,登陆界面能出来 但是无论输入什么都显示 乱码.问题原因 身份验证有问题. 如图所示: 改成这个,然后 重启 iis 就可 ...