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