打补丁

了解群集补丁

DC/OS 补丁描述了一组更改和支持数据,用于更新、修复或改进 DC/OS 的特性/功能。包含次要变更的单点发布也称为补丁。

补丁流程包括以下内容:

  • 说明修复问题、已知问题/限制,明显变更和安全增强
  • 不会影响工作负载,这是在不停机的情况下修补实时群集的重要部分
  • 帮助用户了解影响 DC/OS 功能的次要变更

注意:这些说明仅适用于对群集配置或维护版本号的更改。示例:DC/OS 1.11.1 -> 1.11.2

  • 要更新到较新的主要或次要版本(例如 1.10 到 1.11),请参阅 升级 的说明。

如果在支持的操作系统上执行修补且所有前提条件均满足,则修补 应该 维持在群集上运行任务的状态。

重要指南

  • 在修补 DC/OS 之前,请先查看 版本注释

  • 由于覆盖网络存在群集配置问题,建议在修补或配置新群集时,在 config.yaml 中将 enable_ipv6 设为“false”。如果已修补到 DC/OS 1.11.x 而没有配置 enable_ipv6,或者 config.yaml 文件设置为 true,则在 DC/OS 1.11.3 发布之前不要添加新节点。您可以在我们最新的重要 产品咨询 中找到更多信息和更稳固的补救程序

  • config.yaml 文件中有几个必须在修补前宣布的新选项。即使您之前通过 config.yaml 文件成功安装了 DC/OS,该文件需要新增功能才能与 DC/OS 1.11 一起运行。检查 fault_domain_enabledenable_ipv6 是否在 config.yaml 文件中添加。您可以在 此处 查看示例文件。

  • 如果 IPv6 在内核中被禁用,则 IPv6 必须在 config.yaml 文件中禁用才能确保修补成功。

  • DC/OS Enterprise 现在执行许可证密钥。许可证密钥必须驻留在 genconf/license.txt 文件中,否则修补将失败。Enterprise

  • 如果没有修补全部管理节点,DC/OS GUI 和其他更高级别的系统 API 可能不一致或不可用。例如,修补后的 DC/OS Marathon 首要实例无法连接到首要的 Mesos 管理节点上,直到该节点也得到修补为止。出现这种情况时:

  • DC/OS GUI 不能提供准确的服务列表。

  • 对于多管理节点配置,在一个管理节点完成修补后,您可以从端口 8181 上的 Exhibitor UI 监控其余管理节点的健康状况。

  • 升级后的 DC/OS Marathon 首要实例无法连接至不安全(未打补丁的)首要 Mesos 管理节点。在所有管理节点得到补丁之前,DC/OS UI 都不可信任。有多个 Marathon 调度器实例和多个 Mesos 管理节点,每个均已修补,Marathon 首要实例可能不是 Mesos 首要实例。

  • Mesos UI 中的任务历史记录不会持续到修补。

  • DC/OS Enterprise 可在 此处下载。Enterprise

支持的修补路径矩阵

以下矩阵表列出了 DC/OS 1.11 的修补路径。

1.11 的 DC/OS 次要版本

显示图标服务
支持
不支持
修补
修补至
1.11.11.11.21.11.31.11.41.11.51.11.61.11.7
1.11.0
1.11.1
1.11.2
1.11.3
1.11.4
1.11.5
1.11.6

修改 DC/OS 配置

不能 在修补到新版本的同时更改群集配置。必须通过对已安装版本的更新进行群集配置更改。例如,您无法同时将群集从 1.10.x 修补到 1.10.y 并添加更多公共代理节点。您可以更新为 1.10.x,然后修补为 1.10.y,或者可以修补到 1.10.y,再在修补后更新 1.10.y,从而添加更多公共代理。

要修改 DC/OS 配置,您必须使用已修改的 config.yaml 来运行安装工具,并使用新的安装文件更新您的群集。更改 DC/OS 配置与修补主机的风险相同。配置错误可能会使主机或整个群集崩溃。

只能修改 DC/OS 配置参数的子集。在 DC/OS 之上运行的任何软件上的不良效应不在本文档的范围之内。请联系 Mesosphere 服务支持获取更多信息。

以下是可以修改的参数的列表:

