[Workload]: object-storage
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 48/100
- Issue 类型
- 功能
- 描述清晰度
- 基本清楚
- 活跃度
- 冷清
- 技术栈
- aws, bash, go, kubernetes
- 领域
- cloud, devops, infrastructure
调研方向
首先将现有的磁盘工作负载与请求的 cloud-init 路径 /usr/local/bin/virtwork-object-storage.sh、/etc/systemd/system/virtwork-object-storage.service 和 /etc/virtwork/s3-credentials 进行比较。验证 warp mixed 命令、由 Secret 提供的凭据、必需的 endpoint 处理方式以及服务重启行为;当工作负载能够从 VM 持续执行 S3 操作且不暴露凭据时,即表示完成。
由索引模型根据 Issue 内容生成。
描述
Workload Name
object-storage
Workload Description
S3-compatible object storage workload that performs sustained PUT, GET, DELETE, and LIST operations against an S3-compatible endpoint. Produces continuous object lifecycle traffic — uploading objects of configurable sizes, reading them back, listing buckets, and deleting old objects — to stress object storage backends from inside a KubeVirt VM.
This fills a fundamentally different storage niche than the existing disk workload. The disk workload tests block storage via the CSI driver — fio issues read/write syscalls against a mounted filesystem backed by a PersistentVolume. object-storage tests the S3 API path — HTTP PUT/GET requests over the network to an object storage service. These are completely different data planes: different protocols (POSIX vs HTTP), different access patterns (random block I/O vs whole-object upload/download), different backend implementations, and different partner products.
The primary targets are OpenShift Data Foundation (ODF) with its Ceph-backed S3 (via RADOS Gateway), MinIO, and cloud storage gateway partners. ODF is a core Red Hat product and validating its S3 performance from VMs is a gap today.
Tooling and Packages
- Tool:
warp(MinIO's S3 performance benchmark) ors5cmd(fast S3 client) or AWS CLI (aws s3) - RPM packages: none —
warpands5cmdare single Go binaries; AWS CLI available viapip3 install awscli - systemd service command:
warp mixed --host=<endpoint> --access-key=<key> --secret-key=<secret> --bucket=virtwork-bench --duration=0 --obj.size=1MiB --concurrent=16--duration=0: run indefinitely--obj.size=1MiB: 1 MiB object size (configurable)--concurrent=16: 16 concurrent operationsmixedmode: 50% GET, 30% PUT, 10% DELETE, 10% LIST (default distribution)
- Configurable parameters:
s3-endpoint: S3-compatible endpoint URL (required — no default, must point to ODF/MinIO/external)s3-access-key/s3-secret-key: credentials (via Secret)s3-bucket: target bucket name (default:virtwork-bench)s3-object-size: object size (default:1MiB)s3-concurrency: concurrent operations (default: 16)s3-op-mix: operation distribution (default: mixed — 50% GET, 30% PUT, 10% DELETE, 10% LIST)
VM Count Model
Single VM (like cpu, memory, disk)
Required Resources
- Persistent storage (DataVolume)
- Kubernetes Service (for inter-VM communication)
- Kubernetes Secret (for credentials or config)
- Additional CPU/memory beyond defaults
- GPU or special device passthrough
The Secret holds S3 access key and secret key credentials. The S3 endpoint is typically a Kubernetes Service (e.g., rook-ceph-rgw-ocs-storagecluster-cephobjectstore.openshift-storage.svc.cluster.local) or an external URL.
Cloud-Init Details
write_files:
- path: /usr/local/bin/virtwork-object-storage.sh
permissions: '0755'
content: |
#!/bin/bash
set -euo pipefail
S3_ENDPOINT="${S3_ENDPOINT:?S3_ENDPOINT is required}"
S3_ACCESS_KEY="${S3_ACCESS_KEY:?S3_ACCESS_KEY is required}"
S3_SECRET_KEY="${S3_SECRET_KEY:?S3_SECRET_KEY is required}"
S3_BUCKET="${S3_BUCKET:-virtwork-bench}"
S3_OBJ_SIZE="${S3_OBJ_SIZE:-1MiB}"
S3_CONCURRENCY="${S3_CONCURRENCY:-16}"
exec /usr/local/bin/warp mixed \
--host="$S3_ENDPOINT" \
--access-key="$S3_ACCESS_KEY" \
--secret-key="$S3_SECRET_KEY" \
--bucket="$S3_BUCKET" \
--obj.size="$S3_OBJ_SIZE" \
--concurrent="$S3_CONCURRENCY" \
--duration=0 \
--autoterm \
--noclear
- path: /etc/systemd/system/virtwork-object-storage.service
content: |
[Unit]
Description=Virtwork S3 object storage workload
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
EnvironmentFile=/etc/virtwork/s3-credentials
ExecStart=/usr/local/bin/virtwork-object-storage.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
- path: /etc/virtwork/s3-credentials
permissions: '0600'
content: |
S3_ENDPOINT=<from-config>
S3_ACCESS_KEY=<from-secret>
S3_SECRET_KEY=<from-secret>
S3_BUCKET=virtwork-bench
S3_OBJ_SIZE=1MiB
S3_CONCURRENCY=16
runcmd:
- curl -Lo /usr/local/bin/warp https://github.com/minio/warp/releases/download/v1.1.4/warp_Linux_x86_64
- chmod +x /usr/local/bin/warp
- systemctl enable --now virtwork-object-storage.service
Use Case
- ODF (OpenShift Data Foundation) validation: ODF provides S3-compatible object storage via Ceph RADOS Gateway. Validating S3 throughput and latency from VMs is a gap — most ODF testing comes from pods. VMs accessing ODF's S3 endpoint exercise a different network path (VM pod network → Service → RGW pod) and are the access pattern that enterprise customers migrating from VMware will use.
- MinIO partners: MinIO is widely deployed on OpenShift as an alternative object store. Partners need sustained S3 traffic to validate throughput, multi-part upload handling, and consistency guarantees under load from VMs.
- Cloud storage gateway partners (NetApp StorageGRID, Scality, Cloudian): These products provide S3-compatible interfaces to enterprise storage. Partners need to validate that their gateway handles sustained object operations from VM-based applications — the typical deployment pattern when migrating legacy applications that use S3 libraries.
- Backup/DR partners: Many backup products (Velero, Cohesity, Commvault) write backup data to S3-compatible storage. This workload simulates the I/O pattern of a backup job — large sequential PUTs followed by periodic GETs for restore validation and DELETEs for retention policy enforcement.
- Data pipeline partners: Applications running in VMs that produce data (logs, telemetry, ETL output) often write to object storage. Partners building data pipeline products need to validate that their S3 ingestion handles sustained PUT traffic from VM-based producers.
Additional Context
- Endpoint configuration is required: Unlike other workloads that are self-contained,
object-storagerequires an external S3 endpoint. The implementation should fail fast with a clear error ifs3-endpointis not configured. Consider detecting ODF's default RGW endpoint automatically if ODF is installed on the cluster. - warp vs alternatives:
warp(MinIO): purpose-built S3 benchmark, single binary, excellent statistics output, supports mixed workloads. Preferred for initial implementation.s5cmd: fast S3 client, good for simple PUT/GET loops, less configurable workload profiles.- AWS CLI: universally available but slower and less suitable for sustained benchmarking.
cosbench(Intel): comprehensive but heavyweight (Java, requires orchestrator). Overkill for a VM-based workload.
- Bucket lifecycle: The
--noclearflag tells warp not to clean up the bucket on exit. Combined withRestart=always, this means objects accumulate across service restarts. The--autotermflag enables automatic benchmarking termination detection. For indefinite operation, the mixed mode's DELETE operations naturally reclaim space — but monitor bucket size for very long runs. - Object size spectrum: The default 1MiB is a balanced choice. For backup/DR validation, use larger objects (64MiB-1GiB). For metadata-heavy workloads (many small files), use smaller objects (4KiB-64KiB). Configurable via
s3-object-size. - Multi-VM scaling: At
--vm-count 5with 16 concurrent ops each, this produces 80 concurrent S3 operations — enough to stress most object storage deployments. The operations are naturally distributed across the object namespace (warp uses random object keys), so multiple VMs don't create hot-spot contention. - Credential management: S3 credentials should be injected via a Kubernetes Secret, written to
/etc/virtwork/s3-credentialsas anEnvironmentFile, and never logged. This follows the same pattern as SSH credentials in the existing workloads.
- 主要语言
- Go
- 星标
- 0
- 派生
- 0
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 没有贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
opdev/virtwork 的其他 Issue
-
good first issue needs-triage size/L workload-request workload/variant
难度 5/5 一周以上 新手友好度 45/100
-
needs-triage priority/awaiting-more-evidence size/XL workload-request workload/tier-2
难度 5/5 一周以上 新手友好度 48/100
-
good first issue needs-triage size/XL workload-request workload/variant
难度 5/5 一周以上 新手友好度 35/100
-
needs-triage size/L workload-request workload/tier-3
难度 4/5 3-5 天 新手友好度 48/100
-
needs-triage size/XXL workload-request workload/tier-3
难度 5/5 一周以上 新手友好度 35/100
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 84/100
维护者通常 1 天内回复
-
Mend: dependency security vulnerability
难度 2/5 1-3 小时 新手友好度 72/100
kube-tarian/sigrun#202 ·
-
good first issue help wanted
难度 2/5 1-3 小时 新手友好度 82/100
eugenioenko/ttt#1085 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 62/100
fullsend-ai/fullsend#8688 · 1 条评论 ·
维护者通常 1 天内回复
-
question raised-by:verifier
难度 2/5 1-3 小时 新手友好度 72/100
medici-finance/assay#4013 ·
维护者通常 1 天内回复