生产安装

安装生产就绪的 DC/OS

本页概括如何安装 DC/OS 用于生产。使用这种方法,您可以打包 DC/OS 分发并手动连接到每个节点,以运行 DC/OS 安装命令。若要与现有系统集成,或者您没有群集的 SSH 访问权限,则推荐使用这种安装方法。

DC/OS 安装进程需要 bootstrap 节点、管理节点、公共代理节点和专用代理节点。可以查看 节点 文档以了解更多信息。

生产安装流程

安装 DC/OS 群集需要以下步骤:

  1. 配置 bootstrap 节点
  2. 在管理节点上安装 DC/OS
  3. 在代理节点上安装 DC/OS

Production Installation Process 图 1. 生产安装流程

此安装方法需要下列设置:

  • bootstrap 节点必须是可从群集节点访问的网络。
  • bootstrap 节点必须从群集节点打开 HTTP(S) 端口。

DC/OS 安装会创建以下文件夹:

文件夹描述
/opt/mesosphere包含 DC/OS 二进制文件、库和群集配置。请勿修改。
/etc/systemd/system/dcos.target.wants包含启动 systemd 组件的 systemd 服务。它们因受 systemd 限制而必须位于 /opt/mesosphere 之外。
/etc/systemd/system/dcos. <units>包含在 /etc/systemd/system/dcos.target.wants 中单元的复制。他们必须在最上面的文件夹,同时也在 dcos.target.wants 里面。
/var/lib/dcos/exhibitor/zookeeper包含 ZooKeeper 数据。
/var/lib/docker包含 Docker 数据。
/var/lib/dcos包含 DC/OS 数据。
/var/lib/mesos包含 Mesos 数据。

警告:不支持更改为 /opt/mesosphere。它们可能导致 DC/OS 中出现不可预测的行为,并防止升级。

前提条件

您的群集必须符合软件和硬件 要求,才能安装 DC/OS。

配置您的群集

  1. 在 bootstrap 节点上创建名为 genconf 的目录,并导航到该目录。

    1. mkdir -p genconf

存储许可证文件 Enterprise

创建 许可证文件(包含您的授权支持联系人发送的电子邮件中提供的许可文本)并另存为 genconf/license.txt

创建 IP 检测脚本

在这一步创建 IP 检测脚本。这一脚本报告群集中每个节点的 IP 地址。DC/OS 群集中的每个节点都有一个唯一的 IP 地址,用于在群集中的节点之间进行通信。每次在节点上启动 DC/OS 时,IP 检测脚本都会将节点的唯一 IPv4 地址打印到 STDOUT。

注意:在节点上安装 DC/OS 后,节点的 IP 地址不能更改。例如,当重新启动节点或更新 DHCP 租约时,IP 地址不应更改。如果节点的 IP 地址发生更改,该节点必须卸载

注意:脚本必须返回与 config.yaml 中指定的相同 IP 地址。例如,如果将 config.yaml 中的专用管理节点 IP 指定为 10.2.30.4,您的脚本在管理节点上运行时应返回相同的值。

  1. 为您的环境创建 IP 检测脚本,并另存为 genconf/ip-detect。此脚本需要 UTF-8 编码并具备有效的 shebang) 行。可以使用以下示例。
  • 使用 AWS 元数据服务器

    此方法使用 AWS 元数据服务获取 IP 地址:

    1. #!/bin/sh
    2. # Example ip-detect script using an external authority
    3. # Uses the AWS Metadata Service to get the node's internal
    4. # ipv4 address
    5. curl -fsSL http://169.254.169.254/latest/meta-data/local-ipv4
    • 使用 GCE 元数据服务器

  1. 此方法使用 GCE 元数据服务器获取 IP 地址:
  2. ```
  3. #!/bin/sh
  4. # Example ip-detect script using an external authority
  5. # Uses the GCE metadata server to get the node's internal
  6. # ipv4 address
  7. curl -fsSl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/network-interfaces/0/ip
  8. ```
  9. - #### 使用现有接口的 IP 地址
  10. 此方法发现节点特定接口的 IP 地址。
  11. 如果有带有不同内部 IP 地址的多代硬件,可以在主机之间更改接口名称。IP 检测脚本必须考虑接口名称更改。如果将多个 IP 地址连接到同一个接口,或建立复杂的 Linux 网络等,则也会混淆示例脚本。
  12. ```
  13. #!/usr/bin/env bash
  14. set -o nounset -o errexit
  15. export PATH=/usr/sbin:/usr/bin:$PATH
  16. 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)
  17. ```
  18. - #### 使用 Mesos 管理节点的网络路由
  19. 此方法使用 Mesos 管理节点的路由查找源 IP 地址,然后与该节点通信。
  20. 在本示例中,我们假设 Mesos 管理节点具有 IP 地址 `172.28.128.3`。可以在此脚本使用任何语言。Shebang 行必须指向所用语言的相应环境,且输出必须是正确的 IP 地址。
  21. Enterprise
  22. ```
  23. #!/usr/bin/env bash
  24. set -o nounset -o errexit
  25. MASTER_IP=172.28.128.3
  26. echo $(/usr/sbin/ip route show to match 172.28.128.3 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | tail -1)
  27. ```
  28. Open Source
  29. ```
  30. #!/usr/bin/env bash
  31. set -o nounset -o errexit -o pipefail
  32. export PATH=/sbin:/usr/sbin:/bin:/usr/bin:$PATH
  33. MASTER_IP=$(dig +short master.mesos || true)
  34. MASTER_IP=${MASTER_IP:-172.28.128.3}
  35. INTERFACE_IP=$(ip r g ${MASTER_IP} | \
  36. awk -v master_ip=${MASTER_IP} '
  37. BEGIN { ec = 1 }
  38. {
  39. if($1 == master_ip) {
  40. print $7
  41. ec = 0
  42. } else if($1 == "local") {
  43. print $6
  44. ec = 0
  45. }
  46. if (ec == 0) exit;
  47. }
  48. END { exit ec }
  49. ')
  50. echo $INTERFACE_IP
  51. ```