安全模式 (security) 可以更改,但有特别的注意事项。

  • 只能更新到更严格的安全模式。不支持安全降级。例如,如果群集处于 permissive 模式,而您希望降级至 disabled 模式,则必须重新安装群集并终止所有运行的工作负载。
  • 每次更新时,只能将安全性提高一个级别。例如,您无法直接从 disabled 升级到 strict 模式。要从 disabled 提高到 strict 模式,您必须首先更新到 permissive 模式,然后从 permissive 更新到 strict 模式。

有关不同安全模式的更多信息,请参阅安全 模式

说明

必须执行这些步骤才能进行版本补丁和群集配置更改。

前提条件

  • Mesos、Mesos 框架、Marathon、Docker 和群集中的所有运行任务应稳定且处于已知的健康状态。
  • 出于 Mesos 兼容性原因,我们建议将任何运行 Marathon-on-Marathon 实例修补至 Marathon 版本1.3.5,然后进行此 DC/OS 修补。
  • 您必须有权访问与之前 DC/OS 版本一起使用的配置文件的副本:config.yamlip-detect
  • 您必须使用 systemd 218 或更新版本才能维持任务状态。
  • 所有主机(管理和代理)必须能够与所有端口上的所有其他主机通信(对于 TCP 和 UDP)。
  • 在 CentOS 或 RedHat 中,使用此命令安装 IP 集(在某些 IP 检测脚本中使用):sudo yum install -y ipset
  • 您必须熟悉使用 systemctljournalctl 命令行工具,以查看和监控服务状态。故障排除说明可在本 文档 结尾部分找到。
  • 您必须熟悉 DC/OS 安装指南
  • 修补之前要对 ZooKeeper 进行实时捕捉。Marathon 支持回滚,但不支持降级。
  • 修补之前 对 IAM 数据库进行实时捕捉
  • 确保在开始修补之前, Marathon 事件订阅者已被禁用。完成修补后,保持其禁用状态,因为此功能现已被弃用。

    注意: Marathon 事件订阅者默认为禁用。检查是否已将 --event_subscriber "http_callback" 行添加到管理节点上的 sudo vi /opt/mesosphere/bin/marathon.sh。如果是,就需要移除该行,以禁用事件订阅者。

  • 确认在开始修补前,所有 Marathon 应用程序限制都有效。使用 此脚本 检查限制是否有效。

  • 备份您的群集
  • 可选 您可以将自定义 节点和群集运行状况检查 添加到 config.yaml

bootstrap 节点

选择您所需的安全模式,然后按照适用的补丁说明进行。

修补 DC/OS 1.11 而不更改安全模式

改程序将 DC/OS 1.10 群集修补到 DC/OS 1.11 而不更改群集的 安全模式

  1. 将现有 config.yamlip-detect 文件复制到 bootstrap 节点上的空 genconf 文件夹。文件夹与安装工具应当在同一个目录。

  2. 将旧的 config.yaml 合并为新的 config.yaml 格式。大多数情况下,区别会很小。

    注意:在修补期间,您无法更改 exhibitor_zk_backend 配置。config.yaml 的语法可能与早期版本不同。有关当前 config.yaml 语法和参数的详细说明,请参阅 文档

  3. 更新 config.yaml 的格式后,比较旧的 config.yaml 和新的 config.yaml。验证路径或配置没有差异。修补时更改这些会导致灾难性群集故障。

  4. 根据需要修改 ip-detect 文件。

  5. 构建安装工具包。

  6. 下载 dcos_generate_config.ee.sh 文件。

  7. 生成安装文件。用目前在群集上运行的您想打补丁的 DC/OS 版本在以下命令中替换 <installed_cluster_version>, 例如 1.8.8

    1. dcos_generate_config.ee.sh --generate-node-upgrade-script <installed_cluster_version>
  8. 上一步骤的命令将在其输出的最后一行产生 URL,前缀为 Node patch script URL:。记下此 URL 以供后续使用。它在本文档中被称为“节点补丁脚本 URL”。

  9. 运行 nginx 容器以为安装文件提供服务。

  10. 转到 DC/OS 管理节点 程序 完成安装。

在宽容模式下的修补 DC/OS 1.11

此步骤在 宽容安全模式 下修补到 DC/OS 1.11。

