-
如果使用 Podman,请运行此命令
$ sudo podman run --volume /var/lib/etcd:/var/lib/etcd:Z quay.io/cloud-bulldozer/etcd-perf
-
如果使用 Docker,请运行此命令
$ sudo docker run --volume /var/lib/etcd:/var/lib/etcd:Z quay.io/cloud-bulldozer/etcd-perf
为确保 OpenShift Container Platform 中 etcd 的最佳性能和可扩展性,您可以完成以下实践。
由于 etcd 将数据写入磁盘并在磁盘上持久保存提案,因此其性能取决于磁盘性能。虽然 etcd 不是特别 I/O 密集型,但它需要低延迟的块设备才能获得最佳性能和稳定性。由于 etcd 的共识协议依赖于将元数据持久存储到日志 (WAL),因此 etcd 对磁盘写入延迟很敏感。来自其他进程的慢速磁盘和磁盘活动会导致较长的 fsync 延迟。
这些延迟可能导致 etcd 错过心跳,无法及时将新的提案提交到磁盘,最终导致请求超时和临时领导者丢失。高写入延迟还会导致 OpenShift API 缓慢,从而影响集群性能。由于这些原因,请避免在对 I/O 敏感或密集型且共享相同底层 I/O 基础设施的控制平面节点上与其他工作负载共存。
在可以以低于 10 毫秒的速度写入至少 50 个 8KB 顺序 IOPS(包括 fdatasync)的块设备上运行 etcd。对于负载较重的集群,建议使用 8000 字节(2 毫秒)的 500 个顺序 IOPS。要测量这些数字,您可以使用基准测试工具,例如 fio。
为了实现这种性能,请在由低延迟和高吞吐量的 SSD 或 NVMe 磁盘支持的机器上运行 etcd。请考虑使用单层单元 (SLC) 固态硬盘 (SSD),它每个内存单元提供 1 位,耐用可靠,非常适合写入密集型工作负载。
etcd 上的负载来自静态因素,例如节点和 Pod 的数量,以及动态因素,包括由于 Pod 自动扩展、Pod 重启、作业执行和其他与工作负载相关的事件而导致的端点变化。为了准确地调整 etcd 设置的大小,您必须分析工作负载的具体要求。请考虑影响 etcd 负载的节点数、Pod 数和其他相关因素。 |
以下硬盘实践可提供最佳的 etcd 性能
使用专用的 etcd 驱动器。避免使用通过网络通信的驱动器,例如 iSCSI。不要在 etcd 驱动器上放置日志文件或其他繁重的工作负载。
优先选择低延迟驱动器,以支持快速读写操作。
优先选择高带宽写入,以加快压缩和碎片整理速度。
优先选择高带宽读取,以加快故障恢复速度。
至少使用固态硬盘。生产环境优先选择 NVMe 驱动器。
使用服务器级硬件以提高可靠性。
避免使用 NAS 或 SAN 设置以及旋转式硬盘。Ceph Rados 块设备 (RBD) 和其他类型的网络附加存储可能会导致网络延迟不可预测。为了大规模地为 etcd 节点提供快速存储,请使用 PCI 直通将 NVM 设备直接传递给节点。
始终使用 fio 等实用程序进行基准测试。您可以使用此类实用程序持续监控集群性能的增长。
避免使用网络文件系统 (NFS) 协议或其他基于网络的文件系统。
在已部署的 OpenShift Container Platform 集群上监控的一些关键指标是 etcd 磁盘预写日志持续时间的 p99 和 etcd 领导者变更次数。使用 Prometheus 跟踪这些指标。
在正常操作期间,etcd 成员数据库大小在集群中可能会有所不同。即使领导者大小与其他成员不同,此差异也不会影响集群升级。 |
在创建 OpenShift Container Platform 集群之前或之后,可以使用 fio 验证 etcd 的硬件。
正在测试的机器上安装了 Podman 或 Docker 等容器运行时。
数据写入 /var/lib/etcd
路径。
运行 fio 并分析结果
如果使用 Podman,请运行此命令
$ sudo podman run --volume /var/lib/etcd:/var/lib/etcd:Z quay.io/cloud-bulldozer/etcd-perf
如果使用 Docker,请运行此命令
$ sudo docker run --volume /var/lib/etcd:/var/lib/etcd:Z quay.io/cloud-bulldozer/etcd-perf
输出报告通过将运行中捕获的 fsync 指标的第 99 个百分位数与 10 毫秒进行比较,来报告磁盘是否足够快以托管 etcd。一些可能受 I/O 性能影响的最重要的 etcd 指标如下所示
etcd_disk_wal_fsync_duration_seconds_bucket
指标报告 etcd 的 WAL fsync 持续时间
etcd_disk_backend_commit_duration_seconds_bucket
指标报告 etcd 后端提交延迟持续时间
etcd_server_leader_changes_seen_total
指标报告领导者变更次数
由于 etcd 在所有成员之间复制请求,因此其性能很大程度上取决于网络输入/输出 (I/O) 延迟。高网络延迟会导致 etcd 心跳时间超过选举超时时间,从而导致领导者选举会破坏集群。在已部署的 OpenShift Container Platform 集群上监控的关键指标是在每个 etcd 集群成员上 etcd 网络对等体延迟的第 99 个百分位数。使用 Prometheus 跟踪该指标。
histogram_quantile(0.99, rate(etcd_network_peer_round_trip_time_seconds_bucket[2m]))
指标报告 etcd 完成在成员之间复制客户端请求的往返时间。确保它小于 50 毫秒。
通常,集群必须具有 3 个控制平面节点。但是,如果您的集群安装在裸机平台上,则可以将集群扩展到最多 5 个控制平面节点作为安装后任务。例如,要将安装后的 3 个控制平面节点扩展到 4 个,可以添加一个主机并将其安装为控制平面节点。然后,etcd 运算符会相应地进行扩展以考虑附加的控制平面节点。
仅裸机平台支持将集群扩展到 4 个或 5 个控制平面节点。
有关如何使用 Assisted Installer 扩展控制平面节点的更多信息,请参见“使用 API 添加主机”和“在健康集群上安装主控制平面节点”。
下表显示了不同大小集群的容错能力
集群大小 | 多数 | 容错能力 |
---|---|---|
1 个节点 |
1 |
0 |
3 个节点 |
2 |
1 |
4 个节点 |
3 |
1 |
5 个节点 |
3 |
2 |
有关从仲裁丢失中恢复的更多信息,请参见“恢复到以前的集群状态”。
您可以将 etcd 从共享磁盘移动到单独的磁盘,以防止或解决性能问题。
对于 OpenShift Container Platform 4.17 容器存储,机器配置运算符 (MCO) 负责挂载辅助磁盘。
此编码脚本仅支持以下设备类型的设备名称
|
将新磁盘连接到集群后,etcd 数据库是根挂载的一部分。它不是辅助磁盘或在重新创建主节点时预期的磁盘的一部分。因此,主节点不会创建单独的 /var/lib/etcd
挂载点。
您有集群 etcd 数据的备份。
您已安装 OpenShift CLI (oc
)。
您可以使用 cluster-admin
权限访问集群。
在上传机器配置之前添加其他磁盘。
MachineConfigPool
必须与 metadata.labels[machineconfiguration.openshift.io/role]
匹配。这适用于控制器、工作程序或自定义池。
此过程不会将根文件系统的一部分(例如 |
使用控制平面机器集时不支持此过程。 |
将新磁盘连接到集群,并通过在调试 shell 中运行 lsblk
命令来验证节点中是否检测到该磁盘
$ oc debug node/<node_name>
# lsblk
记下 lsblk
命令报告的新磁盘的设备名称。
创建以下脚本并将其命名为 etcd-find-secondary-device.sh
#!/bin/bash
set -uo pipefail
for device in <device_type_glob>; do (1)
/usr/sbin/blkid "${device}" &> /dev/null
if [ $? == 2 ]; then
echo "secondary device found ${device}"
echo "creating filesystem for etcd mount"
mkfs.xfs -L var-lib-etcd -f "${device}" &> /dev/null
udevadm settle
touch /etc/var-lib-etcd-mount
exit
fi
done
echo "Couldn't find secondary block device!" >&2
exit 77
1 | 将 <device_type_glob> 替换为块设备类型的 shell 通配符。对于 SCSI 或 SATA 驱动器,使用 /dev/sd* ;对于虚拟驱动器,使用 /dev/vd* ;对于 NVMe 驱动器,使用 /dev/nvme*[0-9]*n* 。 |
从 etcd-find-secondary-device.sh
脚本创建 base64 编码字符串,并记下其内容
$ base64 -w0 etcd-find-secondary-device.sh
创建名为 etcd-mc.yml
的 MachineConfig
YAML 文件,其内容如下所示
apiVersion: machineconfiguration.openshift.io/v1
kind: MachineConfig
metadata:
labels:
machineconfiguration.openshift.io/role: master
name: 98-var-lib-etcd
spec:
config:
ignition:
version: 3.4.0
storage:
files:
- path: /etc/find-secondary-device
mode: 0755
contents:
source: data:text/plain;charset=utf-8;base64,<encoded_etcd_find_secondary_device_script> (1)
systemd:
units:
- name: find-secondary-device.service
enabled: true
contents: |
[Unit]
Description=Find secondary device
DefaultDependencies=false
After=systemd-udev-settle.service
Before=local-fs-pre.target
ConditionPathExists=!/etc/var-lib-etcd-mount
[Service]
RemainAfterExit=yes
ExecStart=/etc/find-secondary-device
RestartForceExitStatus=77
[Install]
WantedBy=multi-user.target
- name: var-lib-etcd.mount
enabled: true
contents: |
[Unit]
Before=local-fs.target
[Mount]
What=/dev/disk/by-label/var-lib-etcd
Where=/var/lib/etcd
Type=xfs
TimeoutSec=120s
[Install]
RequiredBy=local-fs.target
- name: sync-var-lib-etcd-to-etcd.service
enabled: true
contents: |
[Unit]
Description=Sync etcd data if new mount is empty
DefaultDependencies=no
After=var-lib-etcd.mount var.mount
Before=crio.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecCondition=/usr/bin/test ! -d /var/lib/etcd/member
ExecStart=/usr/sbin/setsebool -P rsync_full_access 1
ExecStart=/bin/rsync -ar /sysroot/ostree/deploy/rhcos/var/lib/etcd/ /var/lib/etcd/
ExecStart=/usr/sbin/semanage fcontext -a -t container_var_lib_t '/var/lib/etcd(/.*)?'
ExecStart=/usr/sbin/setsebool -P rsync_full_access 0
TimeoutSec=0
[Install]
WantedBy=multi-user.target graphical.target
- name: restorecon-var-lib-etcd.service
enabled: true
contents: |
[Unit]
Description=Restore recursive SELinux security contexts
DefaultDependencies=no
After=var-lib-etcd.mount
Before=crio.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/restorecon -R /var/lib/etcd/
TimeoutSec=0
[Install]
WantedBy=multi-user.target graphical.target
1 | 将 <encoded_etcd_find_secondary-device_script> 替换为您记下的编码脚本内容。 |
在节点的调试 shell 中运行 grep /var/lib/etcd /proc/mounts
命令以确保已挂载磁盘
$ oc debug node/<node_name>
# grep -w "/var/lib/etcd" /proc/mounts
/dev/sdb /var/lib/etcd xfs rw,seclabel,relatime,attr2,inode64,logbufs=8,logbsize=32k,noquota 0 0
对于大型且密集的集群,如果键空间增长过大并超过空间配额,etcd 的性能可能会下降。定期维护和碎片整理 etcd 以释放数据存储中的空间。监控 Prometheus 以获取 etcd 指标,并在需要时进行碎片整理;否则,etcd 可能会发出集群范围的警报,使集群进入维护模式,该模式仅接受键读取和删除操作。
监控这些关键指标
etcd_server_quota_backend_bytes
,这是当前的配额限制
etcd_mvcc_db_total_size_in_use_in_bytes
,这表示历史压缩后的实际数据库使用情况
etcd_mvcc_db_total_size_in_bytes
,这显示数据库大小,包括等待碎片整理的可用空间
在导致磁盘碎片化的事件(例如 etcd 历史压缩)之后,碎片整理 etcd 数据以回收磁盘空间。
历史压缩每五分钟自动执行一次,并在后端数据库中留下空隙。etcd 可以使用此碎片空间,但主机文件系统无法使用。必须碎片整理 etcd 以使此空间可用于主机文件系统。
碎片整理会自动发生,但您也可以手动触发它。
自动碎片整理适用于大多数情况,因为 etcd 运算符使用集群信息来确定对用户最有效的操作。 |
etcd 运算符会自动碎片整理磁盘。无需人工干预。
通过查看以下日志之一,验证碎片整理过程是否成功
etcd 日志
cluster-etcd-operator pod
运算符状态错误日志
自动碎片整理可能会导致各种 OpenShift 核心组件(例如 Kubernetes 控制器管理器)出现领导者选举失败,从而触发失败组件的重启。重启是无害的,它要么触发故障转移到下一个正在运行的实例,要么组件在重启后恢复工作。 |
etcd member has been defragmented: <member_name>, memberID: <member_id>
failed defrag on member: <member_name>, memberID: <member_id>: <error_message>
当需要使用手动碎片整理时,Prometheus 警报会发出指示。警报会在两种情况下显示
当 etcd 使用超过 50% 的可用空间超过 10 分钟时
当 etcd 长期(超过 10 分钟)仅使用了其数据库总大小的不到 50% 时
您还可以使用 PromQL 表达式 (etcd_mvcc_db_total_size_in_bytes - etcd_mvcc_db_total_size_in_use_in_bytes)/1024/1024
检查碎片整理后将释放的 etcd 数据库大小(以 MB 为单位),以此确定是否需要进行碎片整理。
碎片整理 etcd 是一个阻塞操作。etcd 成员在碎片整理完成之前不会响应。因此,请在每个 pod 上的碎片整理操作之间至少等待一分钟,以允许集群恢复。 |
请按照以下步骤对每个 etcd 成员进行 etcd 数据碎片整理。
您拥有以 cluster-admin
角色访问集群的权限。
确定哪个 etcd 成员是领导者,因为领导者应该最后进行碎片整理。
获取 etcd pod 列表
$ oc -n openshift-etcd get pods -l k8s-app=etcd -o wide
etcd-ip-10-0-159-225.example.redhat.com 3/3 Running 0 175m 10.0.159.225 ip-10-0-159-225.example.redhat.com <none> <none>
etcd-ip-10-0-191-37.example.redhat.com 3/3 Running 0 173m 10.0.191.37 ip-10-0-191-37.example.redhat.com <none> <none>
etcd-ip-10-0-199-170.example.redhat.com 3/3 Running 0 176m 10.0.199.170 ip-10-0-199-170.example.redhat.com <none> <none>
选择一个 pod 并运行以下命令以确定哪个 etcd 成员是领导者
$ oc rsh -n openshift-etcd etcd-ip-10-0-159-225.example.redhat.com etcdctl endpoint status --cluster -w table
Defaulting container name to etcdctl.
Use 'oc describe pod/etcd-ip-10-0-159-225.example.redhat.com -n openshift-etcd' to see all of the containers in this pod.
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://10.0.191.37:2379 | 251cd44483d811c3 | 3.5.9 | 104 MB | false | false | 7 | 91624 | 91624 | |
| https://10.0.159.225:2379 | 264c7c58ecbdabee | 3.5.9 | 104 MB | false | false | 7 | 91624 | 91624 | |
| https://10.0.199.170:2379 | 9ac311f93915cc79 | 3.5.9 | 104 MB | true | false | 7 | 91624 | 91624 | |
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
根据此输出的 IS LEADER
列,https://10.0.199.170:2379
端点是领导者。将此端点与上一步的输出匹配,领导者的 pod 名称是 etcd-ip-10-0-199-170.example.redhat.com
。
碎片整理 etcd 成员。
连接到正在运行的 etcd 容器,传入 _不是_ 领导者的 pod 名称
$ oc rsh -n openshift-etcd etcd-ip-10-0-159-225.example.redhat.com
取消设置 ETCDCTL_ENDPOINTS
环境变量
sh-4.4# unset ETCDCTL_ENDPOINTS
碎片整理 etcd 成员
sh-4.4# etcdctl --command-timeout=30s --endpoints=https://127.0.0.1:2379 defrag
Finished defragmenting etcd member[https://127.0.0.1:2379]
如果出现超时错误,请增加 --command-timeout
的值,直到命令成功。
验证数据库大小是否已减小
sh-4.4# etcdctl endpoint status -w table --cluster
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
| https://10.0.191.37:2379 | 251cd44483d811c3 | 3.5.9 | 104 MB | false | false | 7 | 91624 | 91624 | |
| https://10.0.159.225:2379 | 264c7c58ecbdabee | 3.5.9 | 41 MB | false | false | 7 | 91624 | 91624 | | (1)
| https://10.0.199.170:2379 | 9ac311f93915cc79 | 3.5.9 | 104 MB | true | false | 7 | 91624 | 91624 | |
+---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+
此示例显示此 etcd 成员的数据库大小现在为 41 MB,而起始大小为 104 MB。
重复这些步骤以连接到其他每个 etcd 成员并对其进行碎片整理。始终最后碎片整理领导者。
碎片整理操作之间至少等待一分钟,以允许 etcd pod 恢复。在 etcd pod 恢复之前,etcd 成员将不会响应。
如果由于超过空间配额而触发任何 NOSPACE
警报,请清除它们。
检查是否存在任何 NOSPACE
警报
sh-4.4# etcdctl alarm list
memberID:12345678912345678912 alarm:NOSPACE
清除警报
sh-4.4# etcdctl alarm disarm
您可以将控制平面硬件速度设置为 "Standard"
、"Slower"
或默认值 ""
。
默认设置允许系统决定使用哪种速度。此值支持从不存在此功能的版本进行升级,因为系统可以选择以前版本的 value。
通过选择其他值之一,您将覆盖默认值。如果您由于超时或丢失心跳而看到许多领导者选举,并且您的系统设置为 ""
或 "Standard"
,请将硬件速度设置为 "Slower"
,以使系统对增加的延迟更具容忍性。
要更改 etcd 的硬件速度容差,请完成以下步骤。
输入以下命令查看当前值
$ oc describe etcd/cluster | grep "Control Plane Hardware Speed"
Control Plane Hardware Speed: <VALUE>
如果输出为空,则表示尚未设置该字段,应将其视为默认值 ("")。 |
输入以下命令更改值。将 <value>
替换为有效值之一:""
、"Standard"
或 "Slower"
$ oc patch etcd/cluster --type=merge -p '{"spec": {"controlPlaneHardwareSpeed": "<value>"}}'
下表显示每个配置文件的心跳间隔和领导者选举超时。这些值可能会更改。
配置文件 |
ETCD_HEARTBEAT_INTERVAL |
ETCD_LEADER_ELECTION_TIMEOUT |
|
取决于平台而异 |
取决于平台而异 |
|
100 |
1000 |
|
500 |
2500 |
查看输出
etcd.operator.openshift.io/cluster patched
如果您输入任何非有效值,则会显示错误输出。例如,如果您输入 "Faster"
作为值,则输出如下所示
The Etcd "cluster" is invalid: spec.controlPlaneHardwareSpeed: Unsupported value: "Faster": supported values: "", "Standard", "Slower"
输入以下命令验证值是否已更改
$ oc describe etcd/cluster | grep "Control Plane Hardware Speed"
Control Plane Hardware Speed: ""
等待 etcd pod 滚动更新
$ oc get pods -n openshift-etcd -w
以下输出显示 master-0 的预期条目。在继续之前,请等待所有 master 显示 4/4 Running
状态。
installer-9-ci-ln-qkgs94t-72292-9clnd-master-0 0/1 Pending 0 0s
installer-9-ci-ln-qkgs94t-72292-9clnd-master-0 0/1 Pending 0 0s
installer-9-ci-ln-qkgs94t-72292-9clnd-master-0 0/1 ContainerCreating 0 0s
installer-9-ci-ln-qkgs94t-72292-9clnd-master-0 0/1 ContainerCreating 0 1s
installer-9-ci-ln-qkgs94t-72292-9clnd-master-0 1/1 Running 0 2s
installer-9-ci-ln-qkgs94t-72292-9clnd-master-0 0/1 Completed 0 34s
installer-9-ci-ln-qkgs94t-72292-9clnd-master-0 0/1 Completed 0 36s
installer-9-ci-ln-qkgs94t-72292-9clnd-master-0 0/1 Completed 0 36s
etcd-guard-ci-ln-qkgs94t-72292-9clnd-master-0 0/1 Running 0 26m
etcd-ci-ln-qkgs94t-72292-9clnd-master-0 4/4 Terminating 0 11m
etcd-ci-ln-qkgs94t-72292-9clnd-master-0 4/4 Terminating 0 11m
etcd-ci-ln-qkgs94t-72292-9clnd-master-0 0/4 Pending 0 0s
etcd-ci-ln-qkgs94t-72292-9clnd-master-0 0/4 Init:1/3 0 1s
etcd-ci-ln-qkgs94t-72292-9clnd-master-0 0/4 Init:2/3 0 2s
etcd-ci-ln-qkgs94t-72292-9clnd-master-0 0/4 PodInitializing 0 3s
etcd-ci-ln-qkgs94t-72292-9clnd-master-0 3/4 Running 0 4s
etcd-guard-ci-ln-qkgs94t-72292-9clnd-master-0 1/1 Running 0 26m
etcd-ci-ln-qkgs94t-72292-9clnd-master-0 3/4 Running 0 20s
etcd-ci-ln-qkgs94t-72292-9clnd-master-0 4/4 Running 0 20s
输入以下命令查看值
$ oc describe -n openshift-etcd pod/<ETCD_PODNAME> | grep -e HEARTBEAT_INTERVAL -e ELECTION_TIMEOUT
这些值可能没有从默认值更改。 |
您可以为每个 etcd 实例设置以 gibibytes (GiB) 为单位的磁盘配额。如果您为 etcd 实例设置磁盘配额,则可以指定 8 到 32 之间的整数值。默认值为 8。您只能指定递增的值。
如果您遇到 低空间
警报,则可能需要增加磁盘配额。此警报表示集群太大,无法容纳在 etcd 中,即使进行了自动压缩和碎片整理也是如此。如果您看到此警报,则需要立即增加磁盘配额,因为 etcd 空间不足后,写入将失败。
您可能需要增加磁盘配额的另一种情况是,如果您遇到 数据库增长过快
警报。此警报警告数据库可能在接下来的四个小时内增长过大。在这种情况下,请考虑增加磁盘配额,以免最终遇到 低空间
警报和可能的写入失败。
如果您增加了磁盘配额,则您指定的磁盘空间不会立即被保留。相反,etcd 可以根据需要增长到该大小。确保 etcd 运行在比您为磁盘配额指定的值更大的专用磁盘上。
对于大型 etcd 数据库,控制平面节点必须具有额外的内存和存储空间。因为您必须考虑 API 服务器缓存,所以所需的最小内存至少是 etcd 数据库配置大小的三倍。
增加 etcd 数据库大小仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能可让客户提前访问即将推出的产品功能,从而能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
要更改 etcd 的数据库大小,请完成以下步骤。
通过输入以下命令检查每个 etcd 实例的磁盘配额的当前值
$ oc describe etcd/cluster | grep "Backend Quota"
Backend Quota Gi B: <value>
通过输入以下命令更改磁盘配额的值
$ oc patch etcd/cluster --type=merge -p '{"spec": {"backendQuotaGiB": <value>}}'
etcd.operator.openshift.io/cluster patched
通过输入以下命令验证是否已设置磁盘配额的新值
$ oc describe etcd/cluster | grep "Backend Quota"
etcd 运算符会自动推出具有新值的新 etcd 实例。
通过输入以下命令验证 etcd pod 是否正在运行
$ oc get pods -n openshift-etcd
以下输出显示预期的条目。
NAME READY STATUS RESTARTS AGE
etcd-ci-ln-b6kfsw2-72292-mzwbq-master-0 4/4 Running 0 39m
etcd-ci-ln-b6kfsw2-72292-mzwbq-master-1 4/4 Running 0 37m
etcd-ci-ln-b6kfsw2-72292-mzwbq-master-2 4/4 Running 0 41m
etcd-guard-ci-ln-b6kfsw2-72292-mzwbq-master-0 1/1 Running 0 51m
etcd-guard-ci-ln-b6kfsw2-72292-mzwbq-master-1 1/1 Running 0 49m
etcd-guard-ci-ln-b6kfsw2-72292-mzwbq-master-2 1/1 Running 0 54m
installer-5-ci-ln-b6kfsw2-72292-mzwbq-master-1 0/1 Completed 0 51m
installer-7-ci-ln-b6kfsw2-72292-mzwbq-master-0 0/1 Completed 0 46m
installer-7-ci-ln-b6kfsw2-72292-mzwbq-master-1 0/1 Completed 0 44m
installer-7-ci-ln-b6kfsw2-72292-mzwbq-master-2 0/1 Completed 0 49m
installer-8-ci-ln-b6kfsw2-72292-mzwbq-master-0 0/1 Completed 0 40m
installer-8-ci-ln-b6kfsw2-72292-mzwbq-master-1 0/1 Completed 0 38m
installer-8-ci-ln-b6kfsw2-72292-mzwbq-master-2 0/1 Completed 0 42m
revision-pruner-7-ci-ln-b6kfsw2-72292-mzwbq-master-0 0/1 Completed 0 43m
revision-pruner-7-ci-ln-b6kfsw2-72292-mzwbq-master-1 0/1 Completed 0 43m
revision-pruner-7-ci-ln-b6kfsw2-72292-mzwbq-master-2 0/1 Completed 0 43m
revision-pruner-8-ci-ln-b6kfsw2-72292-mzwbq-master-0 0/1 Completed 0 42m
revision-pruner-8-ci-ln-b6kfsw2-72292-mzwbq-master-1 0/1 Completed 0 42m
revision-pruner-8-ci-ln-b6kfsw2-72292-mzwbq-master-2 0/1 Completed 0 42m
通过输入以下命令验证 etcd pod 的磁盘配额值是否已更新
$ oc describe -n openshift-etcd pod/<etcd_podname> | grep "ETCD_QUOTA_BACKEND_BYTES"
该值可能未从默认值 8
更改。
ETCD_QUOTA_BACKEND_BYTES: 8589934592
虽然您设置的值是 GiB 为单位的整数,但输出中显示的值已转换为字节。 |
如果您在尝试增加 etcd 的数据库大小时遇到问题,以下故障排除步骤可能会有所帮助。
如果您指定的值小于 8
,则会看到以下错误消息
$ oc patch etcd/cluster --type=merge -p '{"spec": {"backendQuotaGiB": 5}}'
The Etcd "cluster" is invalid:
* spec.backendQuotaGiB: Invalid value: 5: spec.backendQuotaGiB in body should be greater than or equal to 8
* spec.backendQuotaGiB: Invalid value: "integer": etcd backendQuotaGiB may not be decreased
要解决此问题,请指定 8
和 32
之间的整数。
如果您指定的值大于 32
,则会看到以下错误消息
$ oc patch etcd/cluster --type=merge -p '{"spec": {"backendQuotaGiB": 64}}'
The Etcd "cluster" is invalid: spec.backendQuotaGiB: Invalid value: 64: spec.backendQuotaGiB in body should be less than or equal to 32
要解决此问题,请指定 8
和 32
之间的整数。
如果将值设置为 8
和 32
之间的有效值,则无法减小该值。否则,您会看到一条错误消息。
通过输入以下命令查看当前值
$ oc describe etcd/cluster | grep "Backend Quota"
Backend Quota Gi B: 10
通过输入以下命令减小磁盘配额值
$ oc patch etcd/cluster --type=merge -p '{"spec": {"backendQuotaGiB": 8}}'
The Etcd "cluster" is invalid: spec.backendQuotaGiB: Invalid value: "integer": etcd backendQuotaGiB may not be decreased
要解决此问题,请指定大于 10
的整数。