关于 cap-operator
通过 CAP Operator 在 Kubernetes 上管理多租户 SAP Cloud Application Programming Model 应用的技能,涵盖生命周期操作、资源安全规则、故障排查,以及分阶段的 Helm 图表生成与部署流程。
主要功能
- 01管理 CAP 应用生命周期
- 02配置域名和服务暴露
- 03通过新资源升级版本
- 04查看资源状态并排查问题
- 05按部署关卡生成 Helm 图表
适用场景
- 01部署新的 CAP 应用
- 02升级各租户的应用版本
- 03检查租户和订阅状态
- 04诊断 Operator 与应用问题
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sap/ cap-operator --skill cap-operator安装后在 Claude Code 中输入/cap-operator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/cap-operator-plugin.mdcredential-rotation.mddeploy.mddomain.mdservice-exposure.mdtroubleshooting.mdupgrade.md详细介绍
CAP Operator 技能
通过 CAP Operator 控制器管理 Kubernetes 上多租户 SAP Cloud Application Programming Model(CAP)应用的生命周期。
**响应规则:**回答任何问题时,始终包含相关文档页面的链接:https://sap.github.io/cap-operator/docs/。根据主题选择最具体的页面(资源参考、使用指南、故障排除、配置等)。
完整文档和 API 参考:website/content/en/docs/ | https://sap.github.io/cap-operator/docs/
自定义资源
| 资源 | 作用域 | 用途 |
|---|---|---|
CAPApplication | 命名空间级 | 高层级应用:BTP 服务、域引用、提供方子账户 |
CAPApplicationVersion | 命名空间级 | 不可变版本:镜像、工作负载、租户操作步骤 |
CAPTenant | 命名空间级 | 已订阅的使用方租户 — 仅由控制器管理 |
CAPTenantOperation | 命名空间级 | 协调预配、升级和取消预配 — 自动创建 |
Subscription | 命名空间级 | 表示一个使用方订阅 — 由订阅服务器创建 |
SubscriptionProvider | 命名空间级 | 缓存订阅凭据和依赖信息 — 由控制器自动创建 |
Domain | 命名空间级 | 一个应用的 Istio Gateway、TLS 和 DNS |
ClusterDomain | 集群级 | 供多个应用共享的域配置 |
重要规则:
CAPApplicationVersion创建后不可变。要升级,请创建一个语义版本号更高的新资源。- 绝不能手动创建或删除
Subscription— 它完全由订阅服务器根据 SaaS Provisioning 服务回调进行管理。 - 绝不能手动创建或删除
CAPTenant— 它由控制器作为Subscription的子资源创建。 CAPTenantOperation由控制器自动创建 — 请勿手动创建或删除。- 控制器会为每个
CAPApplication自动创建SubscriptionProvider并使其保持同步 — 请勿手动创建、修改或删除。 - 切勿手动移除 CAP Operator 资源的 finalizer。
CAPApplication.spec.provider已弃用。它过去会导致控制器自动创建一个提供方CAPTenant,但此行为现已移除。现在,所有租户(包括提供方)都必须显式订阅。如果kubectl get captenant -n <namespace>返回空结果,对于没有活跃订阅的应用,这是预期行为。
常见操作
部署新应用
- 创建
Domain或ClusterDomain - 创建
CAPApplication(引用 BTP 服务和域) - 创建
CAPApplicationVersion(镜像和工作负载)
完整 YAML 示例请参阅部署参考。
升级到新版本
创建一个语义版本号更高的新 CAPApplicationVersion — 请勿编辑现有版本。
控制器会自动升级所有租户,并更新 Istio VirtualService 路由。
详情请参阅升级参考,以及 tenantOperations / contentJobs 配置。
检查状态
kubectl get capapplication,capapplicationversion,captenant,captenantoperation,subscription -n <namespace>
kubectl describe capapplication <name> -n <namespace>
kubectl get domain,clusterdomain -A
状态流转:
CAPApplicationVersion:Processing→Ready|ErrorCAPTenant:Provisioning→Ready|Upgrading→Ready|DeletingCAPTenantOperation:Processing→Completed|FailedSubscription:Processing→Ready|ProcessingError(可重试)|Error(终止)|Deleting
域管理
Domain— 命名空间范围,一个应用。ClusterDomain— 集群范围,可共享。- TLS 模式:
Simple(默认)、Mutual、OptionalMutual - DNS 模式:
None(默认)、Wildcard、Subdomain、Custom domainRefs中的第一个条目是主域。CAPApplication中的内嵌domains部分已在 v0.26.0 中移除;请改用domainRefs。
请参阅域参考。
服务暴露(与租户无关)
在 CAPApplicationVersion 中使用 serviceExposures,以固定子域名暴露工作负载,不受租户路由影响。路由应按具体程度从高到低排序。
请参阅服务暴露参考。
凭据轮换发布
在 CAPApplication 上设置 rolloutOnCredentialUpdate: true,当 BTP 服务凭据 Secret 发生更改时自动重启工作负载。使用滚动重启(零停机)。签发新凭据后,旧凭据至少应继续有效 24 小时。
请参阅凭据轮换参考。
版本清理(基于监控)
在 CAPApplication 上启用注解 sme.sap.com/enable-cleanup-monitoring: "true"。在工作负载的 monitoring 部分配置 deletionRules.expression(PromQL);当表达式的计算结果为 true 时,即可删除该版本。
请参阅版本监控(website/content/en/docs/usage/version-monitoring.md)。
关键注解
| 注解 | 资源 | 效果 |
|---|---|---|
sme.sap.com/enable-cleanup-monitoring: "true" | CAPApplication | 启用基于监控的版本清理 |
sme.sap.com/enable-version-affinity: "true" | CAPApplication | 在用户注销前将其保持在当前版本(实验性) |
sme.sap.com/logout-endpoint: "<path>" | CAPApplicationVersion | 为版本亲和性指定自定义注销路径 |
故障排除
常见症状及修复方法 — CAPApplicationVersion/CAPTenant 卡住、WaitingForSecrets、finalizer、@sap/cds-mtxs 安全上下文、Approuter 目标配置/超时问题、凭据注入、SAP HANA 连接错误以及控制器内存限制。
请参阅故障排除参考 | website/content/en/docs/troubleshoot/_index.md | https://sap.github.io/cap-operator/docs/troubleshoot/
控制器配置
通过控制器 Deployment 上的环境变量进行调整。关键变量:
| 变量 | 用途 |
|---|---|
CERT_MANAGER | gardener 或 cert-manager.io |
DNS_MANAGER | gardener 或 kubernetes |
MAX_CONCURRENT_RECONCILES_CAP_APPLICATION | CAPApplication 协调并发数 |
MAX_CONCURRENT_RECONCILES_CAP_APPLICATION_VERSION | CAPApplicationVersion 协调并发数 |
MAX_CONCURRENT_RECONCILES_CAP_TENANT | CAPTenant 协调并发数 |
MAX_CONCURRENT_RECONCILES_CAP_TENANT_OPERATION | CAPTenantOperation 协调并发数 |
MAX_CONCURRENT_RECONCILES_SUBSCRIPTION | Subscription 协调并发数 |
完整列表:website/content/en/docs/configuration/_index.md | https://sap.github.io/cap-operator/docs/configuration/
CAP Operator 插件(Helm Chart 生成)
@cap-js/cap-operator-plugin CDS 插件为 CAP 应用搭建 Helm chart 框架、生成运行时值,并构建最终可部署的 chart。
不要在调用技能时执行以下任何步骤。 只有用户明确要求生成 Helm chart 或部署应用时,才开始操作。仅加载此技能(例如通过 /cap-operator)不代表用户提出了请求 — 介绍此技能的功能并等待。
Chart 生成和部署是两个独立阶段,中间设有确认关卡 — 只创建 chart;由用户决定是否以及何时部署。
- 搭建 chart 框架。 检查是否存在有内容的 MTX sidecar 文件夹(
mtx/sidecar):存在 sidecar → 多租户 →--with-templates;没有 sidecar → 仅服务 →--with-service-only。 - 询问用户是否要部署。
- **仅在用户回答是之后,**收集运行时输入(
appName、capOperatorSubdomain、clusterDomain、providerSubaccountId),并生成runtime-values.yaml。 - 部署前先验证 — 传入
runtime-values.yaml运行helm lint,并确认没有缺少必需值。 - 部署 — 使用
helm upgrade -i。
更多关于插件用法和配置的详情,请参阅 CAP Operator 插件参考。