打补丁
了解群集补丁
DC/OS 补丁描述了一组更改和支持数据,用于更新、修复或改进 DC/OS 的特性/功能。包含次要变更的单点发布也称为补丁。
补丁流程包括以下内容:
- 说明修复问题、已知问题/限制,明显变更和安全增强
- 不会影响工作负载,这是在不停机的情况下修补实时群集的重要部分
- 帮助用户了解影响 DC/OS 功能的次要变更
注意:这些说明仅适用于对群集配置或维护版本号的更改。例如:DC/OS 2.0.2 —> 2.0.4
- 要更新到较新的主要或次要版本(例如 2.0 到 2.1),请参阅 [升级] 的说明。(/mesosphere/dcos/cn/2.1/installing/production/upgrading/).
如果在支持的操作系统上执行修补且所有前提条件均满足,则修补 应该 维持在群集上运行任务的状态。
警告:在升级期间,/opt/mesosphere/ 中的任何自定义配置文件可能会被不可恢复地删除。
重要指南
在修补 DC/OS 之前,请先查看 版本注释
由于覆盖网络存在群集配置问题,建议在修补或配置新群集时,在
enable_ipv6
中将config.yaml
设为“false”。您可以在我们最新的重要 [产品咨询]中找到更多信息和更稳固的补救程序。(https://support.mesosphere.com/s/login/?startURL=%2Fs%2Farticle%2FCritical-Issue-with-Overlay-Networking&ec=302).如果 IPv6 在内核中被禁用,则必须在
config.yaml
文件中禁用 IPv6。DC/OS 企业版许可证密钥必须驻留在
genconf/license.txt
文件中。Enterprise如果没有修补全部管理节点,DC/OS GUI 和其他更高级别的系统 API 可能不一致或不可用。例如,修补后的 DC/OS Marathon 首要实例无法连接到首要的 Mesos 管理节点上,直到该节点也得到修补为止。出现这种情况时:
- DC/OS GUI 不能提供准确的服务列表。
升级后的 DC/OS Marathon 首要实例无法连接至不安全(未打补丁的)首要 Mesos 管理节点。在所有管理节点得到补丁之前,DC/OS UI 都不可信任。有多个 Marathon 调度器实例和多个 Mesos 管理节点,每个均已修补,Marathon 首要实例可能不是 Mesos 首要实例。
Mesos UI 中的任务历史记录不会持续到修补。
DC/OS Enterprise 可在 [此处]下载。(https://support.mesosphere.com/hc/en-us/articles/213198586-Mesosphere-Enterprise-DC-OS-Downloads).Enterprise
支持的补丁路径
- 从任何当前版本到下一版本。例如,支持 2.1.4 到 2.1.5 的补丁。
- 从任何当前版本到同一版本。例如,支持 2.1.4 到 2.1.4 的补丁。这对于进行配置更改非常有用。
修改 DC/OS 配置
不能 在修补到新版本的同时更改群集配置。必须通过对已安装版本的更新进行群集配置更改。例如,您无法同时将群集从 2.1.x 修补到 2.1.y 并添加更多公共代理节点。您可以更新为 2.1.x,然后修补为 2.1.y,或者可以修补到 2.1.y,再在修补后更新 2.1.y,从而添加更多公共代理。
要修改 DC/OS 配置,您必须使用已修改的 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 版本一起使用的配置文件的副本 version:
config.yaml
andip-detect
.您必须使用
systemd
218 或更新版本才能维持任务状态。所有主机(管理和代理节点)必须能够与所有其他主机通信,如 [网络安全] 所述。(/mesosphere/dcos/cn/2.1/administering-clusters/securing-your-cluster/#network-security).
在 CentOS 或 RedHat 中,使用此命令安装 IP 集(在某些 IP 检测脚本中使用):
sudo yum install -y ipset
您必须熟悉使用
systemctl
和journalctl
命令行工具,以查看和监控服务状态。故障排除说明可在本 文档 结尾部分找到。您必须熟悉 DC/OS 生产安装 说明。
修补之前要对 ZooKeeper 进行实时捕捉。Marathon 支持回滚,但不支持降级。
*重要信息:*升级之前 对 IAM 数据库进行快照 这很容易做到,应该被视为必要的。
确保在开始修补之前, Marathon 事件订阅者已被禁用。完成修补后,保持其禁用状态,因为此功能现已被弃用。
注意:Marathon 事件订阅者默认为禁用。勾选查看是否已将行
- event_subscriber“http_callback”
添加到管理节点上的sudo vi /opt/mesosphere/bin/marathon.sh
如果是,就需要移除该行,以禁用事件订阅者。确认在开始修补前,所有 Marathon 应用程序限制都有效。使用 此脚本 检查限制是否有效。
可选 您可以将自定义 节点和群集运行状况检查 添加到
config.yaml
.
bootstrap 节点
选择您所需的安全模式,然后按照适用的补丁说明进行。
修补 DC/OS 2.1 而不更改安全模式
该程序修补 DC/OS 2.1 群集而不更改群集的 安全模式。
将现有
config.yaml
和ip-detect
文件复制到 bootstrap 节点上的空genconf
文件夹。文件夹与安装工具应当在同一个目录。将旧的
config.yaml
合并为新的config.yaml
格式。大多数情况下,区别会很小。注意:在修补期间,您无法更改
exhibitor_zk_backend
设置。config.yaml
的语法可能与早期版本不同。有关当前config.yaml
语法和参数的详细说明,请参阅 文档.更新 config.yaml 的格式后,比较旧的
config.yaml
和新的config.yaml
. 验证路径或配置没有差异。修补时更改这些会导致灾难性群集故障。根据需要修改
ip-detect
文件。构建安装工具包。
- 下载
dcos_generate_config.ee.sh
文件。 生成安装文件。将以下命令中的
<installed_cluster_version>
替换为当前要修补的群集上正在运行的 DC/OS 版本,例如1.8.8
.dcos_generate_config.ee.sh --generate-node-upgrade-script <installed_cluster_version>
上一步骤的命令将在其输出的最后一行产生 URL,前缀为
Node patch script URL:
. 记下此 URL 以供后续使用。它在本文档中被称为“节点补丁脚本 URL”。- 运行 nginx 容器以为安装文件提供服务。
- 下载
- 转到 DC/OS 管理节点 程序 完成安装。
在严格模式下修补 DC/OS 2.1
该程序在严格 安全模式 下修补到 DC/OS 2.1。
如果正在更新运行的 DC/OS 群集在 strict
安全模式下运行,则请注意,在迁移到严格模式后,安全漏洞可能会持续存在。当转到严格模式时,您的服务现在需要身份认证和授权,以便在 Mesos 注册或访问其 HTTP API。在升级到严格模式之前,应在宽容模式下测试这些配置,以便在升级期间维护调度程序和脚本正常运行时间。
由于宽容模式允许一些不安全的行为,因此群集在升级到严格安全模式之前可能已遭到泄露。要获得严格安全模式的全部安全优势,我们建议您在每个节点上重新安装操作系统并安装新群集。
前提条件:
- 群集必须是 DC/OS 2.1 的新近修补版本 并在 宽容安全模式 下运行,然后才能更新到严格模式。如果群集在修补到 DC/OS 2.1 之前以严格模式运行,则可以跳过该程序。
- 如果您在运行 Pod 或者已在自定义配置中启用 Mesos “HTTP 命令执行器” 功能,则必须在修补到严格模式之前,以 DC/OS 2.1 宽容安全模式重启这些任务。否则,在修补管理节点时,这些任务将会被重新启动。
要将群集从宽容的安全性更新为严格的安全性,请完成以下步骤:
在
security: permissive
中以security: strict
替换config.yaml
. 不要对 中的路径或配置进行任何其他更改。config.yaml
.根据需要修改
ip-detect
文件。构建安装工具包。
- 下载
dcos_generate_config.ee.sh
文件。 生成安装文件。将以下命令中的
<installed_cluster_version>
替换为当前要修补的群集上正在运行的 DC/OS 版本,例如2.1.0
.dcos_generate_config.ee.sh --generate-node-upgrade-script <installed_cluster_version>
上一步骤的命令将在其输出的最后一行产生 URL,前缀为
Node patch script URL:
. 记下此 URL 以供后续使用。它在本文档中被称为“节点补丁脚本 URL”。- 运行 nginx 容器以为安装文件提供服务。
- 下载
- 转到 DC/OS 管理节点 程序 以完成安装。
DC/OS 管理节点
采用以下程序,继续以任何顺序修补每个管理节点,每次修补一个。完成每次修补后,监控 Mesos 管理节点度量标准,确保节点已重新加入群集并完成了协调。
下载并运行节点补丁脚本:
curl -O <Node patch script URL>
sudo bash dcos_node_upgrade.sh
验证补丁脚本是否成功并以状态代码 退出:
0
:echo $?
0
通过在管理节点上运行以下命令来验证补丁:
监视 Exhibitor 并等待其聚合。
在带有静态管理节点列表的 DC/OS Enterprise 群集上,使用以下命令:
sudo curl --cacert /var/lib/dcos/exhibitor-tls-artifacts/root-cert.pem --cert /var/lib/dcos/exhibitor-tls-artifacts/client-cert.pem --key /var/lib/dcos/exhibitor-tls-artifacts/client-key.pem https://localhost:8181/exhibitor/v1/cluster/status
在其他群集上,使用以下命令:
curl http://localhost:8181/exhibitor/v1/cluster/status
等待,直到响应显示所有主机都有
"description":"serving"
。等到
dcos-mesos-master
单元启动并运行。验证
curl http://<dcos_master_private_ip>:5050/metrics/snapshot
的度量标准registrar/log/recovered
的值为1
.注意:如果要从宽容模式升级到严格模式,此 URL 将为“curl https://...”,并且您需要有 JWT 才能访问。
Enterprise
验证
/opt/mesosphere/bin/mesos-master --version
表示修补后的管理节点正在运行 发行说明 中指定的 Mesos 版本,例如1.9.1
.验证 CockroachDB 中副本不足范围的数量是否已随着 IAM 数据库被复制到新管理节点而降至零。运行以下命令并确认
ranges_underreplicated
列仅显示零。
```
sudo /opt/mesosphere/bin/cockroach node status --ranges --certs-dir=/run/dcos/pki/bouncer --host=$(/opt/mesosphere/bin/detect_ip)
```
```
+----+---------------------+--------+---------------------+---------------------+------------------+-----------------------+--------+--------------------+------------------------+
| id | address | build | updated_at | started_at | replicas_leaders | replicas_leaseholders | ranges | ranges_unavailable | ranges_underreplicated |
+----+---------------------+--------+---------------------+---------------------+------------------+-----------------------+--------+--------------------+------------------------+
| 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 |
| 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 |
| 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 |
+----+---------------------+--------+---------------------+---------------------+------------------+-----------------------+--------+--------------------+------------------------+
```
如果 `ranges_underreplicated` 列列出了任何非零值,则等待一分钟,然后重新运行此命令。在所有数据被安全地复制后,数值将聚合为零。
- 转到 DC/OS 代理节点 程序 以完成安装。
DC/OS 代理
注意:修补代理节点时,在代理节点和任务到期之前,代理节点响应来自 Mesos 管理节点的运行状况检查 ping 的时间超过五分钟才是超时。
在所有 DC/OS 代理节点上:
导航至
/opt/mesosphere/lib
目录并删除此库文件。删除此文件可防止发生冲突。libltdl.so.7
下载并运行节点补丁脚本:
curl -O <Node patch script URL>
sudo bash dcos_node_upgrade.sh
验证补丁脚本是否成功并以状态代码 退出:
0
:echo $?
0
验证补丁:
- 验证
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
.
- 验证
故障排除建议
以下命令应提供对修补问题的深度信息:
在所有群集节点上
sudo journalctl -u dcos-download
sudo journalctl -u dcos-spartan
sudo systemctl | grep dcos
如果您的修补因为 自定义节点或群集检查 而失败,运行以下命令可了解更多详细信息:
dcos-check-runner check node-poststart
dcos-check-runner check cluster
在 DC/OS 管理节点上
sudo journalctl -u dcos-exhibitor
less /opt/mesosphere/active/exhibitor/usr/zookeeper/zookeeper.out
sudo journalctl -u dcos-mesos-dns
sudo journalctl -u dcos-mesos-master
在 DC/OS 代理节点上
sudo journalctl -u dcos-mesos-slave
注意
DC/OS 2.1 Catalog 中可用的包比旧版本 Catalog 中的要新。服务在安装 DC/OS 时不会自动修补,因为并非所有 DC/OS 服务都具有保持现有状态的修补路径。