前提条件:

  • 您的群集必须 修补到 DC/OS 1.11 并在 禁用安全模式 下运行,然后才能修补到宽容模式。如果您的群集在补丁到 DC/OS 1.10 之前处于宽容模式,则可以跳过该程序。

重要信息:对于从禁用模式修补到宽容安全模式,您已配置的任何自定义节点或群集运行状况检查都会失败。将来的版本允许您绕过运行状况检查。

要将群集从禁用的安全性更新为宽容的安全性,请完成以下步骤:

  1. config.yaml 中以 security: permissive 替换 security: disabled。不要对 config.yaml 中的路径或配置进行任何其他更改。

  2. 根据需要修改 ip-detect 文件。

  3. 构建安装工具包。

  4. 下载 dcos_generate_config.ee.sh 文件。

  5. 生成安装文件。用目前在群集上运行的您想打补丁的 DC/OS 版本在以下命令中替换 <installed_cluster_version>, 例如 1.8.8

    1. dcos_generate_config.ee.sh --generate-node-upgrade-script <installed_cluster_version>
  6. 上一步骤的命令将在其输出的最后一行产生 URL,前缀为 Node patch script URL:。记下此 URL 以供后续使用。它在本文档中被称为“节点补丁脚本 URL”。

  7. 运行 nginx 容器以服务安装文件。

  8. 转到 DC/OS 管理节点 程序 以完成安装。

在严格模式下修补 DC/OS 1.11

该程序的在安全性严格 模式 下修补到 DC/OS 1.11。

如果正在更新运行的 DC/OS 群集在 security: strict 模式下运行,则请注意,在迁移到严格模式后,安全漏洞可能会持续存在。当转到严格模式时,您的服务现在需要身份认证和授权,以便在 Mesos 注册或访问其 HTTP API。在升级到严格模式之前,应在宽容模式下测试这些配置,以便在升级期间维护调度程序和脚本正常运行时间。

前提条件:

  • 群集必须 修补到 DC/OS 1.11 并在 宽容安全模式 下运行,然后才能更新到严格模式。如果群集在修补到 DC/OS 1.11 之前以严格模式运行,则可以跳过该程序。
  • 如果您在运行 Pod 或者已在自定义配置中启用 Mesos “HTTP 命令执行器” 功能,则必须在修补到严格模式之前,以 DC/OS 1.11 宽容安全模式重启这些任务。否则,在修补管理节点时,这些任务将会被重新启动。

要将群集从宽容的安全性更新为严格的安全性,请完成以下步骤:

  1. config.yaml 中以 security: strict 替换 security: permissive。不要对 config.yaml 中的路径或配置进行任何其他更改。

  2. 根据需要修改 ip-detect 文件。

  3. 构建安装工具包。

  4. 下载 dcos_generate_config.ee.sh 文件。

  5. 生成安装文件。用在群集上运行的目前您想打补丁的 DC/OS 版本在以下命令中替换 <installed_cluster_version>, 例如 1.8.8

    1. dcos_generate_config.ee.sh --generate-node-upgrade-script <installed_cluster_version>
  6. 上一步骤的命令将在其输出的最后一行产生 URL,前缀为 Node patch script URL:。记下此 URL 以供后续使用。它在本文档中被称为“节点补丁脚本 URL”。

  7. 运行 nginx 容器以服务安装文件。

  8. 转到 DC/OS 管理节点 程序 以完成安装。

DC/OS 管理节点

