PayU platform, SRE, and release engineering for OpenShift and Kubernetes workloads, GitOps, Argo CD, Tekton, Kustomize, Helm, container hardening, networking, observability, reliability, disaster recovery, and FinOps. Use when designing, deploying, debugging, or reviewing infrastructure and delivery changes; verify third-party APIs and CLI behavior with Context7 first.
Make the smallest safe infrastructure change. Treat Git as the deployment
source of truth, prefer existing repository patterns and operators, and never
patch production directly when the same change belongs in GitOps.
Context7 documentation gate
Before writing or changing manifests, pipelines, charts, scripts, or commands
that use a third-party platform or tool:
Inspect the target overlay, installed operator/CRD, cluster version, and
repository configuration. Determine the exact version instead of guessing.
Resolve the library or product in Context7. Prefer the official,
high-reputation result, then query one concrete topic at a time.
Pin the query to the deployed version when indexed. Use the returned docs as
the source of truth for API fields, CLI flags, defaults, and behavior.
If the exact version is not indexed, state the fallback and verify against
the installed CRD, oc explain, kubectl explain, chart schema, or source
before editing.
Re-resolve after changing an operator, chart, Kubernetes, OpenShift, Argo
CD, Tekton, mesh, or observability version. Do not mix major-version APIs.
Resolve and query the relevant official sources for Kubernetes/OpenShift, Argo
CD/ApplicationSet, Tekton Pipelines/Triggers, Helm, Kustomize, Istio or Gateway
API, Strimzi, Vault/External Secrets, and observability operators. Context7 does
not replace inspection of PayU manifests or operator CRDs.
Repository map
Start at the actual path, not a copied example:
infrastructure/workloads/base/ shared workload manifests
infrastructure/workloads/overlays/payu-* dev, sit, uat, preprod, prod
infrastructure/platform/cicd/argocd/ Argo CD projects and applications
infrastructure/platform/cicd/tekton/ pipelines, tasks, runs, triggers
infrastructure/foundation/ namespaces and cluster foundation
infrastructure/platform/{security,mesh,data,observability}
Read the relevant kustomization.yaml, base resources, overlay patches, RBAC,
secrets references, and existing tests before changing a workload. Verify the
real namespace and resource name; do not infer them from the service name.
Delivery workflow
Use this sequence for changes that affect deployment:
Inventory dependencies, owners, blast radius, rollback, and required
approvals.
Edit the smallest base or overlay that owns the behavior. Keep environment
differences in overlays, not duplicated bases.
Render and statically validate manifests. Review the rendered diff.
Run server-side dry-run or oc diff against the target cluster when access
exists; otherwise report that cluster validation is pending.
Commit and promote through Argo CD. Wait for health, rollout, and smoke
checks at each environment.
Verify metrics, logs, events, probes, dependencies, and rollback readiness.
Never claim deployment success without command output or an Argo/cluster status.
Do not use oc edit, kubectl apply to bypass GitOps, setenforce 0, or
destructive cluster commands as a shortcut.
Kubernetes and OpenShift manifests
Use the API versions supported by the target cluster and resolved documentation.
For current Kubernetes APIs, prefer the stable forms such as:
apps/v1 for Deployments and StatefulSets;
networking.k8s.io/v1 for NetworkPolicy and Ingress;
policy/v1 for PodDisruptionBudget;
autoscaling/v2 for HorizontalPodAutoscaler;
tekton.dev/v1 for current Tekton Pipeline, Task, PipelineRun, and TaskRun
resources.
Do not carry forward deprecated v1beta1 resources without verifying the
installed operator. Validate OpenShift-specific resources against the cluster's
CRDs. Use Route, Gateway API, or Ingress according to the existing platform
standard; do not introduce a second ingress model for one workload.
Every workload should have, as applicable:
explicit CPU and memory requests/limits;
startup, readiness, and liveness probes with realistic thresholds;
a Service selecting the exact pod labels;
a PDB for replicated production workloads;
HPA only when requests, metrics, stabilization, and max capacity are defined;
NetworkPolicy with explicit DNS, ingress, and dependency egress;
stable app.kubernetes.io/* labels, owner, environment, version, and cost
attribution metadata.
Use native Kubernetes/OpenShift controllers for rollout, scaling, health, and
policy. Avoid shell loops or custom controllers for behavior the platform already
provides.
GitOps with Argo CD
Keep Application, ApplicationSet, AppProject, sync-wave, and policy manifests
under infrastructure/platform/cicd/argocd/.
Restrict each AppProject to approved source repositories and destination
clusters/namespaces. Avoid * in production permissions.
Use ApplicationSet templates with goTemplate: true and
goTemplateOptions: [missingkey=error] when templating is required.
Use generators that reflect the repository's environment layout; current PayU
overlays use payu-dev, payu-sit, payu-uat, payu-preprod, and
payu-prod.
Enable prune and selfHeal only with an explicit ownership decision. Keep
allowEmpty: false so a bad render cannot wipe an application.
Use sync waves or progressive sync for dependencies and environment
promotion. Gate production with a sync window, approval, or both.
Configure bounded retry backoff for transient sync failures. Do not retry
validation, authorization, or broken-manifest errors indefinitely.
Roll back by reverting the Git change or using the approved Argo rollback
flow. Record why the rollback happened and verify data compatibility.
For progressive delivery, use the installed Argo Rollouts or mesh/Gateway API
capability only after resolving its exact API and health-analysis behavior.
Tekton pipelines
Define pipelines and tasks under infrastructure/platform/cicd/tekton/ and use
the current tekton.dev/v1 API where the installed Tekton release supports it.
Use PipelineRun with pipelineRef, explicit parameters, named workspaces,
bounded timeouts/retries, and a least-privilege serviceAccountName.
Keep the supply-chain stages explicit and fail closed:
Pin task and step images by trusted digest or controlled immutable tag.
Run steps as non-root with bounded resources and no privilege escalation.
Pass credentials through Vault/External Secrets or Tekton-bound secrets; never
put tokens, kubeconfigs, or registry passwords in YAML or logs.
Use workspaces for source and artifacts; do not depend on an implicit shared
filesystem or deprecated PipelineResources.
Keep deployment credentials separate from build credentials and restrict RBAC
to the namespace and resources that the pipeline owns.
Use Tekton Triggers or Pipelines-as-Code only after verifying the installed
trigger API and webhook authentication configuration.
Images and container hardening
Build with the repository's UBI9/Podman pattern and preserve enough build context
for parent POMs, shared modules, and lockfiles. Prefer a multi-stage build and a
small UBI9 runtime image. Use pre-built artifacts only when the build has already
run the same tests and scans.
Require:
internal application port 8080 for PayU services;
immutable image tags matching the Git release tag, preferably referenced by
digest;
non-root execution (UID 1001 where the image and cluster policy support it;
otherwise use OpenShift's assigned UID range);
runAsNonRoot: true, allowPrivilegeEscalation: false, readOnlyRootFilesystem: true, seccompProfile.type: RuntimeDefault, and dropped ALL capabilities;
explicit writable emptyDir mounts only where the application needs /tmp or
another transient path;
OCI labels, provenance, SBOM, vulnerability scan, and image signature.
Use Kubernetes probes instead of relying on an image HEALTHCHECK. Match probe
paths and startup delays to the service. Do not install packages that already
exist in the selected UBI image; verify the image contents before adding a
healthcheck binary. Never weaken SELinux or add a privileged SCC to solve a file
permission problem—inspect the audit event, UID/GID, volume, and label first.
Kustomize and Helm
Use Kustomize for the repository's existing base/overlay layout. Render with the
same version used by CI and verify the output:
Use Helm only when an existing chart or platform contract requires it. Validate
Chart.yaml, values.schema.json, rendered templates, and environment values;
do not add Helm merely to template a few Kubernetes fields. Do not mix Helm and
Kustomize ownership of the same resource without a documented boundary.
Networking and security
Default to least-privilege NetworkPolicy. Allow only required ingress,
namespace traffic, DNS, mesh control-plane traffic, and named dependencies.
Use TLS at routes and strict mTLS/authorization policies when the installed
mesh supports them. Verify service accounts and principals instead of allowing
an entire namespace by label alone.
Store secrets in Vault, External Secrets, or the platform secret manager. Git
may contain references and encrypted material only when the repository policy
explicitly permits it.
Keep RBAC namespaced and minimal. Avoid cluster-admin in workloads,
pipelines, service accounts, and local development manifests.
Treat routes, webhooks, registries, admission policies, and operator
credentials as trust boundaries. Validate inputs and audit changes.
SRE, observability, and reliability
Define an SLI, SLO, owner, alert threshold, and runbook for each production
service. Instrument the existing platform stack for logs, metrics, traces, and
Kubernetes events; do not add a second telemetry system without a measured need.
Check:
availability, latency, error rate, saturation, queue lag, and dependency
health;
structured logs with correlation/request IDs and no secrets or PII;
alerts that page only on actionable symptoms and include a runbook link;
HPA, PDB, resource quotas, limit ranges, and capacity headroom;
rollout health, startup time, probe failures, crash loops, and OOM kills.
Run chaos and load tests only in approved non-production environments. Make the
test reversible, bound blast radius, and capture evidence. For financial flows,
verify no duplicate posting, event loss, or unsafe retry occurs during failure.
Disaster recovery and FinOps
Define RPO/RTO per dependency, backup ownership, replication mode, failover
steps, and data reconciliation. Test restore and failover on a schedule; a
multi-region diagram is not evidence of recoverability. Keep the primary/standby
mode of PostgreSQL, Kafka, Redis, and object storage explicit and verified.
Right-size requests and limits from observed usage, enforce quotas, and apply
owner/environment/cost-center labels. Use VPA recommendations or OpenCost data
before changing production resources; do not enable automatic eviction or
resource mutation without an availability review.
Release and rollback checklist
Git diff is limited to the owning base/overlay or platform component.
API versions and fields were verified with Context7 and the installed CRD.
Rendered manifests and schema/lint checks pass.
Image is immutable, scanned, signed, and tagged to the Git release.
Secrets, RBAC, NetworkPolicy, probes, resources, PDB, and HPA are covered.
Argo/Tekton permissions and production gates are explicit.
Smoke, contract, migration, and rollback checks are defined.
Post-deploy health and rollback evidence is captured.
Treat bundled scripts as helpers, not authority. Read and test them before use;
do not assume a generator or deployment script is complete or safe for a live
cluster.
1---2name: platform-engineer3description: PayU platform, SRE, and release engineering for OpenShift and Kubernetes workloads, GitOps, Argo CD, Tekton, Kustomize, Helm, container hardening, networking, observability, reliability, disaster recovery, and FinOps. Use when designing, deploying, debugging, or reviewing infrastructure and delivery changes; verify third-party APIs and CLI behavior with Context7 first.4---56# PayU Platform Engineer78Make the smallest safe infrastructure change. Treat Git as the deployment9source of truth, prefer existing repository patterns and operators, and never10patch production directly when the same change belongs in GitOps.1112## Context7 documentation gate1314Before writing or changing manifests, pipelines, charts, scripts, or commands15that use a third-party platform or tool:16171. Inspect the target overlay, installed operator/CRD, cluster version, and18 repository configuration. Determine the exact version instead of guessing.192. Resolve the library or product in Context7. Prefer the official,20 high-reputation result, then query one concrete topic at a time.213. Pin the query to the deployed version when indexed. Use the returned docs as22 the source of truth for API fields, CLI flags, defaults, and behavior.234. If the exact version is not indexed, state the fallback and verify against24 the installed CRD, `oc explain`, `kubectl explain`, chart schema, or source25 before editing.265. Re-resolve after changing an operator, chart, Kubernetes, OpenShift, Argo27 CD, Tekton, mesh, or observability version. Do not mix major-version APIs.2829Resolve and query the relevant official sources for Kubernetes/OpenShift, Argo30CD/ApplicationSet, Tekton Pipelines/Triggers, Helm, Kustomize, Istio or Gateway31API, Strimzi, Vault/External Secrets, and observability operators. Context7 does32not replace inspection of PayU manifests or operator CRDs.3334## Repository map3536Start at the actual path, not a copied example:3738```text39infrastructure/workloads/base/ shared workload manifests40infrastructure/workloads/overlays/payu-* dev, sit, uat, preprod, prod41infrastructure/platform/cicd/argocd/ Argo CD projects and applications42infrastructure/platform/cicd/tekton/ pipelines, tasks, runs, triggers43infrastructure/foundation/ namespaces and cluster foundation44infrastructure/platform/{security,mesh,data,observability}45```4647Read the relevant `kustomization.yaml`, base resources, overlay patches, RBAC,48secrets references, and existing tests before changing a workload. Verify the49real namespace and resource name; do not infer them from the service name.5051## Delivery workflow5253Use this sequence for changes that affect deployment:54551. Inventory dependencies, owners, blast radius, rollback, and required56 approvals.572. Edit the smallest base or overlay that owns the behavior. Keep environment58 differences in overlays, not duplicated bases.593. Render and statically validate manifests. Review the rendered diff.604. Run server-side dry-run or `oc diff` against the target cluster when access61 exists; otherwise report that cluster validation is pending.625. Commit and promote through Argo CD. Wait for health, rollout, and smoke63 checks at each environment.646. Verify metrics, logs, events, probes, dependencies, and rollback readiness.6566Never claim deployment success without command output or an Argo/cluster status.67Do not use `oc edit`, `kubectl apply` to bypass GitOps, `setenforce 0`, or68destructive cluster commands as a shortcut.6970## Kubernetes and OpenShift manifests7172Use the API versions supported by the target cluster and resolved documentation.73For current Kubernetes APIs, prefer the stable forms such as:7475- `apps/v1` for Deployments and StatefulSets;76- `networking.k8s.io/v1` for NetworkPolicy and Ingress;77- `policy/v1` for PodDisruptionBudget;78- `autoscaling/v2` for HorizontalPodAutoscaler;79- `tekton.dev/v1` for current Tekton Pipeline, Task, PipelineRun, and TaskRun80 resources.8182Do not carry forward deprecated `v1beta1` resources without verifying the83installed operator. Validate OpenShift-specific resources against the cluster's84CRDs. Use `Route`, Gateway API, or Ingress according to the existing platform85standard; do not introduce a second ingress model for one workload.8687Every workload should have, as applicable:8889- explicit CPU and memory requests/limits;90- startup, readiness, and liveness probes with realistic thresholds;91- a `Service` selecting the exact pod labels;92- a PDB for replicated production workloads;93- HPA only when requests, metrics, stabilization, and max capacity are defined;94- NetworkPolicy with explicit DNS, ingress, and dependency egress;95- stable `app.kubernetes.io/*` labels, owner, environment, version, and cost96 attribution metadata.9798Use native Kubernetes/OpenShift controllers for rollout, scaling, health, and99policy. Avoid shell loops or custom controllers for behavior the platform already100provides.101102## GitOps with Argo CD103104Keep Application, ApplicationSet, AppProject, sync-wave, and policy manifests105under `infrastructure/platform/cicd/argocd/`.106107- Restrict each AppProject to approved source repositories and destination108 clusters/namespaces. Avoid `*` in production permissions.109- Use ApplicationSet templates with `goTemplate: true` and110 `goTemplateOptions: [missingkey=error]` when templating is required.111- Use generators that reflect the repository's environment layout; current PayU112 overlays use `payu-dev`, `payu-sit`, `payu-uat`, `payu-preprod`, and113 `payu-prod`.114- Enable `prune` and `selfHeal` only with an explicit ownership decision. Keep115 `allowEmpty: false` so a bad render cannot wipe an application.116- Use sync waves or progressive sync for dependencies and environment117 promotion. Gate production with a sync window, approval, or both.118- Configure bounded retry backoff for transient sync failures. Do not retry119 validation, authorization, or broken-manifest errors indefinitely.120- Roll back by reverting the Git change or using the approved Argo rollback121 flow. Record why the rollback happened and verify data compatibility.122123For progressive delivery, use the installed Argo Rollouts or mesh/Gateway API124capability only after resolving its exact API and health-analysis behavior.125126## Tekton pipelines127128Define pipelines and tasks under `infrastructure/platform/cicd/tekton/` and use129the current `tekton.dev/v1` API where the installed Tekton release supports it.130Use `PipelineRun` with `pipelineRef`, explicit parameters, named workspaces,131bounded timeouts/retries, and a least-privilege `serviceAccountName`.132133Keep the supply-chain stages explicit and fail closed:134135```text136checkout -> secret scan -> SAST/SCA -> tests -> build137 -> image scan -> SBOM -> policy/RHACS -> sign -> publish138 -> deploy through Argo -> smoke/contract/load gates139```140141- Pin task and step images by trusted digest or controlled immutable tag.142- Run steps as non-root with bounded resources and no privilege escalation.143- Pass credentials through Vault/External Secrets or Tekton-bound secrets; never144 put tokens, kubeconfigs, or registry passwords in YAML or logs.145- Use workspaces for source and artifacts; do not depend on an implicit shared146 filesystem or deprecated PipelineResources.147- Keep deployment credentials separate from build credentials and restrict RBAC148 to the namespace and resources that the pipeline owns.149- Use Tekton Triggers or Pipelines-as-Code only after verifying the installed150 trigger API and webhook authentication configuration.151152## Images and container hardening153154Build with the repository's UBI9/Podman pattern and preserve enough build context155for parent POMs, shared modules, and lockfiles. Prefer a multi-stage build and a156small UBI9 runtime image. Use pre-built artifacts only when the build has already157run the same tests and scans.158159Require:160161- internal application port `8080` for PayU services;162- immutable image tags matching the Git release tag, preferably referenced by163 digest;164- non-root execution (`UID 1001` where the image and cluster policy support it;165 otherwise use OpenShift's assigned UID range);166- `runAsNonRoot: true`, `allowPrivilegeEscalation: false`, `readOnlyRootFilesystem:167 true`, `seccompProfile.type: RuntimeDefault`, and dropped `ALL` capabilities;168- explicit writable `emptyDir` mounts only where the application needs `/tmp` or169 another transient path;170- OCI labels, provenance, SBOM, vulnerability scan, and image signature.171172Use Kubernetes probes instead of relying on an image `HEALTHCHECK`. Match probe173paths and startup delays to the service. Do not install packages that already174exist in the selected UBI image; verify the image contents before adding a175healthcheck binary. Never weaken SELinux or add a privileged SCC to solve a file176permission problem—inspect the audit event, UID/GID, volume, and label first.177178## Kustomize and Helm179180Use Kustomize for the repository's existing base/overlay layout. Render with the181same version used by CI and verify the output:182183```bash184kustomize build infrastructure/workloads/overlays/payu-dev185```186187Use Helm only when an existing chart or platform contract requires it. Validate188`Chart.yaml`, `values.schema.json`, rendered templates, and environment values;189do not add Helm merely to template a few Kubernetes fields. Do not mix Helm and190Kustomize ownership of the same resource without a documented boundary.191192## Networking and security193194- Default to least-privilege NetworkPolicy. Allow only required ingress,195 namespace traffic, DNS, mesh control-plane traffic, and named dependencies.196- Use TLS at routes and strict mTLS/authorization policies when the installed197 mesh supports them. Verify service accounts and principals instead of allowing198 an entire namespace by label alone.199- Store secrets in Vault, External Secrets, or the platform secret manager. Git200 may contain references and encrypted material only when the repository policy201 explicitly permits it.202- Keep RBAC namespaced and minimal. Avoid `cluster-admin` in workloads,203 pipelines, service accounts, and local development manifests.204- Treat routes, webhooks, registries, admission policies, and operator205 credentials as trust boundaries. Validate inputs and audit changes.206207## SRE, observability, and reliability208209Define an SLI, SLO, owner, alert threshold, and runbook for each production210service. Instrument the existing platform stack for logs, metrics, traces, and211Kubernetes events; do not add a second telemetry system without a measured need.212213Check:214215- availability, latency, error rate, saturation, queue lag, and dependency216 health;217- structured logs with correlation/request IDs and no secrets or PII;218- alerts that page only on actionable symptoms and include a runbook link;219- HPA, PDB, resource quotas, limit ranges, and capacity headroom;220- rollout health, startup time, probe failures, crash loops, and OOM kills.221222Run chaos and load tests only in approved non-production environments. Make the223test reversible, bound blast radius, and capture evidence. For financial flows,224verify no duplicate posting, event loss, or unsafe retry occurs during failure.225226## Disaster recovery and FinOps227228Define RPO/RTO per dependency, backup ownership, replication mode, failover229steps, and data reconciliation. Test restore and failover on a schedule; a230multi-region diagram is not evidence of recoverability. Keep the primary/standby231mode of PostgreSQL, Kafka, Redis, and object storage explicit and verified.232233Right-size requests and limits from observed usage, enforce quotas, and apply234owner/environment/cost-center labels. Use VPA recommendations or OpenCost data235before changing production resources; do not enable automatic eviction or236resource mutation without an availability review.237238## Release and rollback checklist239240- [ ] Git diff is limited to the owning base/overlay or platform component.241- [ ] API versions and fields were verified with Context7 and the installed CRD.242- [ ] Rendered manifests and schema/lint checks pass.243- [ ] Image is immutable, scanned, signed, and tagged to the Git release.244- [ ] Secrets, RBAC, NetworkPolicy, probes, resources, PDB, and HPA are covered.245- [ ] Argo/Tekton permissions and production gates are explicit.246- [ ] Smoke, contract, migration, and rollback checks are defined.247- [ ] Post-deploy health and rollback evidence is captured.248249## References250251Read only the reference that matches the task:252253- [Infrastructure patterns](./references/INFRASTRUCTURE_PATTERNS.md)254- [Deployment patterns](./references/DEPLOYMENT_PATTERNS.md)255- [Argo CD GitOps](./references/argocd-gitops.md)256- [CI/CD pipeline guide](./references/cicd_pipeline_guide.md)257- [Infrastructure as code](./references/infrastructure_as_code.md)258- [Deployment strategies](./references/deployment_strategies.md)259- [Istio traffic management](./references/istio-traffic-management.md)260- [Release engineering](./references/releases/release-engineering.md)261- [SRE practices](./references/sre/sre-practices.md)262- [Incident playbooks](./references/sre/incident-playbooks.md)263- [Disaster recovery](./references/sre/disaster-recovery.md)264265Treat bundled scripts as helpers, not authority. Read and test them before use;266do not assume a generator or deployment script is complete or safe for a live267cluster.
Run npx skillmds@latest add fajjarnr/platform-engineer in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
PayU platform, SRE, and release engineering for OpenShift and Kubernetes workloads, GitOps, Argo CD, Tekton, Kustomize, Helm, container hardening, networking, observability, reliability, disaster recovery, and FinOps. Use when designing, deploying, debugging, or reviewing infrastructure and delivery changes; verify third-party APIs and CLI behavior with Context7 first. It is listed under DevOps & Infra on SkillMD.
This skill has not completed SkillMD's automated safety review yet. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free, and the skill stays under its author's original license.
fajjarnr (@fajjarnr) published this skill. Their other Agent Skills are listed on their SkillMD profile.