创建故障域检测脚本 Enterprise

DC/OS 群集默认启用 故障域意识,所以必须更改 config.yaml 才能使用此功能。但必须包含名为 fault-domain-detect 故障域检测脚本到您的 ./genconf 目录。要选择禁用故障域感知,请将 config.yaml 文件中的 fault_domain_enabled 参数设置为 false

  1. 创建名为 fault-domain-detect 的故障域检测脚本,在每个节点上运行,以检测节点的故障域。安装过程中此脚本的输出被传递到 Mesos。

    脚本输出的推荐格式为:

    1. {
    2. "fault_domain": {
    3. "region": {
    4. "name": "<region-name>"
    5. },
    6. "zone": {
    7. "name": "<zone-name>"
    8. }
    9. }
    10. }

    我们提供 AWS 和 Azure 节点的故障域检测脚本。对于具有 aws 节点和 azure 节点的群集,可将两者组合为一个脚本。可以使用这些模型为本地群集创建故障域检测脚本。

    重要信息:如果在环境中使用代理,此脚本将不起作用。如果使用代理,则必须进行修改。

  1. 添加新创建的 fault-domain-detect 脚本到 bootstrap 节点的 /genconf 目录。

创建配置文件

在这一步,可以创建针对您的环境自定义的 YAML 配置文件。DC/OS 在安装期间使用此配置文件生成群集安装文件。

设置超级用户密码 Enterprise

在以下说明中,我们假定您正在使用 ZooKeeper 进行共享存储。

  1. 在 bootstrap 节点运行此命令,创建用于超级用户身份认证的散列密码,其中 <superuser_password> 是超级用户密码。

  2. 保存散列密码密钥,用于config.yaml 文件中的 superuser_password_hash 参数 。

    1. sudo bash dcos_generate_config.ee.sh --hash-password <superuser_password>

    以下是散列密码输出的示例。

    1. Extracting an image from this script and loading it into a docker daemon, can take a few minutes.
    2. dcos-genconf.9eda4ae45de5488c0c-c40556fa73a00235f1.tar
    3. Running mesosphere/dcos-genconf docker with BUILD_DIR set to /home/centos/genconf
    4. 00:42:10 dcos_installer.action_lib.prettyprint:: ====> HASHING PASSWORD TO SHA512
    5. 00:42:11 root:: Hashed password for 'password' key:
    6. $6$rounds=656000$v55tdnlMGNoSEgYH$1JAznj58MR.Bft2wd05KviSUUfZe45nsYsjlEl84w34pp48A9U2GoKzlycm3g6MBmg4cQW9k7iY4tpZdkWy9t1

创建配置

创建配置文件并另存为 genconf/config.yaml。可以使用此模板开始创建。

Enterprise 指定三个Mesos 管理节点、静态管理节点发现列表、Exhibitor 的内部存储后端、一个自定义代理、指定的安全模式,以及云专用的 DNS 解析器。Enterprise

该开源模板指定三个 Mesos 管理节点、三个用于 Exhibitor 存储的 ZooKeeper 实例、静态管理节点发现列表、Exhibitor 的内部存储后端、一个自定义代理,以及云专用的 DNS 解析器。Open Source

如果服务器在您的 /etc/resolv.conf 中安装时带有域名,请添加 dns_search 参数。有关参数描述和配置示例,请参阅 文档