采用以下程序,继续以任何顺序修补每个管理节点,每次修补一个。完成每次修补后,监控 Mesos 管理节点度量标准,确保节点已重新加入群集并完成了协调。

  1. 下载并运行节点补丁脚本:

    1. curl -O <Node patch script URL>
    2. sudo bash dcos_node_upgrade.sh
  2. 验证补丁脚本是否成功并以状态代码 0 退出:

    1. echo $?
    2. 0
  3. 验证补丁:

    1. 监视 Exhibitor 并等待其在 http://<master-ip>:8181/exhibitor/v1/ui/index.html 汇合。确认管理节点已成功重新加入 ZooKeeper quorum(状态指示灯将变为绿色)。

      注意: 如果要从宽容模式修补到严格模式,此 URL 将是 https://...

    2. 等到 dcos-mesos-master 单元启动并运行。

    3. 验证 curl http://<dcos_master_private_ip>:5050/metrics/snapshot 有值为 1registrar/log/recovered

      如果要从宽容模式修补到严格模式,此 URL 将是 curl https://...,并且需要有 JWT 才能访问。Enterprise

    4. 验证 /opt/mesosphere/bin/mesos-master --version 表示修补后的管理节点正在运行 发行说明 中指定的 Mesos 版本,例如 1.5.1

  4. 验证副本不足范围的数量是否随着 IAM 数据库被复制到新管理节点而已经降至零。这可以通过运行以下命令并确认右侧的最后一列是否只显示零来完成。

    1. sudo /opt/mesosphere/bin/cockroach node status --ranges --certs-dir=/run/dcos/pki/cockroach --host=$(/opt/mesosphere/bin/detect_ip)
    2. +----+---------------------+--------+---------------------+---------------------+------------------+-----------------------+--------+--------------------+------------------------+
    3. | id | address | build | updated_at | started_at | replicas_leaders | replicas_leaseholders | ranges | ranges_unavailable | ranges_underreplicated |
    4. +----+---------------------+--------+---------------------+---------------------+------------------+-----------------------+--------+--------------------+------------------------+
    5. | 1 | 172.31.7.32:26257 | v1.1.4 | 2018-03-08 13:56:10 | 2018-02-28 20:11:00 | 195 | 194 | 195 | 0 | 0 |
    6. | 2 | 172.31.10.48:26257 | v1.1.4 | 2018-03-08 13:56:05 | 2018-03-05 13:33:45 | 200 | 199 | 200 | 0 | 0 |
    7. | 3 | 172.31.23.132:26257 | v1.1.4 | 2018-03-08 13:56:01 | 2018-02-28 20:18:41 | 187 | 187 | 187 | 0 | 0 |
    8. +----+---------------------+--------+---------------------+---------------------+------------------+-----------------------+--------+--------------------+------------------------+

如果 ranges_underreplicated 列列出了任何非零值,则等待一分钟,然后重新运行此命令。一旦所有数据被安全地复制,数值将聚合为零。

  1. 转到 DC/OS 代理节点 程序以完成安装.

DC/OS 代理

修补代理节点时,在代理节点和任务到期之前,代理节点响应来自 Mesos 管理节点的运行状况检查 ping 的时间超过五分钟才是超时。 在所有 DC/OS 代理节点上:

  1. 导航至 /opt/mesosphere/lib 目录并删除此库文件。删除此文件可防止发生冲突。

    1. libltdl.so.7
  2. 下载并运行节点补丁脚本:

    1. curl -O <Node patch script URL>
    2. sudo bash dcos_node_upgrade.sh
  3. 验证补丁脚本是否成功并以状态代码 0 退出:

    1. echo $?
    2. 0
  4. 验证补丁:

  • 验证每个管理节点的 curl http://<dcos_agent_private_ip>:5051/metrics/snapshot 有值为 1slave/registered
  • 监控 Mesos UI 以验证修补的节点是否重新加入 DC/OS 群集以及任务是否已协调 (http://<master-ip>/mesos)。如果正从宽容模式补丁到严格模式,URL将是 https://<master-ip>/mesos

故障排除建议

以下命令应提供对修补问题的深度信息:

在所有群集节点上

  1. sudo journalctl -u dcos-download
  2. sudo journalctl -u dcos-spartan
  3. sudo systemctl | grep dcos

如果您的修补因为 自定义节点或群集检查 而失败,运行以下命令可了解更多详细信息:

  1. dcos-diagnostics check node-poststart
  2. dcos-diagnostics check cluster

在 DC/OS 管理节点上

  1. sudo journalctl -u dcos-exhibitor
  2. less /opt/mesosphere/active/exhibitor/usr/zookeeper/zookeeper.out
  3. sudo journalctl -u dcos-mesos-dns
  4. sudo journalctl -u dcos-mesos-master

在 DC/OS 代理节点上

  1. sudo journalctl -u dcos-mesos-slave

注意

  • DC/OS 1.11 Universe 中可用的软件包比旧版本 Universe 中的要新。服务在安装 DC/OS 时不会自动修补,因为并非所有 DC/OS 服务都具有保持现有状态的修补路径。