1.4. 程序错误修复
Builds
-
Buildah 使用的
registry.conf
中没有设置禁用的 registry。因此,Buildah 可将镜像推送到集群镜像策略禁用的 registry 中。在这个版本中,为构建所创建的registry.conf
文件包括了禁用的 registry。现在,Builds 在对镜像进行 pull 和 push 操作时会遵循禁用的 registry 设置。(BZ#1730722) - 当在使用 source-to-image 构建策略的构建配置中使用 shell 变量时,试图生成 Dockerfile(用来执行 source-to-image 构建) 的逻辑将错误地检查这些变量。因此,一些 shell 变量可能会被错误地认为是空值,从而导致了构建错误。其他一些变量可能会错误地触发错误信息。现在,在构建配置中引用的 shell 变量会被正确地处理。这些错误应该不会再出现。(BZ#1712245)
- 由于一个逻辑错误,如果构建的 BuildConfig 指定的输出类型为 DockerImage,但为输出镜像指定的名称没有包括 tag 时,那么在镜像构建后将其推送到 registry 的操作将会失败。尝试推送构建的镜像会失败。现在,如果没有指定,构建程序会在名称中添加一个 "latest" tag。使用 BuildConfig 指定 DockerImage 作为输出类型所创建的镜像,如果名称中没有包括 tag,则会使用 "latest" tag 进行推送。(BZ#1746499)
Cloud Credential Operator
- 在以前的版本中,Pod 有内存限制。因此,在有大量 projects/namespaces 的集群中 Credential Operator 可能会崩溃。在这个版本中,删除了内存限制,Operator 不再会因为内存限制而崩溃,而内存由集群自己处理。(BZ#1711402)
-
cloud-credential
Clusteroperator 没有定义相关资源,这会导致oc adm must-gather
命令生成的 tarballs 中不包括 Operator 日志 。此版本修正了这个错误,现在包括了相关的日志。(BZ#1717631)
容器
-
rshared
propogation 可能导致/sys
文件系统在其自身之上递归挂载,并导致容器因为 "no space left on device" 错误而无法启动。此程序错误修复可防止/sys
彼此重复挂载,因此使用rshared: true
选项的容器可以正常启动。(BZ#1711200) -
当 Dockerfile 构建程序处理使用
--from
标志指定内容的COPY
指令从镜像而不是构建者上下文或之前的阶段中复制时,镜像的名称会像在FROM
指令中指定的一样被记录。如果多个COPY
指令将它指定为--from
标志的参数,则名称会被多次列出。此程序错误修复可确保,构建程序不再对那些在构建过程开始阶段已使用这种方式调用的镜像执行 pull 操作。因此,除非需要它们的内容,则在使用--from
标签的COPY
指令中引用的镜像将不再被抓取(pull),构建日志不再记录指定这个镜像名称的FROM
指令。(BZ#1684427) -
当构建上下文目录包含
.dockerignore 文件
时,处理COPY
和ADD
指令的逻辑无法正确处理某些符号链接和子目录。当试图处理会涉及到这个程序错误的COPY
或ADD
指令时,受影响的构建将失败。这个错误修复修正了相关的逻辑,这个问题应该不会再出现。(BZ#1707941)
镜像
-
长时间运行的 Jenkins 代理或从属 Pod 可能会出现以前在 Jenkins 主机中观察到的缺陷进程现象。在 Pod 被终止前,进程列表中显示几个缺陷进程。此程序错误修复使用 OpenShift Jenkins 主镜像的
dumb-init
来清理这些在 Jenkins 作业处理过程中出现的缺陷进程。因此,代理或从属 Pod 中以及 Pod 所在主机上的进程列表不再包含失效进程。(BZ#1705123) - 4.2 中对 OAuth 支持的更改允许在 Jenkins 服务帐户证书和路由器为 OAuth 服务器使用的证书之间进行不同的证书配置。因此,您无法登录 Jenkins 控制台。在这个版本中,OpenShift Container Platform Jenkins 登录插件已经更新,除了挂载到 Pod 的证书外,还会尝试使用 JVM 默认可用的证书进行 TLS 连接。现在您可以登录到 Jenkins 控制台。(BZ#1709575)
- OpenShift Container Platform Jenkins Sync 插件在为 Jenkins Kubernetes 插件 PodTemplates 处理相同名称的 ImageStreams 和 ConfigMaps 时将两者混淆,导致一个类型可以删除创建自其他类型的 Pod 模板的状况。在这个版本中,OpenShift Container Platform Jenkins Sync 插件现已修改,可跟踪哪个 API 对象类型创建了给定名称的 Pod 模板。现在,当集群中存在两个名称相同的类型时,由 OpenShift Container Platform Sync 插件的 ConfigMaps 和 ImageStreams 映射创建的 Jenkins Kubernetes 插件 PodTemplates 不会被意外删除。(BZ#1711340)
-
快速连续删除 Samples Operator 配置对象可能会导致最后一次删除挂起,并且 Operator 的
ImageChangesInProgress
条件一直为True
,从而造成 Samples Operator 的clusteroperator
对象卡在Progressing==True
,引起不确定的集群样本状态。此程序错误修复修正了删除终结程序和样本更新插入之间的协调代码。现在,快速连续删除 Samples Operator 配置对象可以正常工作。(BZ#1735711) - 在以前的版本中,pruner 会在单一请求中获取所有镜像,导致请求用时太长。此程序错误修复引进了使用 pager 来获取所有镜像。现在,pruner 可以获取所有镜像而不会超时。(BZ#1702757)
- 之前,导入程序只能导入最多三个签名,但 registry.redhat.io 通常具有三个以上签名。这会导致无法导入签名。此程序错误修复提高了导入程序的限值,因此现在能够导入签名了。(BZ#1722568)
镜像 Registry
-
在以前的版本中,CRD 没有 OpenAPI 架构,这意味着
oc explain
无法用于config.imageregistry
资源。此程序错误修复实现了 OpenAPI 架构的生成,使得oc explain
现在能够提供有关config.imageregistry.operator.openshift.io
资源的信息。(BZ#1705752) -
Image Registry Operator 没有将
openshift-image-registry
命名空间注册为相关的对象。某些情况下无法通过must-gather
从镜像 registry 或 Image Registry Operator 收集数据。此程序错误修复确保OpenShift-image-registry
命名空间总是包括在 Image Registry Operator 的相关对象中。因此,must-gather
始终都能从openshift-image-registry
命名空间收集基本的信息,如 Pod、部署和服务等。(BZ#1748436) -
在以前的版本中,CVO、Image Registry Operator 和
service-ca
注入控制器同时监控和更新镜像 registry 使用的 CA 捆绑包。这会导致不断删除并重新创建用于在内部 registry 和 OpenShift 其他部分间建立信任的 CA 捆绑包。在这个版本中,CVO 不再管理 CA 捆绑包。Image Registry Operator 可确保创建 ConfigMap 来容纳 CA 捆绑包,但不管理其内容。现在,只有在service-ca
注入控制器需要时,才会更新为内部 registry 保存 CA 捆绑包的 ConfigMap。(BZ#1734564) -
TLS 密钥没有被添加到 registry 路由中 。这是因为 TLS 密钥保存在
Secret.stringData
中,而 Operator 无法在 secret 中看到真实数据。现在,使用 Secret.Data ,Operator 可以看到真实数值。(BZ#1719965) - drain 操作最多会需要 600 秒才可以清除 image-registry Pod。这是因为镜像 registry 从 sh 运行,信号不会被传播到镜像 registry,也无法接收 SIGTERM。现在,registry 进程使用 exec,registry 是 pid 1 进程,并可接收 SIGTERM。现在,drain 操作可以成功清除 pod。(BZ#1729979)
-
must-gather
没有在openshift-image-registry
命名空间中收集 PVC 和事件。现在,PVC 作为must-gather
进程的一部分被收集。(BZ#1737558)
安装程序
-
Red Hat Enterprise Linux 的最小安装会安装并启用 firewalld.service。这个防火墙服务会阻塞
oc rsh/exec/logs
正常工作所需的端口。现在,如果按照测试标准安装,firewalld.service
会被禁用。(BZ#1740439) - 当默认镜像路径与默认设置不同时,worker 无法被创建。现在安装程序会创建并使用它自己的存储池。(BZ#1707479)
kube-apiserver
-
通过创建 ConfigMap,可以缩短证书轮换。不支持这个行为。现在,如果您创建了这个 ConfigMap ,在 kubeapiserver-operator 上将
Upgradable
设置为False
,则意味着您无法再更新集群。(BZ#1722550)
Logging
- Elasticsearch 的动态 seeding 功能的效率比较低,具有大量项目的集群可能会产生大量调用。当缺少缓存时,这个问题会更加严重。因此,Elasticsearch 的调用可能会在返回结果前出现超时问题。这个程序修复增加了 API 调用缓存和 ACL seeding 功能。这些改进减少了页面超时的机率。(BZ#1705589)
-
Logging Operator 依赖于信息流的类型来设置日志类型,因此发送到
stdout
的日志被标记为INFO
,发送到stderr
的日志标记为ERROR
。这个方法并不总是正确传递信息类型。现在,日志级别不再根据信息流设置。反之,如果无法确定正确的日志级别,它会被设置为unknown
。(BZ#1726639) - 在删除集群日志实例的过程中,集群日志项下的资源会被单独删除。因此,当 fluentd 或者 rsyslog DaemonSet 仍然在运行时,可能会有一个短时间段它的日志收集器服务帐户已被删除。这会造成在此时间段内的日志丢失了 Kubernetes 信息,其中包括命名空间名称。在这个版本中,服务帐户会在所有子资源都被删除后才被删除。现在,没有 log collector 服务帐户就无法运行 collector DaemonSets。(BZ#1715370)
Web 控制台
- 在以前的版本中,事件的 console Operator 日志会打印一些重复的信息。依赖程序库的版本更新已解决了这个问题,并在 console Operator 日志中不再重复信息。(BZ#1687666)
- 用户无法复制整个 webhook URL,因为 secret 值被混淆。在这个版本中,添加了一个链接,用户现在可以使用复制包括 secret 值在内的整个 webhook URL。(BZ#1665010)
- Web 控制台中的 Machine and Machine Set 详情页不包含 Events 标签页。现在添加了 Events 标签页,可通过 Machine 和 Machine Set 页访问。(BZ#1693180)
- 在以前的版本中,用户无法从 Web 控制台的详情页中查看节点的状态。现在,添加了一个状态字段,用户可以在其详情页面中查看节点的状态。(BZ#1706868)
- 在以前的版本中,如果试图通过 OperatorHub 在安装 Operator 后马上创建一个 Operator 资源,可能会偶尔看到一个空白的 Web 控制台弹出窗口。在这个版本中,如果试图在资源可用前创建资源,会显示一个清晰的信息。(BZ#1710079)
- 在以前的版本中,Web 控制台中的 Deployment Config Details 页会在第一个版本被推出前就显示状态为 active 。在这个版本中,在一个 rollout 发生前显示状态为 Updating ,在 rollout 完成后显示状态为 Up to data 。(BZ#1714897)
- 在以前的版本中,在一些情况下,Web 控制台中的节点的指标图表可能会错误地用于多个节点。在这个版本中,节点页面图表只为相关节点正确显示信息。(BZ#1720119)
- 在以前的版本中,通过 Web 控制台创建时不会正确设置 OpenID 身份供应商的 ca.crt 值。这个问题已解决,现在可以正确设定 ca.crt 。BZ#1727282)
- 在以前的版本中,当访问 CRD 列表中的 ClusterResourceQuota 实例时,用户会在 web 控制台中看到一个错误。这个问题已被解决,现在您可以在 CRD 页面中成功列出 ClusterResourceQuota 实例。(BZ#1742952)
- 以前,Web 控制台没有在节点列表中显示无法调度的节点。这与 CLI 不一致。控制台现在显示在节点列表和节点详情页面中无法调度节点的时间。(BZ#1748405)
- 在以前的版本中,Web 控制台会在资源详情页面中以大写的形式显示 config map 和 secret 的关键字(key)。而这些关键字通常是区分大小写的。OpenShift Container Platform 4.2 Web 控制台现在会正确显示 config map 和 secret 的关键字。(BZ#1752572)
网络
- Egress IP 地址无法在带有限制性网络策略的命名空间中正常工作。因此,接受特定来源的流量的 Pod 无法通过 egress IP 发送 egress 网络数据。这是因为外部服务器的响应会被其网络策略错误地拒绝。在这个版本中,egress 数据的回复被正确地识别为回复,而不是新的连接。Egress IP 和 NetworkPolicy 可以一起工作。(BZ#1700431)
- 如果使用外部 IP 地址与外部主机联系的 Pod 接收到一个外部的 IP 地址不响应的情况下,egress IP 监控代码会错误地确定主机没有响应。因此,高可用性的 Egress IP 可能会被切换到不同的节点。现在,监控代码已被修改,它可以区分未响应的 egress 节点和未响应的最终目标系统。因此,高可用性 Egress IP 不会进行不必要的切换。(BZ#1717639)
-
默认情况下,会创建 etcd 命名空间而没有指定 net id。因此,API 服务器组件无法连接到 etcd。已修复该代码,为 etcd 命名空间指定
netid=1
。(BZ#1719653)
节点
- 当合并添加到节点中的附加 IP 地址时使用的算法不正确。因此,在为节点添加附加 IP 地址时,地址列表没有顺序,从而导致节点无法与 API 服务器沟通。地址的合并算法被修改为不对地址进行重新排序。在节点中添加辅助 IP 地址已不再更改顺序,且该节点可以继续与 API 服务器沟通。(BZ#1696628)
- 因为 kubeconfig 控制器存在问题,如果集群升级到使用不同 OS 版本的版本,则已修改的 kubelet Config 会被恢复到原来的值。已修复该代码以在源中指定正确的控制器。对 kubeletConfig 的改变将可以被保留。(BZ#1718726)
oc
- 对节点选择器标签的验证错误导致标签中为空的键值不被接受。在这个版本中,节点选择器标签验证机制进行了修复,标签上的键值可以为空。(BZ#*1683819)
-
oc get
命令在收到空结果列表时没有返回正确的信息。在这个版本中,当oc get
的结果为一个空列表时,返回的信息进行了改进。(BZ#1708280)
OLM
-
在重启或升级 Marketplace Operator 时,会报告 marketplace Cluster Operator 处于
degraded
状态。因此,OpenShift Container Platform 升级测试失败。在这个版本中,升级测试会再次传递,因为当 Operator 被停止时,OpenShift Container Platform 不会再报告degraded
。(BZ#1706867) 升级时出现一个错误,导致 Marketplace Operator 降级并退出。集群 operator 状态没有准确描述 Marketplace Operator 的健康状况。
以下是造成这个问题的原因:
- 多个 Marketplace Operators 同时运行并更新 ClusterOperatorStatus。
- 如果在协调操作对象(OperatorSources 或 CatalogSourceConfigs)时出现错误,同步将失败。这可出现因为网络问题或者无效的操作对象而导致降级状态的问题。当失败的同步超过总同步的阈值时,Marketplace Operator 也会降级。
很难通过 Telemetry 识别为什么 ClusterOperatorStatus 处于一个特定状态。虽然 Telemetry 包含状态和原因,但 marketplace 并没有设定原因。
在这个版本中:
- Operator SDK 提供的领先选举机制可防止多个 Marketplace Operators 同时更新 ClusterOperatorStatus。
- marketplace 只在无法获得或更新其操作对象时报告降级状态,而不是在协调操作对象时遇到错误时报告。
- marketplace 现在在设置条件时包括了一个原因,以便 Telemetry 能够更好地了解 Marketplace Operator 的状态。(BZ#1721537)
-
CatalogSourceConfig(
csc
)和 OperatorSource(opsrc
)自定义资源定义 (crds) 并不包含描述。因此,oc explain csc
和oc explain opsrc
会返回空白描述。在这个版本中,添加了 openapi CRD 定义,以便oc explain csc
和oc explain opsrc
可以正常工作。(BZ#1723835) -
Marketplace Operator 覆盖了与 OperatorSources 关联的 registry 部署的 Pod 部署规格。因此,用户无法添加 NodeSelectors。在这个版本中,所需的字段只能在 OperatorSource 更新的部署规格中被替换,允许用户将 NodeSelectors 添加到与 OperatorSources 关联的 Operator registry Pod 中。默认情况下,不存在 NodeSelector。用户现在可以在 registry Pod 部署的 Pod 规格中添加 NodeSelectors 。例如,在
community-operators
OperatorSource 中,可以在openshift-marketplace
命名空间中编辑community-operators
部署。(BZ#1696726) -
Marketplace Operator 会缩减 registry 部署,然后再将其扩展来强制更新。如果 registry Pod 出现问题,则会导致 Pod 崩溃。现在,使用注解(annotation)来强制更新,而不再通过对 registry 部署进行扩展来实现。这样就不会造成 registry 不可用的情况。请注意,这本身并不会修复此程序错误。需要对端到端测试进行修复,使它在
openshift-marketplace
命名空间中的 crash-looping Pods 中不会出现错误。(BZ#1700100) -
must-gather
工具需要一个RelatedObjects
项 ,在 clusteroperator 自定义资源中使用与 Operator 关联的对象引用填充。因为对 Marketplace 缺少了这个字段,所以must-gather
工具无法收集到关于 Marketplace Operator 的足够信息。在这个版本中,RelatedObjects
项会根据 Operator 的命名空间和 OperatorSource、CatalogSourceConfig、CatalogSource 资源生成这个字段的值。这可让must-gather
工具收集关于 Marketplace Operator 的信息。(BZ#1717439)
OpenShift Controller Manager
-
不支持将 OpenShift Controller Manager Operator 设置为
Unmanaged
或Removed
,因此它将导致对应的 clusteroperator 对象中的条件进入Unknown
状态。在这个版本中,OpenShift Controller Manager Operator 会忽略不被支持的Unmanaged
和Removed
管理状态设置。现在,在 clusteroperator 状态条件中解释了这个信息。(BZ#1719188)
Red Hat Enterprise Linux CoreOS (RHCOS)
- 在以前的版本中,当 sshd 配置中的 ClientAliveInterval 没有按照 Microsoft Azure 的要求设定为 180 时,SSH 连接会失败。在这个版本中,sshd 配置被默认设置为 180,因此 SSH 不会在 Azure 中挂起。(BZ#1701050)
服务代理
- 在以前的版本中,Automation Broker 总是创建一个网络策略,以便对目标命名空间进行临时命名空间访问。因此,目标命名空间被锁定到新创建的策略中,命名空间可以相互通信。在这个版本中,Automation Broker 会检查目标命名空间是否有网络策略,如果没有,就无法创建新的网络策略。在这个版本中,Automation Broker 可以在不影响目标命名空间中运行的现有服务的情况下执行 Ansible Playbook Bundle 操作。(BZ#1643303)
- 在以前的版本中,OpenShift Ansible Service Broker Operator 不会将指标传递给 Prometheus,除非手动应用了正确的权限。在这个版本中,Operator 会自动使用所需权限进行安装。(BZ#1692281)
模板
-
在以前的版本中,Samples Operator 配置对象(
configs.samples.operator.openshift.io
)的自定义资源定义没有定义 openAPIV3Schema 验证。因此,oc explain
无法提供有关对象的有用信息。在这个版本中,增加了 openAPIV3Schema 验证,现在oc explain
可以针对对象进行 。(BZ#1705753) - 在以前的版本中,Samples Operator 使用一个直接的 OpenShift Container Platform 来让客户端发出 GET 调用,以便维护基于 controller/informer 的 secret、镜像流和模板监控。这会导致对 OpenShift Container Platform API 服务器进行不必要的 API 调用。在这个版本中,利用了 informer/listener API,并减少了针对 OpenShift Container Platform API 服务器的活动。(BZ#1707834)
- 在以前的版本中,Samples Operator 不会创建一个集群角色,这个角色被整合到 cluster-reader 角色中。因此,具有 cluster-reader 角色的用户无法读取 Samples Operator 的配置对象。在这个版本中,Samples Operator 的清单被更新为包含一个用于只读访问其 config 对象的集群角色,这个角色被整合到 cluster-reader 角色中。现在,具有 cluster-reader 角色的用户可以读取、列出和观察 Samples Operator 的配置对象。(BZ#1717124)