注意:如果 AWS DNS IP 在您的国家/地区不可用,可以使用本地 DNS 服务器替换 AWS DNS IP 服务器 8.8.8.88.8.4.4

注意:- 如果您指定 master_discovery: static,则还必须创建脚本,以将内部 IP 映射到 bootstrap 节点上的公共 IP(例如,genconf/ip-detect-public)。然后,此脚本在 ip_detect_public_filename: "relative-path-from-dcos-generate-config.sh" 中引用。

注意:在 AWS 或任何其他无法控制节点的 IP 地址的环境中,都需要设置 master_discovery 才能使用 master_http_load_balancer,并且需要设置负载均衡器。

Enterprise 模板 Enterprise

  1. bootstrap_url: http://<bootstrap_ip>:80
  2. cluster_name: <cluster-name>
  3. superuser_username:
  4. superuser_password_hash:
  5. #customer_key in yaml file has been replaced by genconf/license.txt in DC/OS 1.12
  6. #customer_key: <customer-key>
  7. exhibitor_storage_backend: static
  8. master_discovery: static
  9. ip_detect_public_filename: <relative-path-to-ip-script>
  10. master_list:
  11. - <master-private-ip-1>
  12. - <master-private-ip-2>
  13. - <master-private-ip-3>
  14. resolvers:
  15. - 169.254.169.253
  16. # Choose your security mode: permissive or strict
  17. security: <security-mode>
  18. superuser_password_hash: <hashed-password> # Generated above
  19. superuser_username: <username> # This can be whatever you like
  20. # A custom proxy is optional. For details, see the configuration documentation.
  21. use_proxy: 'true'
  22. http_proxy: http://<user>:<pass>@<proxy_host>:<http_proxy_port>
  23. https_proxy: https://<user>:<pass>@<proxy_host>:<https_proxy_port>
  24. no_proxy:
  25. - 'foo.bar.com'
  26. - '.baz.com'
  27. # Fault domain entry required for DC/OS Enterprise 1.12+
  28. fault_domain_enabled: false
  29. #If IPv6 is disabled in your kernel, you must disable it in the config.yaml
  30. enable_ipv6: 'false'

开源模板 Open Source

  1. bootstrap_url: http://<bootstrap_ip>:80
  2. cluster_name: <cluster-name>
  3. exhibitor_storage_backend: static
  4. master_discovery: static
  5. ip_detect_public_filename: <relative-path-to-ip-script>
  6. master_list:
  7. - <master-private-ip-1>
  8. - <master-private-ip-2>
  9. - <master-private-ip-3>
  10. resolvers:
  11. - 169.254.169.253
  12. use_proxy: 'true'
  13. http_proxy: http://<user>:<pass>@<proxy_host>:<http_proxy_port>
  14. https_proxy: https://<user>:<pass>@<proxy_host>:<https_proxy_port>
  15. no_proxy:
  16. - 'foo.bar.com'
  17. - '.baz.com'

安装 DC/OS

在这一步,您将在 bootstrap 节点上创建一个自定义 DC/OS 构建文件,然后在群集上安装 DC/OS。使用这种方法,您可以

  1. 自行打包 DC/OS 分发版本
  2. 手动连接到每个服务器
  3. 运行命令

注意:由于覆盖网络存在群集配置问题,建议在升级或配置新群集时,在 config.yaml 中将 enable_ipv6 设置为 false。如果已升级到 DC/OS 1.12.x 而没有配置 enable_ipv6,或者 config.yaml 文件设置为 true,请不要添加新节点。

您可以在我们最新重要的 产品咨询 中找到更多信息和更详细的补救流程。Enterprise

重要信息:必须让以下项目生效才能安装 DC/OS:所有 DC/OS 节点上的 ip-detect scriptDNSNTP 均已同步时间。参见故障排除,了解更多信息。

注意:如果出现问题并且您想重新运行设置,请使用群集卸载说明。

前提条件

  • 经过优化,可在节点上手动分发 DC/OS 的 genconf/config.yaml 文件。
  • 包含 DC/OS Enterprise 许可证的 genconf/license.txt 文件。Enterprise
  • genconf/ip-detect 脚本。

