当前位置: 首页 > news >正文

OCP中的OCS operator介绍及应用示例

一、OCS operator介绍

Red Hat OpenShift Container Platform(OCP4.8版之前,包含4.8 中,OCS Operator(OpenShift Container Storage Operator) 是用于在 OpenShift 集群中部署、配置和管理 OpenShift Container Storage(OCS) 的核心组件。

OCS 是 Red Hat 推出的一个 软件定义存储(SDS)解决方案,其核心基于 Ceph 构建,为 Kubernetes 工作负载提供持久存储(块、文件、对象存储),并可用于集群内部的多种使用场景,如:

  • 容器持久卷(PV)存储;

  • 内部对象存储(如为 AI/ML 或 S3 接口使用);

  • 镜像仓库存储(例如 OpenShift 内置的镜像仓库);

  • 日志、监控存储(如 Prometheus 数据); 

1、OCS Operator 的作用

OCS Operator 是一个 Operator Framework 应用,核心职责包括:

  1. 部署 OCS 所需的存储组件

    • 部署并管理 Ceph 的核心服务组件(如 rook-ceph-monrook-ceph-osdrook-ceph-mgr 等);

    • 部署 NooBaa(对象存储服务);

    • 部署 StorageClass 供 PVC 动态创建使用。

  2. 管理生命周期

    • 自动执行升级、修补、安全加固;

    • 自动扩容 Ceph 存储池;

    • 故障自愈和监控。

  3. 集成 Kubernetes 存储资源对象

    • 创建 StorageCluster、CephCluster、ObjectBucketClaim 等自定义资源(CR);

    • 支持动态卷调度、存储池自动管理;

    • 提供标准 CSI 接口(块存储、文件存储、对象存储); 

2、关键组件关系图

+-------------------------------+
|         OCS Operator         |
+-------------------------------+|   |            |   |↓   ↓            ↓   ↓
+-----------+   +---------------+
| Rook-Ceph |   |     NooBaa     |   <- 提供对象存储(S3接口)
+-----------+   +---------------+|↓
+----------------------+
| Ceph Cluster         |
| - MON / MGR / OSD    |   <- 支持块、文件存储
+----------------------+

3、部署流程简要说明

  1. 安装 Operator

    • 在 OpenShift 的 OperatorHub 中安装 OCS Operator;

    • Operator 安装后自动安装 Rook-Ceph 和 NooBaa Operator。

  2. 创建 StorageCluster 资源

    • StorageCluster 是 OCS 的顶级 CR,定义了整个存储集群的配置;

    • 你可以指定使用哪些节点、磁盘、存储类型(Internal、External)等。

  3. 自动部署存储集群

    • OCS Operator 基于 StorageCluster 自动创建 Rook-Ceph 集群、存储池等。 

4、常见的资源类型(CR)

  • StorageCluster:定义整个 OCS 集群;

  • CephCluster:由 Rook 创建,定义 Ceph 配置;

  • CephBlockPoolCephFilesystemObjectBucketClaim:分别管理块存储、文件系统和对象存储;

  • StorageClass:Kubernetes 中定义 PV 的接口资源。 

5、使用场景举例

  • 应用数据库(MySQL/PostgreSQL)的 PVC 存储;

  • 部署 AI/ML 任务,使用 OCS 提供的对象存储(S3)上传/读取模型;

  • OpenShift Logging / Monitoring 的数据存储;

  • 为 Jenkins 提供持久化数据支持。 

如果你已经在使用 OCP,并希望搭建自定义存储系统,OCS 是一个企业级的高可用存储解决方案,由 Operator 管理,可深度集成 OpenShift 的生态。

二、OCS Operator 的实际部署 YAML 示例

下面是一个完整的 OpenShift Container Storage(OCS) Operator 安装与配置对象存储(S3 Bucket)的示例流程,包括:

  1. 安装 OCS Operator(通过 Web 控制台或 CLI)

  2. 创建 StorageCluster 资源

  3. 创建对象存储(NooBaa Bucket)并获取 S3 凭据 

1、安装 OCS Operator

可以通过 OpenShift Console 安装(OperatorHub),也可以用 CLI 安装:

1. 创建 OperatorGroup 和 Subscription

# ocs-operator-subscription.yaml
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:name: ocs-operatorgroupnamespace: openshift-storage
spec:targetNamespaces:- openshift-storage
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:name: ocs-subscriptionnamespace: openshift-storage
spec:channel: stable-4.12  # 根据你的 OCP 版本选name: ocs-operatorsource: redhat-operatorssourceNamespace: openshift-marketplace
oc create namespace openshift-storage
oc apply -f ocs-operator-subscription.yaml

 等待几分钟,直到 OCS Operator 安装完成。

2、创建 StorageCluster(本地集群)

# storagecluster.yaml
apiVersion: ocs.openshift.io/v1
kind: StorageCluster
metadata:name: ocs-storageclusternamespace: openshift-storage
spec:manageNodes: falsemonDataDirHostPath: /var/lib/rookstorageDeviceSets:- count: 1dataPVCTemplate:spec:accessModes:- ReadWriteOnceresources:requests:storage: 512GistorageClassName: gp2  # 替换为你的默认 StorageClassvolumeMode: Blockname: ocs-devicesetportable: truereplica: 3resources: {}externalStorage: false
oc apply -f storagecluster.yaml

等待 StorageCluster 状态变为 Ready,表示 Ceph + NooBaa 正常运行。

3、创建对象存储 Bucket(S3 接口)

1. 创建 ObjectBucketClaim(OBC)

# s3-bucket-claim.yaml
apiVersion: objectbucket.io/v1alpha1
kind: ObjectBucketClaim
metadata:name: my-s3-bucketnamespace: openshift-storage
spec:generateBucketName: mybucket-storageClassName: openshift-storage.noobaa.io
oc apply -f s3-bucket-claim.yaml

这将自动创建:

  • 一个 S3 Bucket(在 NooBaa 中);

  • 一个 Secret(包含 S3 access_key、secret_key);

  • 一个 ConfigMap(包含 endpoint 等信息)。

2. 查看访问凭据

# 获取 Secret 名称
SECRET=$(oc get obc -n openshift-storage my-s3-bucket -o jsonpath='{.spec.secretName}')# 查看访问信息
oc get secret -n openshift-storage $SECRET -o yaml

 会看到内容类似:

data:AWS_ACCESS_KEY_ID: BASE64ENCODEDAWS_SECRET_ACCESS_KEY: BASE64ENCODEDBUCKET_HOST: ...BUCKET_NAME: ...BUCKET_PORT: "443"

base64 -d 解码即可使用。

3. 使用 S3 工具访问 Bucket(示例:s3cmd)

# .s3cfg 示例
[default]
access_key = <access-key>
secret_key = <secret-key>
host_base = <bucket-host>
host_bucket = <bucket-host>
use_https = True
signature_v2 = False
s3cmd ls  # 查看 bucket
s3cmd put file.txt s3://mybucket-xxxx/

三、OCS提供PV给数据库使用

下面介绍如何使用 OpenShift Container Storage(OCS)提供的 Persistent Volume(PV) 为数据库(例如 PostgreSQL、MySQL)等提供持久化存储。

OCS 会自动创建多个 StorageClass,这些 StorageClass 通过 Ceph 提供不同类型的存储接口:

1、OCS 默认提供的 StorageClass 类型

部署好 OCS 后,系统会自动创建以下 StorageClass:

StorageClass 名称类型描述
ocs-storagecluster-ceph-rbdBlock 存储适合数据库、缓存等高 IOPS 应用
ocs-storagecluster-cephfs文件存储适合共享访问,如 CI/CD 构建产物
ocs-storagecluster-ceph-rgw对象存储用于 OBC,非 PVC 直接使用

对于数据库,我们一般选择 ocs-storagecluster-ceph-rbd(块存储)

2、创建数据库 PVC(PostgreSQL 示例)

# postgresql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: pgdatanamespace: myapp
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: ocs-storagecluster-ceph-rbd

3 、部署 PostgreSQL(StatefulSet 示例)

# postgresql-deployment.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: postgresnamespace: myapp
spec:serviceName: "postgres"replicas: 1selector:matchLabels:app: postgrestemplate:metadata:labels:app: postgresspec:containers:- name: postgresimage: postgres:15ports:- containerPort: 5432env:- name: POSTGRES_DBvalue: mydb- name: POSTGRES_USERvalue: admin- name: POSTGRES_PASSWORDvalue: secretvolumeMounts:- name: pgdatamountPath: /var/lib/postgresql/datavolumeClaimTemplates:- metadata:name: pgdataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 10GistorageClassName: ocs-storagecluster-ceph-rbd

4、部署并验证

oc new-project myapp
oc apply -f postgresql-deployment.yaml

 然后验证 PVC 是否绑定成功:

oc get pvc -n myapp

输出应该类似:

NAME     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                     AGE
pgdata   Bound    pvc-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx   10Gi       RWO            ocs-storagecluster-ceph-rbd      1m

5、说明

  • OCS 使用的 Ceph RBD 提供高性能、可扩展的块存储,非常适合数据库使用;

  • 自动支持故障恢复,节点/Pod 迁移时可自动重挂载;

  • 支持加密、QoS 配置等高级功能(可通过 StorageClass 参数配置); 

如果使用 Helm Chart 部署数据库(如 Bitnami PostgreSQL、MySQL),只需在 values.yaml 中将 storageClass 设置为:

primary:persistence:enabled: truestorageClass: ocs-storagecluster-ceph-rbdsize: 10Gi

四、MySQL示例及设置备份与还原机制

1、使用 OCS 的 PVC 部署 MySQL 示例(StatefulSet)

我们使用 OCS 提供的 块存储(RBD) 来存储 MySQL 数据。

1. 创建命名空间

oc new-project mysql-ocs

2. 创建 MySQL PVC + StatefulSet

# mysql-ocs.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: mysqlnamespace: mysql-ocs
spec:serviceName: "mysql"replicas: 1selector:matchLabels:app: mysqltemplate:metadata:labels:app: mysqlspec:containers:- name: mysqlimage: mysql:8.0env:- name: MYSQL_ROOT_PASSWORDvalue: my-secret-pw- name: MYSQL_DATABASEvalue: mydb- name: MYSQL_USERvalue: myuser- name: MYSQL_PASSWORDvalue: mypassports:- containerPort: 3306name: mysqlvolumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumeClaimTemplates:- metadata:name: mysql-dataspec:accessModes: ["ReadWriteOnce"]resources:requests:storage: 10GistorageClassName: ocs-storagecluster-ceph-rbd
oc apply -f mysql-ocs.yaml

创建完成后可通过 port-forward 或 Service 暴露端口连接数据库:

oc port-forward statefulset/mysql 3306:3306 -n mysql-ocs

2、MySQL 备份与还原机制(结合 OCS 对象存储)

我们可以用 mysqldump 将数据库导出,然后将其上传到 OCS 提供的 S3 对象存储(NooBaa)中做备份。

1. 创建 ObjectBucketClaim(如之前的示例)

# mysql-backup-obc.yaml
apiVersion: objectbucket.io/v1alpha1
kind: ObjectBucketClaim
metadata:name: mysql-backupnamespace: mysql-ocs
spec:generateBucketName: mysql-backup-storageClassName: openshift-storage.noobaa.io
oc apply -f mysql-backup-obc.yaml

查看并获取访问信息:

SECRET=$(oc get obc mysql-backup -o jsonpath='{.spec.secretName}')
oc get secret $SECRET -n mysql-ocs -o yaml

2. 使用备份脚本上传 MySQL Dump 到对象存储

假设你已经用 mysqldump 导出了一个 mydb.sql 文件:

mysqldump -h 127.0.0.1 -P 3306 -u root -p mydb > mydb.sql

 安装并配置 MinIO Client(mc)或 AWS CLI:

# 安装 awscli(如未安装)
pip install awscli# 配置访问对象存储(用 OBC Secret 中的内容)
aws configure --profile noobaa
AWS Access Key ID: <解码后的 access_key>
AWS Secret Access Key: <解码后的 secret_key>
Default region: us-east-1
Default output: json

上传 SQL 文件:

aws --endpoint-url https://<BUCKET_HOST> --profile noobaa s3 cp mydb.sql s3://mysql-backup-xxxx/

3. 从 S3 恢复备份并导入数据库

# 下载备份
aws --endpoint-url https://<BUCKET_HOST> --profile noobaa s3 cp s3://mysql-backup-xxxx/mydb.sql .# 导入
mysql -h 127.0.0.1 -P 3306 -u root -p mydb < mydb.sql

五、自动定时备份任务(CronJob + S3上传) 示例

1、目标

  • 定时运行备份任务(比如每天凌晨 1 点)

  • 使用 mysqldump 导出数据库

  • 自动上传到 OCS 的对象存储(S3 兼容) 

2、准备工作

1. 获取对象存储的访问凭据(来自 OBC)

假设你已经有了如下 Secret:

oc get secret mysql-backup -n mysql-ocs -o yaml

需要:

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • BUCKET_HOST

  • BUCKET_NAME

3、创建备份 CronJob

# mysql-backup-cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:name: mysql-backupnamespace: mysql-ocs
spec:schedule: "0 1 * * *"  # 每天凌晨1点jobTemplate:spec:template:spec:containers:- name: mysql-backupimage: bitnami/mysql:8.0env:- name: MYSQL_ROOT_PASSWORDvalue: my-secret-pw- name: AWS_ACCESS_KEY_IDvalueFrom:secretKeyRef:name: mysql-backupkey: AWS_ACCESS_KEY_ID- name: AWS_SECRET_ACCESS_KEYvalueFrom:secretKeyRef:name: mysql-backupkey: AWS_SECRET_ACCESS_KEY- name: BUCKET_HOSTvalueFrom:secretKeyRef:name: mysql-backupkey: BUCKET_HOST- name: BUCKET_NAMEvalueFrom:secretKeyRef:name: mysql-backupkey: BUCKET_NAMEcommand:- /bin/sh- -c- |apt update && apt install -y awscliTIMESTAMP=$(date +%F-%H%M)mysqldump -h mysql -uroot -p$MYSQL_ROOT_PASSWORD mydb > /tmp/mydb-$TIMESTAMP.sqlaws --endpoint-url https://$BUCKET_HOST s3 cp /tmp/mydb-$TIMESTAMP.sql s3://$BUCKET_NAME/restartPolicy: OnFailure

4、注意事项

1. 修改连接信息:

  • -h mysql:应为数据库服务名称;

  • mydb:要导出的数据库名;

  • my-secret-pw:应与 MySQL 实际密码一致;

  • 如果密码保存在 Secret 中,也可以使用 valueFrom 从 Secret 引用;

2. 安装 awscli:

我们使用 bitnami/mysql 镜像,并在脚本中安装 awscli。为了优化,你也可以:

  • 用自定义镜像提前集成 awscli;

  • 挂载 PVC 临时存储备份文件(目前是在容器临时目录)。 

5、部署 CronJob

oc apply -f mysql-backup-cronjob.yaml

查看执行记录:

oc get cronjob -n mysql-ocs
oc get jobs -n mysql-ocs
oc logs job/<job-name> -n mysql-ocs

6、还原数据(人工触发)

可手动下载:

aws --endpoint-url https://<BUCKET_HOST> --profile noobaa s3 cp s3://mysql-backup-xxxx/mydb-2025-04-10-0100.sql .
mysql -h 127.0.0.1 -u root -p mydb < mydb-2025-04-10-0100.sql

 六、增强版MySQL 自动备份系统

1、功能增强项

  1. 多数据库备份:支持多个数据库定时导出;

  2. 历史版本管理:备份文件带时间戳,保留多个历史版本;

  3. 上传对象存储:上传到 OCS 的 NooBaa(S3 兼容);

  4. Helm Chart 封装:可参数化部署,便于多项目复用;

  5. 可选支持 PVC 缓存临时备份文件

  6. 支持环境隔离、Secret 管理、资源限制配置等企业级部署需求。 

2、文件结构规划

mysql-backup-chart/
├── charts/                    # 子 chart(空)
├── templates/
│   ├── cronjob.yaml           # 核心定时任务
│   ├── secret.yaml            # 存储访问密钥(可选)
│   └── _helpers.tpl           # 模板函数(Helm 专用)
├── values.yaml                # 参数配置(如数据库列表、时间间隔等)
├── Chart.yaml                 # Helm Chart 元数据
└── README.md                  # 使用说明

3、最终成果(Helm Chart)

  • 支持备份数据库:qxdbgztz

  • 每天定时备份,文件自动加上时间戳(如 qxdb-2025-04-10.sql

  • 自动上传到指定 OCS(NooBaa)桶(使用固定前缀)

  • 自动清理 7 天前的备份(S3上删除)

  • 使用自定义镜像(内置 awscli, mysqldump) 

现在将分步输出文件:

步骤 1:values.yaml(用户参数配置)

schedule: "0 1 * * *"  # 每天1点mysql:host: mysqlport: 3306rootPassword: "my-secret-pw"databases:- qxdb- gztzaws:endpoint: https://s3-openshift.noobaa.svcbucket: mysql-backup-prodaccessKey: YOUR_ACCESS_KEYsecretKey: YOUR_SECRET_KEYregion: us-east-1backup:retentionDays: 7image: your-repo/mysql-backup:latesttempDir: /tmp/backups

步骤 2:自定义备份镜像(Dockerfile)

FROM bitnami/mysql:8.0USER rootRUN apt update && apt install -y awscli cron && rm -rf /var/lib/apt/lists/*ENTRYPOINT [ "/bin/bash" ]

 可以构建这个镜像并推送到自己的仓库:

docker build -t your-repo/mysql-backup:latest .
docker push your-repo/mysql-backup:latest

步骤 3:templates/cronjob.yaml

apiVersion: batch/v1
kind: CronJob
metadata:name: {{ include "mysql-backup.fullname" . }}
spec:schedule: "{{ .Values.schedule }}"jobTemplate:spec:template:spec:containers:- name: mysql-backupimage: {{ .Values.backup.image }}env:- name: MYSQL_ROOT_PASSWORDvalue: {{ .Values.mysql.rootPassword }}- name: AWS_ACCESS_KEY_IDvalue: {{ .Values.aws.accessKey }}- name: AWS_SECRET_ACCESS_KEYvalue: {{ .Values.aws.secretKey }}- name: AWS_DEFAULT_REGIONvalue: {{ .Values.aws.region }}command:- /bin/bash- -c- |mkdir -p {{ .Values.backup.tempDir }}for DB in {{ join " " .Values.mysql.databases }}; doFNAME="$DB-$(date +%F-%H%M).sql"mysqldump -h {{ .Values.mysql.host }} -P {{ .Values.mysql.port }} -uroot -p$MYSQL_ROOT_PASSWORD $DB > {{ .Values.backup.tempDir }}/$FNAMEaws --endpoint-url {{ .Values.aws.endpoint }} s3 cp {{ .Values.backup.tempDir }}/$FNAME s3://{{ .Values.aws.bucket }}/done# 自动清理 7 天前备份aws --endpoint-url {{ .Values.aws.endpoint }} s3 ls s3://{{ .Values.aws.bucket }}/ | while read -r line; doFILE_DATE=$(echo $line | awk '{print $1}')FILE_NAME=$(echo $line | awk '{print $4}')if [ -n "$FILE_NAME" ]; thenFILE_TIMESTAMP=$(date -d "$FILE_DATE" +%s)NOW=$(date +%s)AGE=$(( (NOW - FILE_TIMESTAMP) / 86400 ))if [ "$AGE" -ge {{ .Values.backup.retentionDays }} ]; thenecho "Deleting $FILE_NAME (age: $AGE days)"aws --endpoint-url {{ .Values.aws.endpoint }} s3 rm s3://{{ .Values.aws.bucket }}/$FILE_NAMEfifidonerestartPolicy: OnFailure

步骤 4:Chart 元数据 + 辅助模板

Chart.yaml

apiVersion: v2
name: mysql-backup
description: MySQL 自动备份 + OCS 上传 Helm Chart
version: 0.1.0

 templates/_helpers.tpl

{{- define "mysql-backup.fullname" -}}
{{- printf "%s-mysql-backup" .Release.Name -}}
{{- end -}}

步骤 5:README.md 说明(简略)

# MySQL 自动备份 Helm Chart## 功能
- 支持多个数据库
- 自动上传到 OCS (NooBaa)
- 支持自动清理历史版本## 安装```bash
helm install mysql-backup ./mysql-backup-chart -n mysql-ocs

卸载

helm uninstall mysql-backup -n mysql-ocs

七、 S3 SDK调用示例

使用 Python 的 boto3 SDK 调用 S3(兼容 OCS/NooBaa) 示例,可用于列出、上传、下载、删除对象。

1、环境准备

安装依赖:

pip install boto3

2 、配置连接参数(兼容 NooBaa)

import boto3
from botocore.client import Config# 配置参数(替换成你的实际值)
s3 = boto3.client('s3',aws_access_key_id='YOUR_ACCESS_KEY',aws_secret_access_key='YOUR_SECRET_KEY',endpoint_url='https://s3-openshift.noobaa.svc',  # NooBaa S3 endpointconfig=Config(signature_version='s3v4'),region_name='us-east-1'  # NooBaa 通常不限制区域
)

3、S3 操作示例

1. 列出 Bucket 中的文件

response = s3.list_objects_v2(Bucket='mysql-backup-prod')
for obj in response.get('Contents', []):print(obj['Key'], obj['LastModified'])

2. 上传文件到 S3

s3.upload_file('localfile.sql', 'mysql-backup-prod', 'qxdb-2025-04-10.sql')

3. 下载文件从 S3 

s3.download_file('mysql-backup-prod', 'qxdb-2025-04-10.sql', 'downloaded.sql')

4. 删除指定文件

s3.delete_object(Bucket='mysql-backup-prod', Key='qxdb-2025-04-01.sql')

5. 清理 7 天前的备份文件(自动计算) 

import datetimeseven_days_ago = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=7)response = s3.list_objects_v2(Bucket='mysql-backup-prod')
for obj in response.get('Contents', []):if obj['LastModified'] < seven_days_ago:print("Deleting:", obj['Key'])s3.delete_object(Bucket='mysql-backup-prod', Key=obj['Key'])

 这个脚本可以直接作为 自动清理脚本 运行在备份容器里或另一个维护 Job 中。

4、S3 自动清理任务(Python + CronJob)

1.镜像设计(附带 boto3 + python3)

可以基于以下 Dockerfile 构建清理用容器镜像:

FROM python:3.10-slimRUN pip install boto3COPY cleanup.py /app/cleanup.pyENTRYPOINT ["python", "/app/cleanup.py"]

2.Python 脚本 cleanup.py

import boto3
from botocore.client import Config
import datetime
import osaccess_key = os.getenv("AWS_ACCESS_KEY_ID")
secret_key = os.getenv("AWS_SECRET_ACCESS_KEY")
endpoint = os.getenv("S3_ENDPOINT")
region = os.getenv("AWS_REGION")
bucket = os.getenv("S3_BUCKET")
retention_days = int(os.getenv("RETENTION_DAYS", "7"))s3 = boto3.client('s3',aws_access_key_id=access_key,aws_secret_access_key=secret_key,endpoint_url=endpoint,config=Config(signature_version='s3v4'),region_name=region
)cutoff = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=retention_days)response = s3.list_objects_v2(Bucket=bucket)
for obj in response.get('Contents', []):if obj['LastModified'] < cutoff:print(f"Deleting {obj['Key']} (LastModified: {obj['LastModified']})")s3.delete_object(Bucket=bucket, Key=obj['Key'])

3.Helm Chart 中新增 CronJob(templates/s3-cleaner.yaml) 

apiVersion: batch/v1
kind: CronJob
metadata:name: {{ include "mysql-backup.fullname" . }}-s3cleaner
spec:schedule: "0 2 * * *"  # 每天凌晨2点执行jobTemplate:spec:template:spec:containers:- name: s3-cleanerimage: your-repo/s3-cleaner:latestenv:- name: AWS_ACCESS_KEY_IDvalue: {{ .Values.aws.accessKey }}- name: AWS_SECRET_ACCESS_KEYvalue: {{ .Values.aws.secretKey }}- name: AWS_REGIONvalue: {{ .Values.aws.region }}- name: S3_ENDPOINTvalue: {{ .Values.aws.endpoint }}- name: S3_BUCKETvalue: {{ .Values.aws.bucket }}- name: RETENTION_DAYSvalue: "{{ .Values.backup.retentionDays }}"restartPolicy: OnFailure

4.补充说明

需要:

  • 构建并推送清理镜像:

docker build -t your-repo/s3-cleaner:latest .
docker push your-repo/s3-cleaner:latest
  • values.yaml 中补充:
cleanup:enabled: trueimage: your-repo/s3-cleaner:latest
  •  在模板中添加 if .Values.cleanup.enabled 判断逻辑(可选)

相关文章:

  • 如何将 Vue-FastAPI-Admin 项目的数据库从 SQLite 切换到 MySQL?
  • 量子纠缠物理本质、技术实现、应用场景及前沿研究
  • Web三漏洞学习(其一:文件上传漏洞)
  • 25.4.15学习总结
  • 代码随想录第18天:二叉树
  • 04-Seata 深度解析:从分布式事务原理到 Seata 实战落地
  • Arduino+ESP826601s模块连接阿里云并实现温湿度数据上报
  • 【leetcode hot 100 72】编辑距离
  • MCP认证难题破解指南
  • 单片机非耦合业务逻辑框架
  • Sentinel源码—2.Context和处理链的初始化二
  • (51单片机)LCD显示日期时间时钟(DS1302时钟模块教学)(LCD1602教程)
  • STM32提高篇: 以太网通讯
  • S06-Kep的跨通道传输
  • 二极管详解:特性参数、选型要点与分类
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——CAN、CAN FD测试 #FDCAN
  • Qt/C++学习系列之QTreeWidget的简单使用记录
  • IPD项目管理的“黄金三角“在2025年是否需要重构?
  • 基于RV1126开发板获取系统温度
  • WPS Office安卓版文档编辑功能与兼容性评测【高效编辑】
  • 庄语乐︱宋代历史是被“塑造”出来的吗?
  • 从孔雀尾巴到蒙娜丽莎,一个鸟类学博士眼中的“美”
  • “即买即退”扩容提质,上海静安推出离境退税2.0版新政
  • 匈牙利国会通过退出国际刑事法院的决定
  • 今年一季度全国城镇新增就业308万人,就业形势保持总体稳定
  • 当初没有珍惜巴特勒的热火,被横扫出局后才追悔莫及