[Workload]: object-storage
まだ誰も着手していません。
評価
- 難易度
- 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 によって提供される認証情報、必須エンドポイントの処理、サービス再起動時の動作を確認します。認証情報を公開せずに、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 ファイルあり
- プルリクエストのテンプレートなし
- コントリビューションガイドなし
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
opdev/virtwork のほかの issue
-
good first issue needs-triage size/L workload-request workload/variant
難易度 5/5 1週間以上 初心者へのやさしさ 45/100
-
needs-triage priority/awaiting-more-evidence size/XL workload-request workload/tier-2
難易度 5/5 1週間以上 初心者へのやさしさ 48/100
-
good first issue needs-triage size/XL workload-request workload/variant
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
-
needs-triage size/L workload-request workload/tier-3
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
-
[Workload]: windowsオープンneeds-triage size/XXL workload-request workload/tier-3
難易度 5/5 1週間以上 初心者へのやさしさ 35/100
似ている issue
-
native
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
prime-radiant-inc/evener#4839 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
メンテナーはふだん 1 日以内に返信
-
難易度 1/5 1時間未満 初心者へのやさしさ 85/100
521xueweihan/HelloGitHub#4073 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
goharbor/terraform-provider-harbor#655 · コメント 1 件 ·