dcos_generate_config file 一词指的是 dcos_generate_config.ee.sh 文件或 dcos_generate_config.sh 文件,具体取决于您使用的是企业版还是开源版本的 DC/OS。

  • 下载 dcos_generate_config 文件 并将其保存到 bootstrap 节点。此文件用于创建自定义的 DC/OS 构建文件。Open Source

    1. curl -O https://downloads.dcos.io/dcos/stable/dcos_generate_config.sh
  1. 在 bootstrap 节点运行 DC/OS 安装工具 shell 脚本,生成自定义 DC/OS 构建文件。安装脚本提取 Docker 容器,该容器使用通用 DC/OS 安装工具文件为群集创建自定义 DC/OS 构建文件。构建文件会输出到 ./genconf/serve/

    可以通过以下方式查看所有自动命令行安装工具选项:

    • dcos_generate_config.ee.sh --help 标记 Enterprise 或
    • dcos_generate_config.sh --help 标记。Open Source

    企业脚本 Enterprise

    1. sudo bash dcos_generate_config.ee.sh

    此时,目录结构应类似于:

    1. ├── dcos-genconf.c9722490f11019b692-cb6b6ea66f696912b0.tar
    2. ├── dcos_generate_config.ee.sh
    3. ├── genconf
    4. ├── config.yaml
    5. ├── ip-detect
    6. ├── license.txt

    开源脚本 Open Source

    1. sudo bash dcos_generate_config.sh

    此时,目录结构应类似于:

    1. ├── dcos-genconf.<HASH>.tar
    2. ├── dcos_generate_config.sh
    3. ├── genconf
    4. ├── config.yaml
    5. ├── ip-detect

    要使安装脚本生效,必须首先创建 genconf/config.yamlgenconf/ip-detect

  2. 在主目录中运行以下命令,以通过 NGINX Docker 容器托管 DC/OS 安装包。对于 <your-port>, 指示在 bootstrap_url 中使用的端口值。

    1. sudo docker run -d -p <your-port>:80 -v $PWD/genconf/serve:/usr/share/nginx/html:ro nginx
  3. 在使用自定义生成文件安装 DC/OS 之后,继续在每个主节点上运行以下命令:

    • SSH 连接到管理节点。

      1. ssh <master-ip>
    • 创建并导航至新目录。

      1. mkdir /tmp/dcos && cd /tmp/dcos
    • 在 NGINX Docker 容器中下载 DC/OS 安装工具,其中 <bootstrap-ip><your_port>bootstrap_url 中已定义。

      1. curl -O http://<bootstrap-ip>:<your_port>/dcos_install.sh
    • 运行以下命令,在管理节点上安装 DC/OS。

      1. sudo bash dcos_install.sh master
  1. **注意:**直到所有管理节点都设置完毕,DC/OS 可能会发出多个错误消息,尽管这对群集 DC/OS 没有实际损害。
  1. 在每个代理节点上运行以下命令,使用自定义构建文件安装 DC / OS:

    • SSH 连接到代理节点。

      1. ssh <agent-ip>
    • 创建并导航至新目录。

      1. mkdir /tmp/dcos && cd /tmp/dcos
    • 在 NGINX Docker 容器中下载 DC/OS 安装工具,其中 <bootstrap-ip><your_port>bootstrap_url 中定义。

      1. curl -O http://<bootstrap-ip>:<your_port>/dcos_install.sh
    • 运行此命令,在代理节点上安装 DC/OS。您必须将代理节点指定为 公共代理节点专用代理节点

      • 专用代理节点:

        1. sudo bash dcos_install.sh slave
      • 公共代理节点:

        1. sudo bash dcos_install.sh slave_public
  1. **注意:** 如果遇到错误(例如在 journald 中的 `Time is marked as bad``adjtimex` `Time not in sync`),请验证是否在所有节点都启用了网络时间协议 (NTP)。如需更多信息,请参阅 [系统要求]($dd18723b2c37970b.md#port-and-protocol) 文档。
  1. 监视 Exhibitor 并等待其在 http://<master-ip>:8181/exhibitor/v1/ui/index.html 汇合。

    注意:此过程可能大约 10 分钟。在此期间,您将看到管理节点在 Exhibitor 控制台上可见并上线,并且最后会显示一个绿灯图标。

    Exhibitor for ZooKeeper

    图 2. Exhibitor for ZooKeeper

    当状态图标为绿色时,可以访问 DC/OS Web 界面。

  2. 在以下链接启动 DC/OS Web 界面:http://<master-node-public-ip>/。如果无法启动,请查看 故障排除 文档。

    注意:单击登录到 DC/OS 后,浏览器可能会显示您的连接不安全的警告。这是因为 DC/OS 使用自签名证书。可以忽略该错误,然后单击以继续。

  3. 输入您的管理员用户名和密码。

    Login screen

    图 3. 登录对话

成功了!现在将显示 UI 仪表板。

UI dashboard

图 4. DC/OS UI 仪表板

注意:您也可以使用 Universal 安装工具在 AWS、Azure 或 GCP 上部署 DC/OS 用于生产。

后续步骤:Enterprise 和开源用户

下列链接提供了后续步骤的信息: