打补丁

了解群集补丁

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

补丁流程包括以下内容:

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

注意:这些说明仅适用于对群集配置或维护版本号的更改。例如,从 DC/OS 1.12.1 到 1.12.2。

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

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

重要指南

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

  • 由于覆盖网络存在群集配置问题,建议在修补或配置新群集时,在 config.yaml 中将 enable_ipv6 设为“false”。您可以在我们最新的重要 产品咨询 中找到更多信息和更稳固的补救程序 。

  • 如果 IPv6 在内核中被禁用,则必须在 config.yaml 文件中禁用 IPv6。

  • DC/OS 企业版许可证密钥必须驻留在 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

支持的补丁路径

  • 从任何当前版本到下一版本。例如,支持 1.12.0 到 1.12.1 的补丁。
  • 从任何当前版本到同一版本。例如,支持 1.12.0 到 1.12.0 的补丁。这对于进行配置更改非常有用。

修改 DC/OS 配置

将补丁版本应用于当前安装的软件版本时,对群集配置所做的更改就会存在限制。例如,如果要修补一个版本,则无法更改群集的安全模式。

要修改您的 DC/OS 配置,必须首先在 config.yaml 文件作出配置更改。然后,您可以使用修改后的 config.yaml 文件运行安装程序,以更新群集,从而能够使用新配置。更改 DC/OS 配置与修补主机的风险相同。配置错误可能会使主机或整个群集崩溃。

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

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

安全模式(security)可以更改,但只能更改为更严格的安全模式。不支持安全降级。例如,如果群集处于 strict 模式,而您希望降级至 permissive 模式,则必须重新安装群集并终止所有运行的工作负载。

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

说明

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

先决条件

  • Mesos、Mesos 框架、Marathon、Docker 和群集中的所有运行任务应稳定且处于已知的运行良好状态。
  • 出于 Mesos 兼容性原因,我们建议将任何运行 Marathon-on-Marathon 实例修补至 Marathon 版本1.3.5,然后进行此 DC/OS 修补。
  • 您必须有权访问与之前 DC/OS 版本一起使用的配置文件的副本:config.yamlip-detect
  • 您必须使用 systemd 218 或更新版本才能维持任务状态。
  • 所有主机(管理和代理节点)必须能够与所有其他主机通信,如 网络安全 所述。
  • 在 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。如果是,就需要移除该行,以禁用事件订阅者。

bootstrap 节点

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

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

该程序修补 DC/OS 1.12 群集而不更改群集的 安全模式

  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. 生成安装文件。将以下命令中的 <installed_cluster_version> 替换为当前要修补的群集上正在运行的 DC/OS 版本,例如 1.8.8bash 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.12

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

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

由于宽容模式允许一些不安全的行为,因此群集在升级到严格安全模式之前可能已遭到泄露。要获得严格安全模式的全部安全优势,我们建议您在每个节点上重新安装操作系统并安装新群集。

先决条件:

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

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

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

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

  3. 构建安装工具包。

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

  5. 生成安装文件。将以下命令中的 <installed_cluster_version> 替换为当前要修补的群集上正在运行的 DC/OS 版本,例如 1.8.8bash 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. 验证补丁:

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

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

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

  6. 验证 curl http://<dcos_master_private_ip>:5050/metrics/snapshot 的度量标准 registrar/log/recovered 的值为 1

    注意:如果要从宽容模式修补到严格模式,此 URL 将是 “curl https://…” 而且您将需要 JWT 进行访问。

    Enterprise

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

  8. 验证副本不足范围的数量是否随着 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 列列出了任何非零值,则等待一分钟,然后重新运行此命令。一旦所有数据被安全地复制,数值将聚合为零。

  9. 转到 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 的度量标准 slave/registered 的值为 1
  • 监控 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-check-runner check node-poststart
  2. dcos-check-runner 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.12 Universe 中可用的软件包比旧版本 Universe 中的要新。服务在安装 DC/OS 时不会自动修补,因为并非所有 DC/OS 服务都具有保持现有状态的修补路径。