From 5dcd01daa4dc7835166a64dfcd8bc34b7d8cebd3 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Mon, 13 Jul 2026 17:01:07 +0300 Subject: [PATCH 01/28] ++ add d8-ugmk-prod flux bootstrap and vault --- .../flux-system/gotk-components.yaml | 6432 +++++++++++++++++ .../d8-ugmk-prod/flux-system/gotk-sync.yaml | 27 + .../flux-system/kustomization.yaml | 5 + clusters/d8-ugmk-prod/helm-repositories.yaml | 12 + .../infrastructure/kustomization.yaml | 12 + .../infrastructure/patches/vault.yaml | 14 + clusters/d8-ugmk-prod/kustomization.yaml | 6 + 7 files changed, 6508 insertions(+) create mode 100644 clusters/d8-ugmk-prod/flux-system/gotk-components.yaml create mode 100644 clusters/d8-ugmk-prod/flux-system/gotk-sync.yaml create mode 100644 clusters/d8-ugmk-prod/flux-system/kustomization.yaml create mode 100644 clusters/d8-ugmk-prod/helm-repositories.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/kustomization.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml create mode 100644 clusters/d8-ugmk-prod/kustomization.yaml diff --git a/clusters/d8-ugmk-prod/flux-system/gotk-components.yaml b/clusters/d8-ugmk-prod/flux-system/gotk-components.yaml new file mode 100644 index 0000000..325f836 --- /dev/null +++ b/clusters/d8-ugmk-prod/flux-system/gotk-components.yaml @@ -0,0 +1,6432 @@ +--- +# This manifest was generated by flux. DO NOT EDIT. +# Flux Version: v2.8.5 +# Components: source-controller,kustomize-controller,helm-controller,notification-controller +apiVersion: v1 +kind: Namespace +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + pod-security.kubernetes.io/warn: restricted + pod-security.kubernetes.io/warn-version: latest + name: flux-system +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: allow-egress + namespace: flux-system +spec: + egress: + - {} + ingress: + - from: + - podSelector: {} + podSelector: {} + policyTypes: + - Ingress + - Egress +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: allow-scraping + namespace: flux-system +spec: + ingress: + - from: + - namespaceSelector: {} + ports: + - port: 8080 + protocol: TCP + podSelector: {} + policyTypes: + - Ingress +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: allow-webhooks + namespace: flux-system +spec: + ingress: + - from: + - namespaceSelector: {} + podSelector: + matchLabels: + app: notification-controller + policyTypes: + - Ingress +--- +apiVersion: v1 +kind: ResourceQuota +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: critical-pods-flux-system + namespace: flux-system +spec: + hard: + pods: "1000" + scopeSelector: + matchExpressions: + - operator: In + scopeName: PriorityClass + values: + - system-node-critical + - system-cluster-critical +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: crd-controller-flux-system +rules: +- apiGroups: + - source.toolkit.fluxcd.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - kustomize.toolkit.fluxcd.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - helm.toolkit.fluxcd.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - notification.toolkit.fluxcd.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - image.toolkit.fluxcd.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - source.extensions.fluxcd.io + resources: + - '*' + verbs: + - '*' +- apiGroups: + - "" + resources: + - namespaces + - secrets + - configmaps + - serviceaccounts + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - configmaps/status + verbs: + - get + - update + - patch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - serviceaccounts/token + verbs: + - create +- nonResourceURLs: + - /livez/ping + verbs: + - head +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + name: flux-edit-flux-system +rules: +- apiGroups: + - notification.toolkit.fluxcd.io + - source.toolkit.fluxcd.io + - source.extensions.fluxcd.io + - helm.toolkit.fluxcd.io + - image.toolkit.fluxcd.io + - kustomize.toolkit.fluxcd.io + resources: + - '*' + verbs: + - create + - delete + - deletecollection + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" + rbac.authorization.k8s.io/aggregate-to-view: "true" + name: flux-view-flux-system +rules: +- apiGroups: + - notification.toolkit.fluxcd.io + - source.toolkit.fluxcd.io + - source.extensions.fluxcd.io + - helm.toolkit.fluxcd.io + - image.toolkit.fluxcd.io + - kustomize.toolkit.fluxcd.io + resources: + - '*' + verbs: + - get + - list + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: cluster-reconciler-flux-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- kind: ServiceAccount + name: kustomize-controller + namespace: flux-system +- kind: ServiceAccount + name: helm-controller + namespace: flux-system +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: crd-controller-flux-system +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: crd-controller-flux-system +subjects: +- kind: ServiceAccount + name: kustomize-controller + namespace: flux-system +- kind: ServiceAccount + name: helm-controller + namespace: flux-system +- kind: ServiceAccount + name: source-controller + namespace: flux-system +- kind: ServiceAccount + name: notification-controller + namespace: flux-system +- kind: ServiceAccount + name: image-reflector-controller + namespace: flux-system +- kind: ServiceAccount + name: image-automation-controller + namespace: flux-system +- kind: ServiceAccount + name: source-watcher + namespace: flux-system +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: buckets.source.toolkit.fluxcd.io +spec: + group: source.toolkit.fluxcd.io + names: + kind: Bucket + listKind: BucketList + plural: buckets + singular: bucket + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.endpoint + name: Endpoint + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + name: v1 + schema: + openAPIV3Schema: + description: Bucket is the Schema for the buckets API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + BucketSpec specifies the required configuration to produce an Artifact for + an object storage bucket. + properties: + bucketName: + description: BucketName is the name of the object storage bucket. + type: string + certSecretRef: + description: |- + CertSecretRef can be given the name of a Secret containing + either or both of + + - a PEM-encoded client certificate (`tls.crt`) and private + key (`tls.key`); + - a PEM-encoded CA certificate (`ca.crt`) + + and whichever are supplied, will be used for connecting to the + bucket. The client cert and key are useful if you are + authenticating with a certificate; the CA cert is useful if + you are using a self-signed server certificate. The Secret must + be of type `Opaque` or `kubernetes.io/tls`. + + This field is only supported for the `generic` provider. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + endpoint: + description: Endpoint is the object storage address the BucketName + is located at. + type: string + ignore: + description: |- + Ignore overrides the set of excluded patterns in the .sourceignore format + (which is the same as .gitignore). If not provided, a default will be used, + consult the documentation for your version to find out what those are. + type: string + insecure: + description: Insecure allows connecting to a non-TLS HTTP Endpoint. + type: boolean + interval: + description: |- + Interval at which the Bucket Endpoint is checked for updates. + This interval is approximate and may be subject to jitter to ensure + efficient use of resources. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + prefix: + description: Prefix to use for server-side filtering of files in the + Bucket. + type: string + provider: + default: generic + description: |- + Provider of the object storage bucket. + Defaults to 'generic', which expects an S3 (API) compatible object + storage. + enum: + - generic + - aws + - gcp + - azure + type: string + proxySecretRef: + description: |- + ProxySecretRef specifies the Secret containing the proxy configuration + to use while communicating with the Bucket server. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + region: + description: Region of the Endpoint where the BucketName is located + in. + type: string + secretRef: + description: |- + SecretRef specifies the Secret containing authentication credentials + for the Bucket. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + serviceAccountName: + description: |- + ServiceAccountName is the name of the Kubernetes ServiceAccount used to authenticate + the bucket. This field is only supported for the 'gcp' and 'aws' providers. + For more information about workload identity: + https://fluxcd.io/flux/components/source/buckets/#workload-identity + type: string + sts: + description: |- + STS specifies the required configuration to use a Security Token + Service for fetching temporary credentials to authenticate in a + Bucket provider. + + This field is only supported for the `aws` and `generic` providers. + properties: + certSecretRef: + description: |- + CertSecretRef can be given the name of a Secret containing + either or both of + + - a PEM-encoded client certificate (`tls.crt`) and private + key (`tls.key`); + - a PEM-encoded CA certificate (`ca.crt`) + + and whichever are supplied, will be used for connecting to the + STS endpoint. The client cert and key are useful if you are + authenticating with a certificate; the CA cert is useful if + you are using a self-signed server certificate. The Secret must + be of type `Opaque` or `kubernetes.io/tls`. + + This field is only supported for the `ldap` provider. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + endpoint: + description: |- + Endpoint is the HTTP/S endpoint of the Security Token Service from + where temporary credentials will be fetched. + pattern: ^(http|https)://.*$ + type: string + provider: + description: Provider of the Security Token Service. + enum: + - aws + - ldap + type: string + secretRef: + description: |- + SecretRef specifies the Secret containing authentication credentials + for the STS endpoint. This Secret must contain the fields `username` + and `password` and is supported only for the `ldap` provider. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + required: + - endpoint + - provider + type: object + suspend: + description: |- + Suspend tells the controller to suspend the reconciliation of this + Bucket. + type: boolean + timeout: + default: 60s + description: Timeout for fetch operations, defaults to 60s. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$ + type: string + required: + - bucketName + - endpoint + - interval + type: object + x-kubernetes-validations: + - message: STS configuration is only supported for the 'aws' and 'generic' + Bucket providers + rule: self.provider == 'aws' || self.provider == 'generic' || !has(self.sts) + - message: '''aws'' is the only supported STS provider for the ''aws'' + Bucket provider' + rule: self.provider != 'aws' || !has(self.sts) || self.sts.provider + == 'aws' + - message: '''ldap'' is the only supported STS provider for the ''generic'' + Bucket provider' + rule: self.provider != 'generic' || !has(self.sts) || self.sts.provider + == 'ldap' + - message: spec.sts.secretRef is not required for the 'aws' STS provider + rule: '!has(self.sts) || self.sts.provider != ''aws'' || !has(self.sts.secretRef)' + - message: spec.sts.certSecretRef is not required for the 'aws' STS provider + rule: '!has(self.sts) || self.sts.provider != ''aws'' || !has(self.sts.certSecretRef)' + - message: ServiceAccountName is not supported for the 'generic' Bucket + provider + rule: self.provider != 'generic' || !has(self.serviceAccountName) + - message: cannot set both .spec.secretRef and .spec.serviceAccountName + rule: '!has(self.secretRef) || !has(self.serviceAccountName)' + status: + default: + observedGeneration: -1 + description: BucketStatus records the observed state of a Bucket. + properties: + artifact: + description: Artifact represents the last successful Bucket reconciliation. + properties: + digest: + description: Digest is the digest of the file in the form of ':'. + pattern: ^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$ + type: string + lastUpdateTime: + description: |- + LastUpdateTime is the timestamp corresponding to the last update of the + Artifact. + format: date-time + type: string + metadata: + additionalProperties: + type: string + description: Metadata holds upstream information such as OCI annotations. + type: object + path: + description: |- + Path is the relative file path of the Artifact. It can be used to locate + the file in the root of the Artifact storage on the local file system of + the controller managing the Source. + type: string + revision: + description: |- + Revision is a human-readable identifier traceable in the origin source + system. It can be a Git commit SHA, Git tag, a Helm chart version, etc. + type: string + size: + description: Size is the number of bytes in the file. + format: int64 + type: integer + url: + description: |- + URL is the HTTP address of the Artifact as exposed by the controller + managing the Source. It can be used to retrieve the Artifact for + consumption, e.g. by another controller applying the Artifact contents. + type: string + required: + - digest + - lastUpdateTime + - path + - revision + - url + type: object + conditions: + description: Conditions holds the conditions for the Bucket. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedGeneration: + description: ObservedGeneration is the last observed generation of + the Bucket object. + format: int64 + type: integer + observedIgnore: + description: |- + ObservedIgnore is the observed exclusion patterns used for constructing + the source artifact. + type: string + url: + description: |- + URL is the dynamic fetch link for the latest Artifact. + It is provided on a "best effort" basis, and using the precise + BucketStatus.Artifact data is recommended. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: externalartifacts.source.toolkit.fluxcd.io +spec: + group: source.toolkit.fluxcd.io + names: + kind: ExternalArtifact + listKind: ExternalArtifactList + plural: externalartifacts + singular: externalartifact + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + - jsonPath: .spec.sourceRef.name + name: Source + type: string + name: v1 + schema: + openAPIV3Schema: + description: ExternalArtifact is the Schema for the external artifacts API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ExternalArtifactSpec defines the desired state of ExternalArtifact + properties: + sourceRef: + description: |- + SourceRef points to the Kubernetes custom resource for + which the artifact is generated. + properties: + apiVersion: + description: API version of the referent, if not specified the + Kubernetes preferred version will be used. + type: string + kind: + description: Kind of the referent. + type: string + name: + description: Name of the referent. + type: string + namespace: + description: Namespace of the referent, when not specified it + acts as LocalObjectReference. + type: string + required: + - kind + - name + type: object + type: object + status: + description: ExternalArtifactStatus defines the observed state of ExternalArtifact + properties: + artifact: + description: Artifact represents the output of an ExternalArtifact + reconciliation. + properties: + digest: + description: Digest is the digest of the file in the form of ':'. + pattern: ^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$ + type: string + lastUpdateTime: + description: |- + LastUpdateTime is the timestamp corresponding to the last update of the + Artifact. + format: date-time + type: string + metadata: + additionalProperties: + type: string + description: Metadata holds upstream information such as OCI annotations. + type: object + path: + description: |- + Path is the relative file path of the Artifact. It can be used to locate + the file in the root of the Artifact storage on the local file system of + the controller managing the Source. + type: string + revision: + description: |- + Revision is a human-readable identifier traceable in the origin source + system. It can be a Git commit SHA, Git tag, a Helm chart version, etc. + type: string + size: + description: Size is the number of bytes in the file. + format: int64 + type: integer + url: + description: |- + URL is the HTTP address of the Artifact as exposed by the controller + managing the Source. It can be used to retrieve the Artifact for + consumption, e.g. by another controller applying the Artifact contents. + type: string + required: + - digest + - lastUpdateTime + - path + - revision + - url + type: object + conditions: + description: Conditions holds the conditions for the ExternalArtifact. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: gitrepositories.source.toolkit.fluxcd.io +spec: + group: source.toolkit.fluxcd.io + names: + kind: GitRepository + listKind: GitRepositoryList + plural: gitrepositories + shortNames: + - gitrepo + singular: gitrepository + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.url + name: URL + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + name: v1 + schema: + openAPIV3Schema: + description: GitRepository is the Schema for the gitrepositories API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + GitRepositorySpec specifies the required configuration to produce an + Artifact for a Git repository. + properties: + ignore: + description: |- + Ignore overrides the set of excluded patterns in the .sourceignore format + (which is the same as .gitignore). If not provided, a default will be used, + consult the documentation for your version to find out what those are. + type: string + include: + description: |- + Include specifies a list of GitRepository resources which Artifacts + should be included in the Artifact produced for this GitRepository. + items: + description: |- + GitRepositoryInclude specifies a local reference to a GitRepository which + Artifact (sub-)contents must be included, and where they should be placed. + properties: + fromPath: + description: |- + FromPath specifies the path to copy contents from, defaults to the root + of the Artifact. + type: string + repository: + description: |- + GitRepositoryRef specifies the GitRepository which Artifact contents + must be included. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + toPath: + description: |- + ToPath specifies the path to copy contents to, defaults to the name of + the GitRepositoryRef. + type: string + required: + - repository + type: object + type: array + interval: + description: |- + Interval at which the GitRepository URL is checked for updates. + This interval is approximate and may be subject to jitter to ensure + efficient use of resources. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + provider: + description: |- + Provider used for authentication, can be 'azure', 'github', 'generic'. + When not specified, defaults to 'generic'. + enum: + - generic + - azure + - github + type: string + proxySecretRef: + description: |- + ProxySecretRef specifies the Secret containing the proxy configuration + to use while communicating with the Git server. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + recurseSubmodules: + description: |- + RecurseSubmodules enables the initialization of all submodules within + the GitRepository as cloned from the URL, using their default settings. + type: boolean + ref: + description: |- + Reference specifies the Git reference to resolve and monitor for + changes, defaults to the 'master' branch. + properties: + branch: + description: Branch to check out, defaults to 'master' if no other + field is defined. + type: string + commit: + description: |- + Commit SHA to check out, takes precedence over all reference fields. + + This can be combined with Branch to shallow clone the branch, in which + the commit is expected to exist. + type: string + name: + description: |- + Name of the reference to check out; takes precedence over Branch, Tag and SemVer. + + It must be a valid Git reference: https://git-scm.com/docs/git-check-ref-format#_description + Examples: "refs/heads/main", "refs/tags/v0.1.0", "refs/pull/420/head", "refs/merge-requests/1/head" + type: string + semver: + description: SemVer tag expression to check out, takes precedence + over Tag. + type: string + tag: + description: Tag to check out, takes precedence over Branch. + type: string + type: object + secretRef: + description: |- + SecretRef specifies the Secret containing authentication credentials for + the GitRepository. + For HTTPS repositories the Secret must contain 'username' and 'password' + fields for basic auth or 'bearerToken' field for token auth. + For SSH repositories the Secret must contain 'identity' + and 'known_hosts' fields. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + serviceAccountName: + description: |- + ServiceAccountName is the name of the Kubernetes ServiceAccount used to + authenticate to the GitRepository. This field is only supported for 'azure' provider. + type: string + sparseCheckout: + description: |- + SparseCheckout specifies a list of directories to checkout when cloning + the repository. If specified, only these directories are included in the + Artifact produced for this GitRepository. + items: + type: string + type: array + suspend: + description: |- + Suspend tells the controller to suspend the reconciliation of this + GitRepository. + type: boolean + timeout: + default: 60s + description: Timeout for Git operations like cloning, defaults to + 60s. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$ + type: string + url: + description: URL specifies the Git repository URL, it can be an HTTP/S + or SSH address. + pattern: ^(http|https|ssh)://.*$ + type: string + verify: + description: |- + Verification specifies the configuration to verify the Git commit + signature(s). + properties: + mode: + default: HEAD + description: |- + Mode specifies which Git object(s) should be verified. + + The variants "head" and "HEAD" both imply the same thing, i.e. verify + the commit that the HEAD of the Git repository points to. The variant + "head" solely exists to ensure backwards compatibility. + enum: + - head + - HEAD + - Tag + - TagAndHEAD + type: string + secretRef: + description: |- + SecretRef specifies the Secret containing the public keys of trusted Git + authors. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + required: + - secretRef + type: object + required: + - interval + - url + type: object + x-kubernetes-validations: + - message: serviceAccountName can only be set when provider is 'azure' + rule: '!has(self.serviceAccountName) || (has(self.provider) && self.provider + == ''azure'')' + status: + default: + observedGeneration: -1 + description: GitRepositoryStatus records the observed state of a Git repository. + properties: + artifact: + description: Artifact represents the last successful GitRepository + reconciliation. + properties: + digest: + description: Digest is the digest of the file in the form of ':'. + pattern: ^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$ + type: string + lastUpdateTime: + description: |- + LastUpdateTime is the timestamp corresponding to the last update of the + Artifact. + format: date-time + type: string + metadata: + additionalProperties: + type: string + description: Metadata holds upstream information such as OCI annotations. + type: object + path: + description: |- + Path is the relative file path of the Artifact. It can be used to locate + the file in the root of the Artifact storage on the local file system of + the controller managing the Source. + type: string + revision: + description: |- + Revision is a human-readable identifier traceable in the origin source + system. It can be a Git commit SHA, Git tag, a Helm chart version, etc. + type: string + size: + description: Size is the number of bytes in the file. + format: int64 + type: integer + url: + description: |- + URL is the HTTP address of the Artifact as exposed by the controller + managing the Source. It can be used to retrieve the Artifact for + consumption, e.g. by another controller applying the Artifact contents. + type: string + required: + - digest + - lastUpdateTime + - path + - revision + - url + type: object + conditions: + description: Conditions holds the conditions for the GitRepository. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + includedArtifacts: + description: |- + IncludedArtifacts contains a list of the last successfully included + Artifacts as instructed by GitRepositorySpec.Include. + items: + description: Artifact represents the output of a Source reconciliation. + properties: + digest: + description: Digest is the digest of the file in the form of + ':'. + pattern: ^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$ + type: string + lastUpdateTime: + description: |- + LastUpdateTime is the timestamp corresponding to the last update of the + Artifact. + format: date-time + type: string + metadata: + additionalProperties: + type: string + description: Metadata holds upstream information such as OCI + annotations. + type: object + path: + description: |- + Path is the relative file path of the Artifact. It can be used to locate + the file in the root of the Artifact storage on the local file system of + the controller managing the Source. + type: string + revision: + description: |- + Revision is a human-readable identifier traceable in the origin source + system. It can be a Git commit SHA, Git tag, a Helm chart version, etc. + type: string + size: + description: Size is the number of bytes in the file. + format: int64 + type: integer + url: + description: |- + URL is the HTTP address of the Artifact as exposed by the controller + managing the Source. It can be used to retrieve the Artifact for + consumption, e.g. by another controller applying the Artifact contents. + type: string + required: + - digest + - lastUpdateTime + - path + - revision + - url + type: object + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedGeneration: + description: |- + ObservedGeneration is the last observed generation of the GitRepository + object. + format: int64 + type: integer + observedIgnore: + description: |- + ObservedIgnore is the observed exclusion patterns used for constructing + the source artifact. + type: string + observedInclude: + description: |- + ObservedInclude is the observed list of GitRepository resources used to + produce the current Artifact. + items: + description: |- + GitRepositoryInclude specifies a local reference to a GitRepository which + Artifact (sub-)contents must be included, and where they should be placed. + properties: + fromPath: + description: |- + FromPath specifies the path to copy contents from, defaults to the root + of the Artifact. + type: string + repository: + description: |- + GitRepositoryRef specifies the GitRepository which Artifact contents + must be included. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + toPath: + description: |- + ToPath specifies the path to copy contents to, defaults to the name of + the GitRepositoryRef. + type: string + required: + - repository + type: object + type: array + observedRecurseSubmodules: + description: |- + ObservedRecurseSubmodules is the observed resource submodules + configuration used to produce the current Artifact. + type: boolean + observedSparseCheckout: + description: |- + ObservedSparseCheckout is the observed list of directories used to + produce the current Artifact. + items: + type: string + type: array + sourceVerificationMode: + description: |- + SourceVerificationMode is the last used verification mode indicating + which Git object(s) have been verified. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: helmcharts.source.toolkit.fluxcd.io +spec: + group: source.toolkit.fluxcd.io + names: + kind: HelmChart + listKind: HelmChartList + plural: helmcharts + shortNames: + - hc + singular: helmchart + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.chart + name: Chart + type: string + - jsonPath: .spec.version + name: Version + type: string + - jsonPath: .spec.sourceRef.kind + name: Source Kind + type: string + - jsonPath: .spec.sourceRef.name + name: Source Name + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + name: v1 + schema: + openAPIV3Schema: + description: HelmChart is the Schema for the helmcharts API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: HelmChartSpec specifies the desired state of a Helm chart. + properties: + chart: + description: |- + Chart is the name or path the Helm chart is available at in the + SourceRef. + type: string + ignoreMissingValuesFiles: + description: |- + IgnoreMissingValuesFiles controls whether to silently ignore missing values + files rather than failing. + type: boolean + interval: + description: |- + Interval at which the HelmChart SourceRef is checked for updates. + This interval is approximate and may be subject to jitter to ensure + efficient use of resources. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + reconcileStrategy: + default: ChartVersion + description: |- + ReconcileStrategy determines what enables the creation of a new artifact. + Valid values are ('ChartVersion', 'Revision'). + See the documentation of the values for an explanation on their behavior. + Defaults to ChartVersion when omitted. + enum: + - ChartVersion + - Revision + type: string + sourceRef: + description: SourceRef is the reference to the Source the chart is + available at. + properties: + apiVersion: + description: APIVersion of the referent. + type: string + kind: + description: |- + Kind of the referent, valid values are ('HelmRepository', 'GitRepository', + 'Bucket'). + enum: + - HelmRepository + - GitRepository + - Bucket + type: string + name: + description: Name of the referent. + type: string + required: + - kind + - name + type: object + suspend: + description: |- + Suspend tells the controller to suspend the reconciliation of this + source. + type: boolean + valuesFiles: + description: |- + ValuesFiles is an alternative list of values files to use as the chart + values (values.yaml is not included by default), expected to be a + relative path in the SourceRef. + Values files are merged in the order of this list with the last file + overriding the first. Ignored when omitted. + items: + type: string + type: array + verify: + description: |- + Verify contains the secret name containing the trusted public keys + used to verify the signature and specifies which provider to use to check + whether OCI image is authentic. + This field is only supported when using HelmRepository source with spec.type 'oci'. + Chart dependencies, which are not bundled in the umbrella chart artifact, are not verified. + properties: + matchOIDCIdentity: + description: |- + MatchOIDCIdentity specifies the identity matching criteria to use + while verifying an OCI artifact which was signed using Cosign keyless + signing. The artifact's identity is deemed to be verified if any of the + specified matchers match against the identity. + items: + description: |- + OIDCIdentityMatch specifies options for verifying the certificate identity, + i.e. the issuer and the subject of the certificate. + properties: + issuer: + description: |- + Issuer specifies the regex pattern to match against to verify + the OIDC issuer in the Fulcio certificate. The pattern must be a + valid Go regular expression. + type: string + subject: + description: |- + Subject specifies the regex pattern to match against to verify + the identity subject in the Fulcio certificate. The pattern must + be a valid Go regular expression. + type: string + required: + - issuer + - subject + type: object + type: array + provider: + default: cosign + description: Provider specifies the technology used to sign the + OCI Artifact. + enum: + - cosign + - notation + type: string + secretRef: + description: |- + SecretRef specifies the Kubernetes Secret containing the + trusted public keys. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + required: + - provider + type: object + version: + default: '*' + description: |- + Version is the chart version semver expression, ignored for charts from + GitRepository and Bucket sources. Defaults to latest when omitted. + type: string + required: + - chart + - interval + - sourceRef + type: object + x-kubernetes-validations: + - message: spec.verify is only supported when spec.sourceRef.kind is 'HelmRepository' + rule: '!has(self.verify) || self.sourceRef.kind == ''HelmRepository''' + status: + default: + observedGeneration: -1 + description: HelmChartStatus records the observed state of the HelmChart. + properties: + artifact: + description: Artifact represents the output of the last successful + reconciliation. + properties: + digest: + description: Digest is the digest of the file in the form of ':'. + pattern: ^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$ + type: string + lastUpdateTime: + description: |- + LastUpdateTime is the timestamp corresponding to the last update of the + Artifact. + format: date-time + type: string + metadata: + additionalProperties: + type: string + description: Metadata holds upstream information such as OCI annotations. + type: object + path: + description: |- + Path is the relative file path of the Artifact. It can be used to locate + the file in the root of the Artifact storage on the local file system of + the controller managing the Source. + type: string + revision: + description: |- + Revision is a human-readable identifier traceable in the origin source + system. It can be a Git commit SHA, Git tag, a Helm chart version, etc. + type: string + size: + description: Size is the number of bytes in the file. + format: int64 + type: integer + url: + description: |- + URL is the HTTP address of the Artifact as exposed by the controller + managing the Source. It can be used to retrieve the Artifact for + consumption, e.g. by another controller applying the Artifact contents. + type: string + required: + - digest + - lastUpdateTime + - path + - revision + - url + type: object + conditions: + description: Conditions holds the conditions for the HelmChart. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedChartName: + description: |- + ObservedChartName is the last observed chart name as specified by the + resolved chart reference. + type: string + observedGeneration: + description: |- + ObservedGeneration is the last observed generation of the HelmChart + object. + format: int64 + type: integer + observedSourceArtifactRevision: + description: |- + ObservedSourceArtifactRevision is the last observed Artifact.Revision + of the HelmChartSpec.SourceRef. + type: string + observedValuesFiles: + description: |- + ObservedValuesFiles are the observed value files of the last successful + reconciliation. + It matches the chart in the last successfully reconciled artifact. + items: + type: string + type: array + url: + description: |- + URL is the dynamic fetch link for the latest Artifact. + It is provided on a "best effort" basis, and using the precise + BucketStatus.Artifact data is recommended. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: helmrepositories.source.toolkit.fluxcd.io +spec: + group: source.toolkit.fluxcd.io + names: + kind: HelmRepository + listKind: HelmRepositoryList + plural: helmrepositories + shortNames: + - helmrepo + singular: helmrepository + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.url + name: URL + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + name: v1 + schema: + openAPIV3Schema: + description: HelmRepository is the Schema for the helmrepositories API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + HelmRepositorySpec specifies the required configuration to produce an + Artifact for a Helm repository index YAML. + properties: + accessFrom: + description: |- + AccessFrom specifies an Access Control List for allowing cross-namespace + references to this object. + NOTE: Not implemented, provisional as of https://github.com/fluxcd/flux2/pull/2092 + properties: + namespaceSelectors: + description: |- + NamespaceSelectors is the list of namespace selectors to which this ACL applies. + Items in this list are evaluated using a logical OR operation. + items: + description: |- + NamespaceSelector selects the namespaces to which this ACL applies. + An empty map of MatchLabels matches all namespaces in a cluster. + properties: + matchLabels: + additionalProperties: + type: string + description: |- + MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. + type: object + type: object + type: array + required: + - namespaceSelectors + type: object + certSecretRef: + description: |- + CertSecretRef can be given the name of a Secret containing + either or both of + + - a PEM-encoded client certificate (`tls.crt`) and private + key (`tls.key`); + - a PEM-encoded CA certificate (`ca.crt`) + + and whichever are supplied, will be used for connecting to the + registry. The client cert and key are useful if you are + authenticating with a certificate; the CA cert is useful if + you are using a self-signed server certificate. The Secret must + be of type `Opaque` or `kubernetes.io/tls`. + + It takes precedence over the values specified in the Secret referred + to by `.spec.secretRef`. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + insecure: + description: |- + Insecure allows connecting to a non-TLS HTTP container registry. + This field is only taken into account if the .spec.type field is set to 'oci'. + type: boolean + interval: + description: |- + Interval at which the HelmRepository URL is checked for updates. + This interval is approximate and may be subject to jitter to ensure + efficient use of resources. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + passCredentials: + description: |- + PassCredentials allows the credentials from the SecretRef to be passed + on to a host that does not match the host as defined in URL. + This may be required if the host of the advertised chart URLs in the + index differ from the defined URL. + Enabling this should be done with caution, as it can potentially result + in credentials getting stolen in a MITM-attack. + type: boolean + provider: + default: generic + description: |- + Provider used for authentication, can be 'aws', 'azure', 'gcp' or 'generic'. + This field is optional, and only taken into account if the .spec.type field is set to 'oci'. + When not specified, defaults to 'generic'. + enum: + - generic + - aws + - azure + - gcp + type: string + secretRef: + description: |- + SecretRef specifies the Secret containing authentication credentials + for the HelmRepository. + For HTTP/S basic auth the secret must contain 'username' and 'password' + fields. + Support for TLS auth using the 'certFile' and 'keyFile', and/or 'caFile' + keys is deprecated. Please use `.spec.certSecretRef` instead. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + suspend: + description: |- + Suspend tells the controller to suspend the reconciliation of this + HelmRepository. + type: boolean + timeout: + description: |- + Timeout is used for the index fetch operation for an HTTPS helm repository, + and for remote OCI Repository operations like pulling for an OCI helm + chart by the associated HelmChart. + Its default value is 60s. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$ + type: string + type: + description: |- + Type of the HelmRepository. + When this field is set to "oci", the URL field value must be prefixed with "oci://". + enum: + - default + - oci + type: string + url: + description: |- + URL of the Helm repository, a valid URL contains at least a protocol and + host. + pattern: ^(http|https|oci)://.*$ + type: string + required: + - url + type: object + status: + default: + observedGeneration: -1 + description: HelmRepositoryStatus records the observed state of the HelmRepository. + properties: + artifact: + description: Artifact represents the last successful HelmRepository + reconciliation. + properties: + digest: + description: Digest is the digest of the file in the form of ':'. + pattern: ^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$ + type: string + lastUpdateTime: + description: |- + LastUpdateTime is the timestamp corresponding to the last update of the + Artifact. + format: date-time + type: string + metadata: + additionalProperties: + type: string + description: Metadata holds upstream information such as OCI annotations. + type: object + path: + description: |- + Path is the relative file path of the Artifact. It can be used to locate + the file in the root of the Artifact storage on the local file system of + the controller managing the Source. + type: string + revision: + description: |- + Revision is a human-readable identifier traceable in the origin source + system. It can be a Git commit SHA, Git tag, a Helm chart version, etc. + type: string + size: + description: Size is the number of bytes in the file. + format: int64 + type: integer + url: + description: |- + URL is the HTTP address of the Artifact as exposed by the controller + managing the Source. It can be used to retrieve the Artifact for + consumption, e.g. by another controller applying the Artifact contents. + type: string + required: + - digest + - lastUpdateTime + - path + - revision + - url + type: object + conditions: + description: Conditions holds the conditions for the HelmRepository. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedGeneration: + description: |- + ObservedGeneration is the last observed generation of the HelmRepository + object. + format: int64 + type: integer + url: + description: |- + URL is the dynamic fetch link for the latest Artifact. + It is provided on a "best effort" basis, and using the precise + HelmRepositoryStatus.Artifact data is recommended. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: ocirepositories.source.toolkit.fluxcd.io +spec: + group: source.toolkit.fluxcd.io + names: + kind: OCIRepository + listKind: OCIRepositoryList + plural: ocirepositories + shortNames: + - ocirepo + singular: ocirepository + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .spec.url + name: URL + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1 + schema: + openAPIV3Schema: + description: OCIRepository is the Schema for the ocirepositories API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: OCIRepositorySpec defines the desired state of OCIRepository + properties: + certSecretRef: + description: |- + CertSecretRef can be given the name of a Secret containing + either or both of + + - a PEM-encoded client certificate (`tls.crt`) and private + key (`tls.key`); + - a PEM-encoded CA certificate (`ca.crt`) + + and whichever are supplied, will be used for connecting to the + registry. The client cert and key are useful if you are + authenticating with a certificate; the CA cert is useful if + you are using a self-signed server certificate. The Secret must + be of type `Opaque` or `kubernetes.io/tls`. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + ignore: + description: |- + Ignore overrides the set of excluded patterns in the .sourceignore format + (which is the same as .gitignore). If not provided, a default will be used, + consult the documentation for your version to find out what those are. + type: string + insecure: + description: Insecure allows connecting to a non-TLS HTTP container + registry. + type: boolean + interval: + description: |- + Interval at which the OCIRepository URL is checked for updates. + This interval is approximate and may be subject to jitter to ensure + efficient use of resources. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + layerSelector: + description: |- + LayerSelector specifies which layer should be extracted from the OCI artifact. + When not specified, the first layer found in the artifact is selected. + properties: + mediaType: + description: |- + MediaType specifies the OCI media type of the layer + which should be extracted from the OCI Artifact. The + first layer matching this type is selected. + type: string + operation: + description: |- + Operation specifies how the selected layer should be processed. + By default, the layer compressed content is extracted to storage. + When the operation is set to 'copy', the layer compressed content + is persisted to storage as it is. + enum: + - extract + - copy + type: string + type: object + provider: + default: generic + description: |- + The provider used for authentication, can be 'aws', 'azure', 'gcp' or 'generic'. + When not specified, defaults to 'generic'. + enum: + - generic + - aws + - azure + - gcp + type: string + proxySecretRef: + description: |- + ProxySecretRef specifies the Secret containing the proxy configuration + to use while communicating with the container registry. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + ref: + description: |- + The OCI reference to pull and monitor for changes, + defaults to the latest tag. + properties: + digest: + description: |- + Digest is the image digest to pull, takes precedence over SemVer. + The value should be in the format 'sha256:'. + type: string + semver: + description: |- + SemVer is the range of tags to pull selecting the latest within + the range, takes precedence over Tag. + type: string + semverFilter: + description: SemverFilter is a regex pattern to filter the tags + within the SemVer range. + type: string + tag: + description: Tag is the image tag to pull, defaults to latest. + type: string + type: object + secretRef: + description: |- + SecretRef contains the secret name containing the registry login + credentials to resolve image metadata. + The secret must be of type kubernetes.io/dockerconfigjson. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + serviceAccountName: + description: |- + ServiceAccountName is the name of the Kubernetes ServiceAccount used to authenticate + the image pull if the service account has attached pull secrets. For more information: + https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account + type: string + suspend: + description: This flag tells the controller to suspend the reconciliation + of this source. + type: boolean + timeout: + default: 60s + description: The timeout for remote OCI Repository operations like + pulling, defaults to 60s. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$ + type: string + url: + description: |- + URL is a reference to an OCI artifact repository hosted + on a remote container registry. + pattern: ^oci://.*$ + type: string + verify: + description: |- + Verify contains the secret name containing the trusted public keys + used to verify the signature and specifies which provider to use to check + whether OCI image is authentic. + properties: + matchOIDCIdentity: + description: |- + MatchOIDCIdentity specifies the identity matching criteria to use + while verifying an OCI artifact which was signed using Cosign keyless + signing. The artifact's identity is deemed to be verified if any of the + specified matchers match against the identity. + items: + description: |- + OIDCIdentityMatch specifies options for verifying the certificate identity, + i.e. the issuer and the subject of the certificate. + properties: + issuer: + description: |- + Issuer specifies the regex pattern to match against to verify + the OIDC issuer in the Fulcio certificate. The pattern must be a + valid Go regular expression. + type: string + subject: + description: |- + Subject specifies the regex pattern to match against to verify + the identity subject in the Fulcio certificate. The pattern must + be a valid Go regular expression. + type: string + required: + - issuer + - subject + type: object + type: array + provider: + default: cosign + description: Provider specifies the technology used to sign the + OCI Artifact. + enum: + - cosign + - notation + type: string + secretRef: + description: |- + SecretRef specifies the Kubernetes Secret containing the + trusted public keys. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + required: + - provider + type: object + required: + - interval + - url + type: object + status: + default: + observedGeneration: -1 + description: OCIRepositoryStatus defines the observed state of OCIRepository + properties: + artifact: + description: Artifact represents the output of the last successful + OCI Repository sync. + properties: + digest: + description: Digest is the digest of the file in the form of ':'. + pattern: ^[a-z0-9]+(?:[.+_-][a-z0-9]+)*:[a-zA-Z0-9=_-]+$ + type: string + lastUpdateTime: + description: |- + LastUpdateTime is the timestamp corresponding to the last update of the + Artifact. + format: date-time + type: string + metadata: + additionalProperties: + type: string + description: Metadata holds upstream information such as OCI annotations. + type: object + path: + description: |- + Path is the relative file path of the Artifact. It can be used to locate + the file in the root of the Artifact storage on the local file system of + the controller managing the Source. + type: string + revision: + description: |- + Revision is a human-readable identifier traceable in the origin source + system. It can be a Git commit SHA, Git tag, a Helm chart version, etc. + type: string + size: + description: Size is the number of bytes in the file. + format: int64 + type: integer + url: + description: |- + URL is the HTTP address of the Artifact as exposed by the controller + managing the Source. It can be used to retrieve the Artifact for + consumption, e.g. by another controller applying the Artifact contents. + type: string + required: + - digest + - lastUpdateTime + - path + - revision + - url + type: object + conditions: + description: Conditions holds the conditions for the OCIRepository. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedGeneration: + description: ObservedGeneration is the last observed generation. + format: int64 + type: integer + observedIgnore: + description: |- + ObservedIgnore is the observed exclusion patterns used for constructing + the source artifact. + type: string + observedLayerSelector: + description: |- + ObservedLayerSelector is the observed layer selector used for constructing + the source artifact. + properties: + mediaType: + description: |- + MediaType specifies the OCI media type of the layer + which should be extracted from the OCI Artifact. The + first layer matching this type is selected. + type: string + operation: + description: |- + Operation specifies how the selected layer should be processed. + By default, the layer compressed content is extracted to storage. + When the operation is set to 'copy', the layer compressed content + is persisted to storage as it is. + enum: + - extract + - copy + type: string + type: object + url: + description: URL is the download link for the artifact output of the + last OCI Repository sync. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: source-controller + namespace: flux-system +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + control-plane: controller + name: source-controller + namespace: flux-system +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: http + selector: + app: source-controller + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + control-plane: controller + name: source-controller + namespace: flux-system +spec: + replicas: 1 + selector: + matchLabels: + app: source-controller + strategy: + type: Recreate + template: + metadata: + annotations: + prometheus.io/port: "8080" + prometheus.io/scrape: "true" + labels: + app: source-controller + app.kubernetes.io/component: source-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + spec: + containers: + - args: + - --events-addr=http://notification-controller.$(RUNTIME_NAMESPACE).svc.cluster.local./ + - --watch-all-namespaces=true + - --log-level=info + - --log-encoding=json + - --enable-leader-election + - --storage-path=/data + - --storage-adv-addr=source-controller.$(RUNTIME_NAMESPACE).svc.cluster.local. + env: + - name: RUNTIME_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: TUF_ROOT + value: /tmp/.sigstore + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + containerName: manager + resource: limits.memory + image: ghcr.io/fluxcd/source-controller:v1.8.2 + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /healthz + port: healthz + name: manager + ports: + - containerPort: 9090 + name: http + protocol: TCP + - containerPort: 8080 + name: http-prom + protocol: TCP + - containerPort: 9440 + name: healthz + protocol: TCP + readinessProbe: + httpGet: + path: / + port: http + resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 50m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /data + name: data + - mountPath: /tmp + name: tmp + nodeSelector: + kubernetes.io/os: linux + priorityClassName: system-cluster-critical + securityContext: + fsGroup: 1337 + serviceAccountName: source-controller + terminationGracePeriodSeconds: 10 + volumes: + - emptyDir: {} + name: data + - emptyDir: {} + name: tmp +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: kustomize-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: kustomizations.kustomize.toolkit.fluxcd.io +spec: + group: kustomize.toolkit.fluxcd.io + names: + kind: Kustomization + listKind: KustomizationList + plural: kustomizations + shortNames: + - ks + singular: kustomization + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + name: v1 + schema: + openAPIV3Schema: + description: Kustomization is the Schema for the kustomizations API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: |- + KustomizationSpec defines the configuration to calculate the desired state + from a Source using Kustomize. + properties: + commonMetadata: + description: |- + CommonMetadata specifies the common labels and annotations that are + applied to all resources. Any existing label or annotation will be + overridden if its key matches a common one. + properties: + annotations: + additionalProperties: + type: string + description: Annotations to be added to the object's metadata. + type: object + labels: + additionalProperties: + type: string + description: Labels to be added to the object's metadata. + type: object + type: object + components: + description: Components specifies relative paths to kustomize Components. + items: + type: string + type: array + decryption: + description: Decrypt Kubernetes secrets before applying them on the + cluster. + properties: + provider: + description: Provider is the name of the decryption engine. + enum: + - sops + type: string + secretRef: + description: |- + The secret name containing the private OpenPGP keys used for decryption. + A static credential for a cloud provider defined inside the Secret + takes priority to secret-less authentication with the ServiceAccountName + field. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + serviceAccountName: + description: |- + ServiceAccountName is the name of the service account used to + authenticate with KMS services from cloud providers. If a + static credential for a given cloud provider is defined + inside the Secret referenced by SecretRef, that static + credential takes priority. + type: string + required: + - provider + type: object + deletionPolicy: + description: |- + DeletionPolicy can be used to control garbage collection when this + Kustomization is deleted. Valid values are ('MirrorPrune', 'Delete', + 'WaitForTermination', 'Orphan'). 'MirrorPrune' mirrors the Prune field + (orphan if false, delete if true). Defaults to 'MirrorPrune'. + enum: + - MirrorPrune + - Delete + - WaitForTermination + - Orphan + type: string + dependsOn: + description: |- + DependsOn may contain a DependencyReference slice + with references to Kustomization resources that must be ready before this + Kustomization can be reconciled. + items: + description: DependencyReference defines a Kustomization dependency + on another Kustomization resource. + properties: + name: + description: Name of the referent. + type: string + namespace: + description: |- + Namespace of the referent, defaults to the namespace of the Kustomization + resource object that contains the reference. + type: string + readyExpr: + description: |- + ReadyExpr is a CEL expression that can be used to assess the readiness + of a dependency. When specified, the built-in readiness check + is replaced by the logic defined in the CEL expression. + To make the CEL expression additive to the built-in readiness check, + the feature gate `AdditiveCELDependencyCheck` must be set to `true`. + type: string + required: + - name + type: object + type: array + force: + default: false + description: |- + Force instructs the controller to recreate resources + when patching fails due to an immutable field change. + type: boolean + healthCheckExprs: + description: |- + HealthCheckExprs is a list of healthcheck expressions for evaluating the + health of custom resources using Common Expression Language (CEL). + The expressions are evaluated only when Wait or HealthChecks are specified. + items: + description: CustomHealthCheck defines the health check for custom + resources. + properties: + apiVersion: + description: APIVersion of the custom resource under evaluation. + type: string + current: + description: |- + Current is the CEL expression that determines if the status + of the custom resource has reached the desired state. + type: string + failed: + description: |- + Failed is the CEL expression that determines if the status + of the custom resource has failed to reach the desired state. + type: string + inProgress: + description: |- + InProgress is the CEL expression that determines if the status + of the custom resource has not yet reached the desired state. + type: string + kind: + description: Kind of the custom resource under evaluation. + type: string + required: + - apiVersion + - current + - kind + type: object + type: array + healthChecks: + description: A list of resources to be included in the health assessment. + items: + description: |- + NamespacedObjectKindReference contains enough information to locate the typed referenced Kubernetes resource object + in any namespace. + properties: + apiVersion: + description: API version of the referent, if not specified the + Kubernetes preferred version will be used. + type: string + kind: + description: Kind of the referent. + type: string + name: + description: Name of the referent. + type: string + namespace: + description: Namespace of the referent, when not specified it + acts as LocalObjectReference. + type: string + required: + - kind + - name + type: object + type: array + ignoreMissingComponents: + description: |- + IgnoreMissingComponents instructs the controller to ignore Components paths + not found in source by removing them from the generated kustomization.yaml + before running kustomize build. + type: boolean + images: + description: |- + Images is a list of (image name, new name, new tag or digest) + for changing image names, tags or digests. This can also be achieved with a + patch, but this operator is simpler to specify. + items: + description: Image contains an image name, a new name, a new tag + or digest, which will replace the original name and tag. + properties: + digest: + description: |- + Digest is the value used to replace the original image tag. + If digest is present NewTag value is ignored. + type: string + name: + description: Name is a tag-less image name. + type: string + newName: + description: NewName is the value used to replace the original + name. + type: string + newTag: + description: NewTag is the value used to replace the original + tag. + type: string + required: + - name + type: object + type: array + interval: + description: |- + The interval at which to reconcile the Kustomization. + This interval is approximate and may be subject to jitter to ensure + efficient use of resources. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + kubeConfig: + description: |- + The KubeConfig for reconciling the Kustomization on a remote cluster. + When used in combination with KustomizationSpec.ServiceAccountName, + forces the controller to act on behalf of that Service Account at the + target cluster. + If the --default-service-account flag is set, its value will be used as + a controller level fallback for when KustomizationSpec.ServiceAccountName + is empty. + properties: + configMapRef: + description: |- + ConfigMapRef holds an optional name of a ConfigMap that contains + the following keys: + + - `provider`: the provider to use. One of `aws`, `azure`, `gcp`, or + `generic`. Required. + - `cluster`: the fully qualified resource name of the Kubernetes + cluster in the cloud provider API. Not used by the `generic` + provider. Required when one of `address` or `ca.crt` is not set. + - `address`: the address of the Kubernetes API server. Required + for `generic`. For the other providers, if not specified, the + first address in the cluster resource will be used, and if + specified, it must match one of the addresses in the cluster + resource. + If audiences is not set, will be used as the audience for the + `generic` provider. + - `ca.crt`: the optional PEM-encoded CA certificate for the + Kubernetes API server. If not set, the controller will use the + CA certificate from the cluster resource. + - `audiences`: the optional audiences as a list of + line-break-separated strings for the Kubernetes ServiceAccount + token. Defaults to the `address` for the `generic` provider, or + to specific values for the other providers depending on the + provider. + - `serviceAccountName`: the optional name of the Kubernetes + ServiceAccount in the same namespace that should be used + for authentication. If not specified, the controller + ServiceAccount will be used. + + Mutually exclusive with SecretRef. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + secretRef: + description: |- + SecretRef holds an optional name of a secret that contains a key with + the kubeconfig file as the value. If no key is set, the key will default + to 'value'. Mutually exclusive with ConfigMapRef. + It is recommended that the kubeconfig is self-contained, and the secret + is regularly updated if credentials such as a cloud-access-token expire. + Cloud specific `cmd-path` auth helpers will not function without adding + binaries and credentials to the Pod that is responsible for reconciling + Kubernetes resources. Supported only for the generic provider. + properties: + key: + description: Key in the Secret, when not specified an implementation-specific + default key is used. + type: string + name: + description: Name of the Secret. + type: string + required: + - name + type: object + type: object + x-kubernetes-validations: + - message: exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef + must be specified + rule: has(self.configMapRef) || has(self.secretRef) + - message: exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef + must be specified + rule: '!has(self.configMapRef) || !has(self.secretRef)' + namePrefix: + description: NamePrefix will prefix the names of all managed resources. + maxLength: 200 + minLength: 1 + type: string + nameSuffix: + description: NameSuffix will suffix the names of all managed resources. + maxLength: 200 + minLength: 1 + type: string + patches: + description: |- + Strategic merge and JSON patches, defined as inline YAML objects, + capable of targeting objects based on kind, label and annotation selectors. + items: + description: |- + Patch contains an inline StrategicMerge or JSON6902 patch, and the target the patch should + be applied to. + properties: + patch: + description: |- + Patch contains an inline StrategicMerge patch or an inline JSON6902 patch with + an array of operation objects. + type: string + target: + description: Target points to the resources that the patch document + should be applied to. + properties: + annotationSelector: + description: |- + AnnotationSelector is a string that follows the label selection expression + https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource annotations. + type: string + group: + description: |- + Group is the API group to select resources from. + Together with Version and Kind it is capable of unambiguously identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + kind: + description: |- + Kind of the API Group to select resources from. + Together with Group and Version it is capable of unambiguously + identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + labelSelector: + description: |- + LabelSelector is a string that follows the label selection expression + https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource labels. + type: string + name: + description: Name to match resources with. + type: string + namespace: + description: Namespace to select resources from. + type: string + version: + description: |- + Version of the API Group to select resources from. + Together with Group and Kind it is capable of unambiguously identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + type: object + required: + - patch + type: object + type: array + path: + description: |- + Path to the directory containing the kustomization.yaml file, or the + set of plain YAMLs a kustomization.yaml should be generated for. + Defaults to 'None', which translates to the root path of the SourceRef. + type: string + postBuild: + description: |- + PostBuild describes which actions to perform on the YAML manifest + generated by building the kustomize overlay. + properties: + substitute: + additionalProperties: + type: string + description: |- + Substitute holds a map of key/value pairs. + The variables defined in your YAML manifests that match any of the keys + defined in the map will be substituted with the set value. + Includes support for bash string replacement functions + e.g. ${var:=default}, ${var:position} and ${var/substring/replacement}. + type: object + substituteFrom: + description: |- + SubstituteFrom holds references to ConfigMaps and Secrets containing + the variables and their values to be substituted in the YAML manifests. + The ConfigMap and the Secret data keys represent the var names, and they + must match the vars declared in the manifests for the substitution to + happen. + items: + description: |- + SubstituteReference contains a reference to a resource containing + the variables name and value. + properties: + kind: + description: Kind of the values referent, valid values are + ('Secret', 'ConfigMap'). + enum: + - Secret + - ConfigMap + type: string + name: + description: |- + Name of the values referent. Should reside in the same namespace as the + referring resource. + maxLength: 253 + minLength: 1 + type: string + optional: + default: false + description: |- + Optional indicates whether the referenced resource must exist, or whether to + tolerate its absence. If true and the referenced resource is absent, proceed + as if the resource was present but empty, without any variables defined. + type: boolean + required: + - kind + - name + type: object + type: array + type: object + prune: + description: Prune enables garbage collection. + type: boolean + retryInterval: + description: |- + The interval at which to retry a previously failed reconciliation. + When not specified, the controller uses the KustomizationSpec.Interval + value to retry failures. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + serviceAccountName: + description: |- + The name of the Kubernetes service account to impersonate + when reconciling this Kustomization. + type: string + sourceRef: + description: Reference of the source where the kustomization file + is. + properties: + apiVersion: + description: API version of the referent. + type: string + kind: + description: Kind of the referent. + enum: + - OCIRepository + - GitRepository + - Bucket + - ExternalArtifact + type: string + name: + description: Name of the referent. + type: string + namespace: + description: |- + Namespace of the referent, defaults to the namespace of the Kubernetes + resource object that contains the reference. + type: string + required: + - kind + - name + type: object + suspend: + description: |- + This flag tells the controller to suspend subsequent kustomize executions, + it does not apply to already started executions. Defaults to false. + type: boolean + targetNamespace: + description: |- + TargetNamespace sets or overrides the namespace in the + kustomization.yaml file. + maxLength: 63 + minLength: 1 + type: string + timeout: + description: |- + Timeout for validation, apply and health checking operations. + Defaults to 'Interval' duration. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + wait: + description: |- + Wait instructs the controller to check the health of all the reconciled + resources. When enabled, the HealthChecks are ignored. Defaults to false. + type: boolean + required: + - interval + - prune + - sourceRef + type: object + status: + default: + observedGeneration: -1 + description: KustomizationStatus defines the observed state of a kustomization. + properties: + conditions: + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + history: + description: |- + History contains a set of snapshots of the last reconciliation attempts + tracking the revision, the state and the duration of each attempt. + items: + description: |- + Snapshot represents a point-in-time record of a group of resources reconciliation, + including timing information, status, and a unique digest identifier. + properties: + digest: + description: Digest is the checksum in the format `:` + of the resources in this snapshot. + type: string + firstReconciled: + description: FirstReconciled is the time when this revision + was first reconciled to the cluster. + format: date-time + type: string + lastReconciled: + description: LastReconciled is the time when this revision was + last reconciled to the cluster. + format: date-time + type: string + lastReconciledDuration: + description: LastReconciledDuration is time it took to reconcile + the resources in this revision. + type: string + lastReconciledStatus: + description: LastReconciledStatus is the status of the last + reconciliation. + type: string + metadata: + additionalProperties: + type: string + description: Metadata contains additional information about + the snapshot. + type: object + totalReconciliations: + description: TotalReconciliations is the total number of reconciliations + that have occurred for this snapshot. + format: int64 + type: integer + required: + - digest + - firstReconciled + - lastReconciled + - lastReconciledDuration + - lastReconciledStatus + - totalReconciliations + type: object + type: array + inventory: + description: |- + Inventory contains the list of Kubernetes resource object references that + have been successfully applied. + properties: + entries: + description: Entries of Kubernetes resource object references. + items: + description: ResourceRef contains the information necessary + to locate a resource within a cluster. + properties: + id: + description: |- + ID is the string representation of the Kubernetes resource object's metadata, + in the format '___'. + type: string + v: + description: Version is the API version of the Kubernetes + resource object's kind. + type: string + required: + - id + - v + type: object + type: array + required: + - entries + type: object + lastAppliedOriginRevision: + description: |- + The last successfully applied origin revision. + Equals the origin revision of the applied Artifact from the referenced Source. + Usually present on the Metadata of the applied Artifact and depends on the + Source type, e.g. for OCI it's the value associated with the key + "org.opencontainers.image.revision". + type: string + lastAppliedRevision: + description: |- + The last successfully applied revision. + Equals the Revision of the applied Artifact from the referenced Source. + type: string + lastAttemptedRevision: + description: LastAttemptedRevision is the revision of the last reconciliation + attempt. + type: string + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedGeneration: + description: ObservedGeneration is the last reconciled generation. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: kustomize-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: kustomize-controller + namespace: flux-system +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: kustomize-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + control-plane: controller + name: kustomize-controller + namespace: flux-system +spec: + replicas: 1 + selector: + matchLabels: + app: kustomize-controller + template: + metadata: + annotations: + prometheus.io/port: "8080" + prometheus.io/scrape: "true" + labels: + app: kustomize-controller + app.kubernetes.io/component: kustomize-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + spec: + containers: + - args: + - --events-addr=http://notification-controller.$(RUNTIME_NAMESPACE).svc.cluster.local./ + - --watch-all-namespaces=true + - --log-level=info + - --log-encoding=json + - --enable-leader-election + env: + - name: RUNTIME_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + containerName: manager + resource: limits.memory + image: ghcr.io/fluxcd/kustomize-controller:v1.8.3 + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /healthz + port: healthz + name: manager + ports: + - containerPort: 8080 + name: http-prom + protocol: TCP + - containerPort: 9440 + name: healthz + protocol: TCP + readinessProbe: + httpGet: + path: /readyz + port: healthz + resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 100m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /tmp + name: temp + nodeSelector: + kubernetes.io/os: linux + priorityClassName: system-cluster-critical + securityContext: + fsGroup: 1337 + serviceAccountName: kustomize-controller + terminationGracePeriodSeconds: 60 + volumes: + - emptyDir: {} + name: temp +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: helm-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: helmreleases.helm.toolkit.fluxcd.io +spec: + group: helm.toolkit.fluxcd.io + names: + kind: HelmRelease + listKind: HelmReleaseList + plural: helmreleases + shortNames: + - hr + singular: helmrelease + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + name: v2 + schema: + openAPIV3Schema: + description: HelmRelease is the Schema for the helmreleases API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: HelmReleaseSpec defines the desired state of a Helm release. + properties: + chart: + description: |- + Chart defines the template of the v1.HelmChart that should be created + for this HelmRelease. + properties: + metadata: + description: ObjectMeta holds the template for metadata like labels + and annotations. + properties: + annotations: + additionalProperties: + type: string + description: |- + Annotations is an unstructured key value map stored with a resource that may be + set by external tools to store and retrieve arbitrary metadata. They are not + queryable and should be preserved when modifying objects. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + type: object + labels: + additionalProperties: + type: string + description: |- + Map of string keys and values that can be used to organize and categorize + (scope and select) objects. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + type: object + type: object + spec: + description: Spec holds the template for the v1.HelmChartSpec + for this HelmRelease. + properties: + chart: + description: The name or path the Helm chart is available + at in the SourceRef. + maxLength: 2048 + minLength: 1 + type: string + ignoreMissingValuesFiles: + description: IgnoreMissingValuesFiles controls whether to + silently ignore missing values files rather than failing. + type: boolean + interval: + description: |- + Interval at which to check the v1.Source for updates. Defaults to + 'HelmReleaseSpec.Interval'. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + reconcileStrategy: + default: ChartVersion + description: |- + Determines what enables the creation of a new artifact. Valid values are + ('ChartVersion', 'Revision'). + See the documentation of the values for an explanation on their behavior. + Defaults to ChartVersion when omitted. + enum: + - ChartVersion + - Revision + type: string + sourceRef: + description: The name and namespace of the v1.Source the chart + is available at. + properties: + apiVersion: + description: APIVersion of the referent. + type: string + kind: + description: Kind of the referent. + enum: + - HelmRepository + - GitRepository + - Bucket + type: string + name: + description: Name of the referent. + maxLength: 253 + minLength: 1 + type: string + namespace: + description: Namespace of the referent. + maxLength: 63 + minLength: 1 + type: string + required: + - kind + - name + type: object + valuesFiles: + description: |- + Alternative list of values files to use as the chart values (values.yaml + is not included by default), expected to be a relative path in the SourceRef. + Values files are merged in the order of this list with the last file overriding + the first. Ignored when omitted. + items: + type: string + type: array + verify: + description: |- + Verify contains the secret name containing the trusted public keys + used to verify the signature and specifies which provider to use to check + whether OCI image is authentic. + This field is only supported for OCI sources. + Chart dependencies, which are not bundled in the umbrella chart artifact, + are not verified. + properties: + provider: + default: cosign + description: Provider specifies the technology used to + sign the OCI Helm chart. + enum: + - cosign + - notation + type: string + secretRef: + description: |- + SecretRef specifies the Kubernetes Secret containing the + trusted public keys. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + required: + - provider + type: object + version: + default: '*' + description: |- + Version semver expression, ignored for charts from v1.GitRepository and + v1beta2.Bucket sources. Defaults to latest when omitted. + type: string + required: + - chart + - sourceRef + type: object + required: + - spec + type: object + chartRef: + description: |- + ChartRef holds a reference to a source controller resource containing the + Helm chart artifact. + properties: + apiVersion: + description: APIVersion of the referent. + type: string + kind: + description: Kind of the referent. + enum: + - OCIRepository + - HelmChart + - ExternalArtifact + type: string + name: + description: Name of the referent. + maxLength: 253 + minLength: 1 + type: string + namespace: + description: |- + Namespace of the referent, defaults to the namespace of the Kubernetes + resource object that contains the reference. + maxLength: 63 + minLength: 1 + type: string + required: + - kind + - name + type: object + commonMetadata: + description: |- + CommonMetadata specifies the common labels and annotations that are + applied to all resources. Any existing label or annotation will be + overridden if its key matches a common one. + properties: + annotations: + additionalProperties: + type: string + description: Annotations to be added to the object's metadata. + type: object + labels: + additionalProperties: + type: string + description: Labels to be added to the object's metadata. + type: object + type: object + dependsOn: + description: |- + DependsOn may contain a DependencyReference slice with + references to HelmRelease resources that must be ready before this HelmRelease + can be reconciled. + items: + description: DependencyReference defines a HelmRelease dependency + on another HelmRelease resource. + properties: + name: + description: Name of the referent. + type: string + namespace: + description: |- + Namespace of the referent, defaults to the namespace of the HelmRelease + resource object that contains the reference. + type: string + readyExpr: + description: |- + ReadyExpr is a CEL expression that can be used to assess the readiness + of a dependency. When specified, the built-in readiness check + is replaced by the logic defined in the CEL expression. + To make the CEL expression additive to the built-in readiness check, + the feature gate `AdditiveCELDependencyCheck` must be set to `true`. + type: string + required: + - name + type: object + type: array + driftDetection: + description: |- + DriftDetection holds the configuration for detecting and handling + differences between the manifest in the Helm storage and the resources + currently existing in the cluster. + properties: + ignore: + description: |- + Ignore contains a list of rules for specifying which changes to ignore + during diffing. + items: + description: |- + IgnoreRule defines a rule to selectively disregard specific changes during + the drift detection process. + properties: + paths: + description: |- + Paths is a list of JSON Pointer (RFC 6901) paths to be excluded from + consideration in a Kubernetes object. + items: + type: string + type: array + target: + description: |- + Target is a selector for specifying Kubernetes objects to which this + rule applies. + If Target is not set, the Paths will be ignored for all Kubernetes + objects within the manifest of the Helm release. + properties: + annotationSelector: + description: |- + AnnotationSelector is a string that follows the label selection expression + https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource annotations. + type: string + group: + description: |- + Group is the API group to select resources from. + Together with Version and Kind it is capable of unambiguously identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + kind: + description: |- + Kind of the API Group to select resources from. + Together with Group and Version it is capable of unambiguously + identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + labelSelector: + description: |- + LabelSelector is a string that follows the label selection expression + https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource labels. + type: string + name: + description: Name to match resources with. + type: string + namespace: + description: Namespace to select resources from. + type: string + version: + description: |- + Version of the API Group to select resources from. + Together with Group and Kind it is capable of unambiguously identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + type: object + required: + - paths + type: object + type: array + mode: + description: |- + Mode defines how differences should be handled between the Helm manifest + and the manifest currently applied to the cluster. + If not explicitly set, it defaults to DiffModeDisabled. + enum: + - enabled + - warn + - disabled + type: string + type: object + healthCheckExprs: + description: |- + HealthCheckExprs is a list of healthcheck expressions for evaluating the + health of custom resources using Common Expression Language (CEL). + The expressions are evaluated only when the specific Helm action + taking place has wait enabled, i.e. DisableWait is false, and the + 'poller' WaitStrategy is used. + items: + description: CustomHealthCheck defines the health check for custom + resources. + properties: + apiVersion: + description: APIVersion of the custom resource under evaluation. + type: string + current: + description: |- + Current is the CEL expression that determines if the status + of the custom resource has reached the desired state. + type: string + failed: + description: |- + Failed is the CEL expression that determines if the status + of the custom resource has failed to reach the desired state. + type: string + inProgress: + description: |- + InProgress is the CEL expression that determines if the status + of the custom resource has not yet reached the desired state. + type: string + kind: + description: Kind of the custom resource under evaluation. + type: string + required: + - apiVersion + - current + - kind + type: object + type: array + install: + description: Install holds the configuration for Helm install actions + for this HelmRelease. + properties: + crds: + description: |- + CRDs upgrade CRDs from the Helm Chart's crds directory according + to the CRD upgrade policy provided here. Valid values are `Skip`, + `Create` or `CreateReplace`. Default is `Create` and if omitted + CRDs are installed but not updated. + + Skip: do neither install nor replace (update) any CRDs. + + Create: new CRDs are created, existing CRDs are neither updated nor deleted. + + CreateReplace: new CRDs are created, existing CRDs are updated (replaced) + but not deleted. + + By default, CRDs are applied (installed) during Helm install action. + With this option users can opt in to CRD replace existing CRDs on Helm + install actions, which is not (yet) natively supported by Helm. + https://helm.sh/docs/chart_best_practices/custom_resource_definitions. + enum: + - Skip + - Create + - CreateReplace + type: string + createNamespace: + description: |- + CreateNamespace tells the Helm install action to create the + HelmReleaseSpec.TargetNamespace if it does not exist yet. + On uninstall, the namespace will not be garbage collected. + type: boolean + disableHooks: + description: DisableHooks prevents hooks from running during the + Helm install action. + type: boolean + disableOpenAPIValidation: + description: |- + DisableOpenAPIValidation prevents the Helm install action from validating + rendered templates against the Kubernetes OpenAPI Schema. + type: boolean + disableSchemaValidation: + description: |- + DisableSchemaValidation prevents the Helm install action from validating + the values against the JSON Schema. + type: boolean + disableTakeOwnership: + description: |- + DisableTakeOwnership disables taking ownership of existing resources + during the Helm install action. Defaults to false. + type: boolean + disableWait: + description: |- + DisableWait disables the waiting for resources to be ready after a Helm + install has been performed. + type: boolean + disableWaitForJobs: + description: |- + DisableWaitForJobs disables waiting for jobs to complete after a Helm + install has been performed. + type: boolean + remediation: + description: |- + Remediation holds the remediation configuration for when the Helm install + action for the HelmRelease fails. The default is to not perform any action. + properties: + ignoreTestFailures: + description: |- + IgnoreTestFailures tells the controller to skip remediation when the Helm + tests are run after an install action but fail. Defaults to + 'Test.IgnoreFailures'. + type: boolean + remediateLastFailure: + description: |- + RemediateLastFailure tells the controller to remediate the last failure, when + no retries remain. Defaults to 'false'. + type: boolean + retries: + description: |- + Retries is the number of retries that should be attempted on failures before + bailing. Remediation, using an uninstall, is performed between each attempt. + Defaults to '0', a negative integer equals to unlimited retries. + type: integer + type: object + replace: + description: |- + Replace tells the Helm install action to re-use the 'ReleaseName', but only + if that name is a deleted release which remains in the history. + type: boolean + serverSideApply: + description: |- + ServerSideApply enables server-side apply for resources during install. + Defaults to true (or false when UseHelm3Defaults feature gate is enabled). + type: boolean + skipCRDs: + description: |- + SkipCRDs tells the Helm install action to not install any CRDs. By default, + CRDs are installed if not already present. + + Deprecated use CRD policy (`crds`) attribute with value `Skip` instead. + type: boolean + strategy: + description: |- + Strategy defines the install strategy to use for this HelmRelease. + Defaults to 'RemediateOnFailure', or 'RetryOnFailure' when the + DefaultToRetryOnFailure feature gate is enabled. + properties: + name: + description: Name of the install strategy. + enum: + - RemediateOnFailure + - RetryOnFailure + type: string + retryInterval: + description: |- + RetryInterval is the interval at which to retry a failed install. + Can be used only when Name is set to RetryOnFailure. + Defaults to '5m'. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + required: + - name + type: object + x-kubernetes-validations: + - message: .retryInterval cannot be set when .name is 'RemediateOnFailure' + rule: '!has(self.retryInterval) || self.name != ''RemediateOnFailure''' + timeout: + description: |- + Timeout is the time to wait for any individual Kubernetes operation (like + Jobs for hooks) during the performance of a Helm install action. Defaults to + 'HelmReleaseSpec.Timeout'. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + type: object + interval: + description: Interval at which to reconcile the Helm release. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + kubeConfig: + description: |- + KubeConfig for reconciling the HelmRelease on a remote cluster. + When used in combination with HelmReleaseSpec.ServiceAccountName, + forces the controller to act on behalf of that Service Account at the + target cluster. + If the --default-service-account flag is set, its value will be used as + a controller level fallback for when HelmReleaseSpec.ServiceAccountName + is empty. + properties: + configMapRef: + description: |- + ConfigMapRef holds an optional name of a ConfigMap that contains + the following keys: + + - `provider`: the provider to use. One of `aws`, `azure`, `gcp`, or + `generic`. Required. + - `cluster`: the fully qualified resource name of the Kubernetes + cluster in the cloud provider API. Not used by the `generic` + provider. Required when one of `address` or `ca.crt` is not set. + - `address`: the address of the Kubernetes API server. Required + for `generic`. For the other providers, if not specified, the + first address in the cluster resource will be used, and if + specified, it must match one of the addresses in the cluster + resource. + If audiences is not set, will be used as the audience for the + `generic` provider. + - `ca.crt`: the optional PEM-encoded CA certificate for the + Kubernetes API server. If not set, the controller will use the + CA certificate from the cluster resource. + - `audiences`: the optional audiences as a list of + line-break-separated strings for the Kubernetes ServiceAccount + token. Defaults to the `address` for the `generic` provider, or + to specific values for the other providers depending on the + provider. + - `serviceAccountName`: the optional name of the Kubernetes + ServiceAccount in the same namespace that should be used + for authentication. If not specified, the controller + ServiceAccount will be used. + + Mutually exclusive with SecretRef. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + secretRef: + description: |- + SecretRef holds an optional name of a secret that contains a key with + the kubeconfig file as the value. If no key is set, the key will default + to 'value'. Mutually exclusive with ConfigMapRef. + It is recommended that the kubeconfig is self-contained, and the secret + is regularly updated if credentials such as a cloud-access-token expire. + Cloud specific `cmd-path` auth helpers will not function without adding + binaries and credentials to the Pod that is responsible for reconciling + Kubernetes resources. Supported only for the generic provider. + properties: + key: + description: Key in the Secret, when not specified an implementation-specific + default key is used. + type: string + name: + description: Name of the Secret. + type: string + required: + - name + type: object + type: object + x-kubernetes-validations: + - message: exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef + must be specified + rule: has(self.configMapRef) || has(self.secretRef) + - message: exactly one of spec.kubeConfig.configMapRef or spec.kubeConfig.secretRef + must be specified + rule: '!has(self.configMapRef) || !has(self.secretRef)' + maxHistory: + description: |- + MaxHistory is the number of revisions saved by Helm for this HelmRelease. + Use '0' for an unlimited number of revisions; defaults to '5'. + type: integer + persistentClient: + description: |- + PersistentClient tells the controller to use a persistent Kubernetes + client for this release. When enabled, the client will be reused for the + duration of the reconciliation, instead of being created and destroyed + for each (step of a) Helm action. + + This can improve performance, but may cause issues with some Helm charts + that for example do create Custom Resource Definitions during installation + outside Helm's CRD lifecycle hooks, which are then not observed to be + available by e.g. post-install hooks. + + If not set, it defaults to true. + type: boolean + postRenderers: + description: |- + PostRenderers holds an array of Helm PostRenderers, which will be applied in order + of their definition. + items: + description: PostRenderer contains a Helm PostRenderer specification. + properties: + kustomize: + description: Kustomization to apply as PostRenderer. + properties: + images: + description: |- + Images is a list of (image name, new name, new tag or digest) + for changing image names, tags or digests. This can also be achieved with a + patch, but this operator is simpler to specify. + items: + description: Image contains an image name, a new name, + a new tag or digest, which will replace the original + name and tag. + properties: + digest: + description: |- + Digest is the value used to replace the original image tag. + If digest is present NewTag value is ignored. + type: string + name: + description: Name is a tag-less image name. + type: string + newName: + description: NewName is the value used to replace + the original name. + type: string + newTag: + description: NewTag is the value used to replace the + original tag. + type: string + required: + - name + type: object + type: array + patches: + description: |- + Strategic merge and JSON patches, defined as inline YAML objects, + capable of targeting objects based on kind, label and annotation selectors. + items: + description: |- + Patch contains an inline StrategicMerge or JSON6902 patch, and the target the patch should + be applied to. + properties: + patch: + description: |- + Patch contains an inline StrategicMerge patch or an inline JSON6902 patch with + an array of operation objects. + type: string + target: + description: Target points to the resources that the + patch document should be applied to. + properties: + annotationSelector: + description: |- + AnnotationSelector is a string that follows the label selection expression + https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource annotations. + type: string + group: + description: |- + Group is the API group to select resources from. + Together with Version and Kind it is capable of unambiguously identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + kind: + description: |- + Kind of the API Group to select resources from. + Together with Group and Version it is capable of unambiguously + identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + labelSelector: + description: |- + LabelSelector is a string that follows the label selection expression + https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#api + It matches with the resource labels. + type: string + name: + description: Name to match resources with. + type: string + namespace: + description: Namespace to select resources from. + type: string + version: + description: |- + Version of the API Group to select resources from. + Together with Group and Kind it is capable of unambiguously identifying and/or selecting resources. + https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/api-group.md + type: string + type: object + required: + - patch + type: object + type: array + type: object + type: object + type: array + releaseName: + description: |- + ReleaseName used for the Helm release. Defaults to a composition of + '[TargetNamespace-]Name'. + maxLength: 53 + minLength: 1 + type: string + rollback: + description: Rollback holds the configuration for Helm rollback actions + for this HelmRelease. + properties: + cleanupOnFail: + description: |- + CleanupOnFail allows deletion of new resources created during the Helm + rollback action when it fails. + type: boolean + disableHooks: + description: DisableHooks prevents hooks from running during the + Helm rollback action. + type: boolean + disableWait: + description: |- + DisableWait disables the waiting for resources to be ready after a Helm + rollback has been performed. + type: boolean + disableWaitForJobs: + description: |- + DisableWaitForJobs disables waiting for jobs to complete after a Helm + rollback has been performed. + type: boolean + force: + description: Force forces resource updates through a replacement + strategy. + type: boolean + recreate: + description: |- + Recreate performs pod restarts for any managed workloads. + + Deprecated: This behavior was deprecated in Helm 3: + - Deprecation: https://github.com/helm/helm/pull/6463 + - Removal: https://github.com/helm/helm/pull/31023 + After helm-controller was upgraded to the Helm 4 SDK, + this field is no longer functional and will print a + warning if set to true. It will also be removed in a + future release. + type: boolean + serverSideApply: + description: |- + ServerSideApply enables server-side apply for resources during rollback. + Can be "enabled", "disabled", or "auto". + When "auto", server-side apply usage will be based on the release's previous usage. + Defaults to "auto". + enum: + - enabled + - disabled + - auto + type: string + timeout: + description: |- + Timeout is the time to wait for any individual Kubernetes operation (like + Jobs for hooks) during the performance of a Helm rollback action. Defaults to + 'HelmReleaseSpec.Timeout'. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + type: object + serviceAccountName: + description: |- + The name of the Kubernetes service account to impersonate + when reconciling this HelmRelease. + maxLength: 253 + minLength: 1 + type: string + storageNamespace: + description: |- + StorageNamespace used for the Helm storage. + Defaults to the namespace of the HelmRelease. + maxLength: 63 + minLength: 1 + type: string + suspend: + description: |- + Suspend tells the controller to suspend reconciliation for this HelmRelease, + it does not apply to already started reconciliations. Defaults to false. + type: boolean + targetNamespace: + description: |- + TargetNamespace to target when performing operations for the HelmRelease. + Defaults to the namespace of the HelmRelease. + maxLength: 63 + minLength: 1 + type: string + test: + description: Test holds the configuration for Helm test actions for + this HelmRelease. + properties: + enable: + description: |- + Enable enables Helm test actions for this HelmRelease after an Helm install + or upgrade action has been performed. + type: boolean + filters: + description: Filters is a list of tests to run or exclude from + running. + items: + description: Filter holds the configuration for individual Helm + test filters. + properties: + exclude: + description: Exclude specifies whether the named test should + be excluded. + type: boolean + name: + description: Name is the name of the test. + maxLength: 253 + minLength: 1 + type: string + required: + - name + type: object + type: array + ignoreFailures: + description: |- + IgnoreFailures tells the controller to skip remediation when the Helm tests + are run but fail. Can be overwritten for tests run after install or upgrade + actions in 'Install.IgnoreTestFailures' and 'Upgrade.IgnoreTestFailures'. + type: boolean + timeout: + description: |- + Timeout is the time to wait for any individual Kubernetes operation during + the performance of a Helm test action. Defaults to 'HelmReleaseSpec.Timeout'. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + type: object + timeout: + description: |- + Timeout is the time to wait for any individual Kubernetes operation (like Jobs + for hooks) during the performance of a Helm action. Defaults to '5m0s'. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + uninstall: + description: Uninstall holds the configuration for Helm uninstall + actions for this HelmRelease. + properties: + deletionPropagation: + default: background + description: |- + DeletionPropagation specifies the deletion propagation policy when + a Helm uninstall is performed. + enum: + - background + - foreground + - orphan + type: string + disableHooks: + description: DisableHooks prevents hooks from running during the + Helm rollback action. + type: boolean + disableWait: + description: |- + DisableWait disables waiting for all the resources to be deleted after + a Helm uninstall is performed. + type: boolean + keepHistory: + description: |- + KeepHistory tells Helm to remove all associated resources and mark the + release as deleted, but retain the release history. + type: boolean + timeout: + description: |- + Timeout is the time to wait for any individual Kubernetes operation (like + Jobs for hooks) during the performance of a Helm uninstall action. Defaults + to 'HelmReleaseSpec.Timeout'. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + type: object + upgrade: + description: Upgrade holds the configuration for Helm upgrade actions + for this HelmRelease. + properties: + cleanupOnFail: + description: |- + CleanupOnFail allows deletion of new resources created during the Helm + upgrade action when it fails. + type: boolean + crds: + description: |- + CRDs upgrade CRDs from the Helm Chart's crds directory according + to the CRD upgrade policy provided here. Valid values are `Skip`, + `Create` or `CreateReplace`. Default is `Skip` and if omitted + CRDs are neither installed nor upgraded. + + Skip: do neither install nor replace (update) any CRDs. + + Create: new CRDs are created, existing CRDs are neither updated nor deleted. + + CreateReplace: new CRDs are created, existing CRDs are updated (replaced) + but not deleted. + + By default, CRDs are not applied during Helm upgrade action. With this + option users can opt-in to CRD upgrade, which is not (yet) natively supported by Helm. + https://helm.sh/docs/chart_best_practices/custom_resource_definitions. + enum: + - Skip + - Create + - CreateReplace + type: string + disableHooks: + description: DisableHooks prevents hooks from running during the + Helm upgrade action. + type: boolean + disableOpenAPIValidation: + description: |- + DisableOpenAPIValidation prevents the Helm upgrade action from validating + rendered templates against the Kubernetes OpenAPI Schema. + type: boolean + disableSchemaValidation: + description: |- + DisableSchemaValidation prevents the Helm upgrade action from validating + the values against the JSON Schema. + type: boolean + disableTakeOwnership: + description: |- + DisableTakeOwnership disables taking ownership of existing resources + during the Helm upgrade action. Defaults to false. + type: boolean + disableWait: + description: |- + DisableWait disables the waiting for resources to be ready after a Helm + upgrade has been performed. + type: boolean + disableWaitForJobs: + description: |- + DisableWaitForJobs disables waiting for jobs to complete after a Helm + upgrade has been performed. + type: boolean + force: + description: Force forces resource updates through a replacement + strategy. + type: boolean + preserveValues: + description: |- + PreserveValues will make Helm reuse the last release's values and merge in + overrides from 'Values'. Setting this flag makes the HelmRelease + non-declarative. + type: boolean + remediation: + description: |- + Remediation holds the remediation configuration for when the Helm upgrade + action for the HelmRelease fails. The default is to not perform any action. + properties: + ignoreTestFailures: + description: |- + IgnoreTestFailures tells the controller to skip remediation when the Helm + tests are run after an upgrade action but fail. + Defaults to 'Test.IgnoreFailures'. + type: boolean + remediateLastFailure: + description: |- + RemediateLastFailure tells the controller to remediate the last failure, when + no retries remain. Defaults to 'false' unless 'Retries' is greater than 0. + type: boolean + retries: + description: |- + Retries is the number of retries that should be attempted on failures before + bailing. Remediation, using 'Strategy', is performed between each attempt. + Defaults to '0', a negative integer equals to unlimited retries. + type: integer + strategy: + description: Strategy to use for failure remediation. Defaults + to 'rollback'. + enum: + - rollback + - uninstall + type: string + type: object + serverSideApply: + description: |- + ServerSideApply enables server-side apply for resources during upgrade. + Can be "enabled", "disabled", or "auto". + When "auto", server-side apply usage will be based on the release's previous usage. + Defaults to "auto". + enum: + - enabled + - disabled + - auto + type: string + strategy: + description: |- + Strategy defines the upgrade strategy to use for this HelmRelease. + Defaults to 'RemediateOnFailure', or 'RetryOnFailure' when the + DefaultToRetryOnFailure feature gate is enabled. + properties: + name: + description: Name of the upgrade strategy. + enum: + - RemediateOnFailure + - RetryOnFailure + type: string + retryInterval: + description: |- + RetryInterval is the interval at which to retry a failed upgrade. + Can be used only when Name is set to RetryOnFailure. + Defaults to '5m'. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + required: + - name + type: object + x-kubernetes-validations: + - message: .retryInterval can only be set when .name is 'RetryOnFailure' + rule: '!has(self.retryInterval) || self.name == ''RetryOnFailure''' + timeout: + description: |- + Timeout is the time to wait for any individual Kubernetes operation (like + Jobs for hooks) during the performance of a Helm upgrade action. Defaults to + 'HelmReleaseSpec.Timeout'. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + type: object + values: + description: Values holds the values for this Helm release. + x-kubernetes-preserve-unknown-fields: true + valuesFrom: + description: |- + ValuesFrom holds references to resources containing Helm values for this HelmRelease, + and information about how they should be merged. + items: + description: |- + ValuesReference contains a reference to a resource containing Helm values, + and optionally the key they can be found at. + properties: + kind: + description: Kind of the values referent, valid values are ('Secret', + 'ConfigMap'). + enum: + - Secret + - ConfigMap + type: string + name: + description: |- + Name of the values referent. Should reside in the same namespace as the + referring resource. + maxLength: 253 + minLength: 1 + type: string + optional: + description: |- + Optional marks this ValuesReference as optional. When set, a not found error + for the values reference is ignored, but any ValuesKey, TargetPath or + transient error will still result in a reconciliation failure. + type: boolean + targetPath: + description: |- + TargetPath is the YAML dot notation path the value should be merged at. When + set, the ValuesKey is expected to be a single flat value. Defaults to 'None', + which results in the values getting merged at the root. + maxLength: 250 + pattern: ^([a-zA-Z0-9_\-.\\\/]|\[[0-9]{1,5}\])+$ + type: string + valuesKey: + description: |- + ValuesKey is the data key where the values.yaml or a specific value can be + found at. Defaults to 'values.yaml'. + maxLength: 253 + pattern: ^[\-._a-zA-Z0-9]+$ + type: string + required: + - kind + - name + type: object + type: array + waitStrategy: + description: |- + WaitStrategy defines Helm's wait strategy for waiting for applied + resources to become ready. + properties: + name: + description: |- + Name is Helm's wait strategy for waiting for applied resources to + become ready. One of 'poller' or 'legacy'. The 'poller' strategy uses + kstatus to poll resource statuses, while the 'legacy' strategy uses + Helm v3's waiting logic. + Defaults to 'poller', or to 'legacy' when UseHelm3Defaults feature + gate is enabled. + enum: + - poller + - legacy + type: string + required: + - name + type: object + required: + - interval + type: object + x-kubernetes-validations: + - message: either chart or chartRef must be set + rule: (has(self.chart) && !has(self.chartRef)) || (!has(self.chart) + && has(self.chartRef)) + status: + default: + observedGeneration: -1 + description: HelmReleaseStatus defines the observed state of a HelmRelease. + properties: + conditions: + description: Conditions holds the conditions for the HelmRelease. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + failures: + description: |- + Failures is the reconciliation failure count against the latest desired + state. It is reset after a successful reconciliation. + format: int64 + type: integer + helmChart: + description: |- + HelmChart is the namespaced name of the HelmChart resource created by + the controller for the HelmRelease. + type: string + history: + description: |- + History holds the history of Helm releases performed for this HelmRelease + up to the last successfully completed release. + items: + description: |- + Snapshot captures a point-in-time copy of the status information for a Helm release, + as managed by the controller. + properties: + action: + description: Action is the action that resulted in this snapshot + being created. + type: string + apiVersion: + description: |- + APIVersion is the API version of the Snapshot. + When the calculation method of the Digest field is changed, this + field will be used to distinguish between the old and new methods. + type: string + appVersion: + description: AppVersion is the chart app version of the release + object in storage. + type: string + chartName: + description: ChartName is the chart name of the release object + in storage. + type: string + chartVersion: + description: |- + ChartVersion is the chart version of the release object in + storage. + type: string + configDigest: + description: |- + ConfigDigest is the checksum of the config (better known as + "values") of the release object in storage. + It has the format of `:`. + type: string + deleted: + description: Deleted is when the release was deleted. + format: date-time + type: string + digest: + description: |- + Digest is the checksum of the release object in storage. + It has the format of `:`. + type: string + firstDeployed: + description: FirstDeployed is when the release was first deployed. + format: date-time + type: string + lastDeployed: + description: LastDeployed is when the release was last deployed. + format: date-time + type: string + name: + description: Name is the name of the release. + type: string + namespace: + description: Namespace is the namespace the release is deployed + to. + type: string + ociDigest: + description: OCIDigest is the digest of the OCI artifact associated + with the release. + type: string + status: + description: Status is the current state of the release. + type: string + testHooks: + additionalProperties: + description: |- + TestHookStatus holds the status information for a test hook as observed + to be run by the controller. + properties: + lastCompleted: + description: LastCompleted is the time the test hook last + completed. + format: date-time + type: string + lastStarted: + description: LastStarted is the time the test hook was + last started. + format: date-time + type: string + phase: + description: Phase the test hook was observed to be in. + type: string + type: object + description: |- + TestHooks is the list of test hooks for the release as observed to be + run by the controller. + type: object + version: + description: Version is the version of the release object in + storage. + type: integer + required: + - chartName + - chartVersion + - configDigest + - digest + - firstDeployed + - lastDeployed + - name + - namespace + - status + - version + type: object + type: array + installFailures: + description: |- + InstallFailures is the install failure count against the latest desired + state. It is reset after a successful reconciliation. + format: int64 + type: integer + inventory: + description: |- + Inventory contains the list of Kubernetes resource object references + that have been applied for this release. + properties: + entries: + description: Entries of Kubernetes resource object references. + items: + description: ResourceRef contains the information necessary + to locate a resource within a cluster. + properties: + id: + description: |- + ID is the string representation of the Kubernetes resource object's metadata, + in the format '___'. + type: string + v: + description: Version is the API version of the Kubernetes + resource object's kind. + type: string + required: + - id + - v + type: object + type: array + required: + - entries + type: object + lastAttemptedConfigDigest: + description: |- + LastAttemptedConfigDigest is the digest for the config (better known as + "values") of the last reconciliation attempt. + type: string + lastAttemptedGeneration: + description: |- + LastAttemptedGeneration is the last generation the controller attempted + to reconcile. + format: int64 + type: integer + lastAttemptedReleaseAction: + description: |- + LastAttemptedReleaseAction is the last release action performed for this + HelmRelease. It is used to determine the active retry or remediation + strategy. + enum: + - install + - upgrade + type: string + lastAttemptedReleaseActionDuration: + description: |- + LastAttemptedReleaseActionDuration is the duration of the last + release action performed for this HelmRelease. + type: string + lastAttemptedRevision: + description: |- + LastAttemptedRevision is the Source revision of the last reconciliation + attempt. For OCIRepository sources, the 12 first characters of the digest are + appended to the chart version e.g. "1.2.3+1234567890ab". + type: string + lastAttemptedRevisionDigest: + description: |- + LastAttemptedRevisionDigest is the digest of the last reconciliation attempt. + This is only set for OCIRepository sources. + type: string + lastAttemptedValuesChecksum: + description: |- + LastAttemptedValuesChecksum is the SHA1 checksum for the values of the last + reconciliation attempt. + + Deprecated: Use LastAttemptedConfigDigest instead. + type: string + lastHandledForceAt: + description: |- + LastHandledForceAt holds the value of the most recent + force request value, so a change of the annotation value + can be detected. + type: string + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + lastHandledResetAt: + description: |- + LastHandledResetAt holds the value of the most recent reset request + value, so a change of the annotation value can be detected. + type: string + lastReleaseRevision: + description: |- + LastReleaseRevision is the revision of the last successful Helm release. + + Deprecated: Use History instead. + type: integer + observedCommonMetadataDigest: + description: |- + ObservedCommonMetadataDigest is the digest for the common metadata of + the last successful reconciliation attempt. + type: string + observedGeneration: + description: ObservedGeneration is the last observed generation. + format: int64 + type: integer + observedPostRenderersDigest: + description: |- + ObservedPostRenderersDigest is the digest for the post-renderers of + the last successful reconciliation attempt. + type: string + storageNamespace: + description: |- + StorageNamespace is the namespace of the Helm release storage for the + current release. + maxLength: 63 + minLength: 1 + type: string + upgradeFailures: + description: |- + UpgradeFailures is the upgrade failure count against the latest desired + state. It is reset after a successful reconciliation. + format: int64 + type: integer + type: object + type: object + served: true + storage: true + subresources: + status: {} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: helm-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: helm-controller + namespace: flux-system +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: helm-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + control-plane: controller + name: helm-controller + namespace: flux-system +spec: + replicas: 1 + selector: + matchLabels: + app: helm-controller + template: + metadata: + annotations: + prometheus.io/port: "8080" + prometheus.io/scrape: "true" + labels: + app: helm-controller + app.kubernetes.io/component: helm-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + spec: + containers: + - args: + - --events-addr=http://notification-controller.$(RUNTIME_NAMESPACE).svc.cluster.local./ + - --watch-all-namespaces=true + - --log-level=info + - --log-encoding=json + - --enable-leader-election + env: + - name: RUNTIME_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + containerName: manager + resource: limits.memory + image: ghcr.io/fluxcd/helm-controller:v1.5.3 + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /healthz + port: healthz + name: manager + ports: + - containerPort: 8080 + name: http-prom + protocol: TCP + - containerPort: 9440 + name: healthz + protocol: TCP + readinessProbe: + httpGet: + path: /readyz + port: healthz + resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 100m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /tmp + name: temp + nodeSelector: + kubernetes.io/os: linux + priorityClassName: system-cluster-critical + securityContext: + fsGroup: 1337 + serviceAccountName: helm-controller + terminationGracePeriodSeconds: 600 + volumes: + - emptyDir: {} + name: temp +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: notification-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: alerts.notification.toolkit.fluxcd.io +spec: + group: notification.toolkit.fluxcd.io + names: + kind: Alert + listKind: AlertList + plural: alerts + singular: alert + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + deprecated: true + deprecationWarning: v1beta2 Alert is deprecated, upgrade to v1beta3 + name: v1beta2 + schema: + openAPIV3Schema: + description: Alert is the Schema for the alerts API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: AlertSpec defines an alerting rule for events involving a + list of objects. + properties: + eventMetadata: + additionalProperties: + type: string + description: |- + EventMetadata is an optional field for adding metadata to events dispatched by the + controller. This can be used for enhancing the context of the event. If a field + would override one already present on the original event as generated by the emitter, + then the override doesn't happen, i.e. the original value is preserved, and an info + log is printed. + type: object + eventSeverity: + default: info + description: |- + EventSeverity specifies how to filter events based on severity. + If set to 'info' no events will be filtered. + enum: + - info + - error + type: string + eventSources: + description: |- + EventSources specifies how to filter events based + on the involved object kind, name and namespace. + items: + description: |- + CrossNamespaceObjectReference contains enough information to let you locate the + typed referenced object at cluster level + properties: + apiVersion: + description: API version of the referent + type: string + kind: + description: Kind of the referent + enum: + - Bucket + - GitRepository + - Kustomization + - HelmRelease + - HelmChart + - HelmRepository + - ImageRepository + - ImagePolicy + - ImageUpdateAutomation + - OCIRepository + - ArtifactGenerator + - ExternalArtifact + type: string + matchLabels: + additionalProperties: + type: string + description: |- + MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. + MatchLabels requires the name to be set to `*`. + type: object + name: + description: |- + Name of the referent + If multiple resources are targeted `*` may be set. + maxLength: 253 + minLength: 1 + type: string + namespace: + description: Namespace of the referent + maxLength: 253 + minLength: 1 + type: string + required: + - kind + - name + type: object + type: array + exclusionList: + description: |- + ExclusionList specifies a list of Golang regular expressions + to be used for excluding messages. + items: + type: string + type: array + inclusionList: + description: |- + InclusionList specifies a list of Golang regular expressions + to be used for including messages. + items: + type: string + type: array + providerRef: + description: ProviderRef specifies which Provider this Alert should + use. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + summary: + description: Summary holds a short description of the impact and affected + cluster. + maxLength: 255 + type: string + suspend: + description: |- + Suspend tells the controller to suspend subsequent + events handling for this Alert. + type: boolean + required: + - eventSources + - providerRef + type: object + status: + default: + observedGeneration: -1 + description: AlertStatus defines the observed state of the Alert. + properties: + conditions: + description: Conditions holds the conditions for the Alert. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedGeneration: + description: ObservedGeneration is the last observed generation. + format: int64 + type: integer + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta3 + schema: + openAPIV3Schema: + description: Alert is the Schema for the alerts API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: AlertSpec defines an alerting rule for events involving a + list of objects. + properties: + eventMetadata: + additionalProperties: + type: string + description: |- + EventMetadata is an optional field for adding metadata to events dispatched by the + controller. This can be used for enhancing the context of the event. If a field + would override one already present on the original event as generated by the emitter, + then the override doesn't happen, i.e. the original value is preserved, and an info + log is printed. + type: object + eventSeverity: + default: info + description: |- + EventSeverity specifies how to filter events based on severity. + If set to 'info' no events will be filtered. + enum: + - info + - error + type: string + eventSources: + description: |- + EventSources specifies how to filter events based + on the involved object kind, name and namespace. + items: + description: |- + CrossNamespaceObjectReference contains enough information to let you locate the + typed referenced object at cluster level + properties: + apiVersion: + description: API version of the referent + type: string + kind: + description: Kind of the referent + enum: + - Bucket + - GitRepository + - Kustomization + - HelmRelease + - HelmChart + - HelmRepository + - ImageRepository + - ImagePolicy + - ImageUpdateAutomation + - OCIRepository + - ArtifactGenerator + - ExternalArtifact + type: string + matchLabels: + additionalProperties: + type: string + description: |- + MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. + MatchLabels requires the name to be set to `*`. + type: object + name: + description: |- + Name of the referent + If multiple resources are targeted `*` may be set. + maxLength: 253 + minLength: 1 + type: string + namespace: + description: Namespace of the referent + maxLength: 253 + minLength: 1 + type: string + required: + - kind + - name + type: object + type: array + exclusionList: + description: |- + ExclusionList specifies a list of Golang regular expressions + to be used for excluding messages. + items: + type: string + type: array + inclusionList: + description: |- + InclusionList specifies a list of Golang regular expressions + to be used for including messages. + items: + type: string + type: array + providerRef: + description: ProviderRef specifies which Provider this Alert should + use. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + summary: + description: |- + Summary holds a short description of the impact and affected cluster. + Deprecated: Use EventMetadata instead. + maxLength: 255 + type: string + suspend: + description: |- + Suspend tells the controller to suspend subsequent + events handling for this Alert. + type: boolean + required: + - eventSources + - providerRef + type: object + type: object + served: true + storage: true + subresources: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: notification-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: providers.notification.toolkit.fluxcd.io +spec: + group: notification.toolkit.fluxcd.io + names: + kind: Provider + listKind: ProviderList + plural: providers + singular: provider + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + deprecated: true + deprecationWarning: v1beta2 Provider is deprecated, upgrade to v1beta3 + name: v1beta2 + schema: + openAPIV3Schema: + description: Provider is the Schema for the providers API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ProviderSpec defines the desired state of the Provider. + properties: + address: + description: |- + Address specifies the endpoint, in a generic sense, to where alerts are sent. + What kind of endpoint depends on the specific Provider type being used. + For the generic Provider, for example, this is an HTTP/S address. + For other Provider types this could be a project ID or a namespace. + maxLength: 2048 + type: string + certSecretRef: + description: |- + CertSecretRef specifies the Secret containing + a PEM-encoded CA certificate (in the `ca.crt` key). + + Note: Support for the `caFile` key has + been deprecated. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + channel: + description: Channel specifies the destination channel where events + should be posted. + maxLength: 2048 + type: string + interval: + description: Interval at which to reconcile the Provider with its + Secret references. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + proxy: + description: Proxy the HTTP/S address of the proxy server. + maxLength: 2048 + pattern: ^(http|https)://.*$ + type: string + secretRef: + description: |- + SecretRef specifies the Secret containing the authentication + credentials for this Provider. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + suspend: + description: |- + Suspend tells the controller to suspend subsequent + events handling for this Provider. + type: boolean + timeout: + description: Timeout for sending alerts to the Provider. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$ + type: string + type: + description: Type specifies which Provider implementation to use. + enum: + - slack + - discord + - msteams + - rocket + - generic + - generic-hmac + - github + - gitlab + - gitea + - bitbucketserver + - bitbucket + - azuredevops + - googlechat + - googlepubsub + - webex + - sentry + - azureeventhub + - telegram + - lark + - matrix + - opsgenie + - alertmanager + - grafana + - githubdispatch + - pagerduty + - datadog + type: string + username: + description: Username specifies the name under which events are posted. + maxLength: 2048 + type: string + required: + - type + type: object + status: + default: + observedGeneration: -1 + description: ProviderStatus defines the observed state of the Provider. + properties: + conditions: + description: Conditions holds the conditions for the Provider. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedGeneration: + description: ObservedGeneration is the last reconciled generation. + format: int64 + type: integer + type: object + type: object + served: true + storage: false + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta3 + schema: + openAPIV3Schema: + description: Provider is the Schema for the providers API + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ProviderSpec defines the desired state of the Provider. + properties: + address: + description: |- + Address specifies the endpoint, in a generic sense, to where alerts are sent. + What kind of endpoint depends on the specific Provider type being used. + For the generic Provider, for example, this is an HTTP/S address. + For other Provider types this could be a project ID or a namespace. + maxLength: 2048 + type: string + certSecretRef: + description: |- + CertSecretRef specifies the Secret containing TLS certificates + for secure communication. + + Supported configurations: + - CA-only: Server authentication (provide ca.crt only) + - mTLS: Mutual authentication (provide ca.crt + tls.crt + tls.key) + - Client-only: Client authentication with system CA (provide tls.crt + tls.key only) + + Legacy keys "caFile", "certFile", "keyFile" are supported but deprecated. Use "ca.crt", "tls.crt", "tls.key" instead. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + channel: + description: Channel specifies the destination channel where events + should be posted. + maxLength: 2048 + type: string + commitStatusExpr: + description: |- + CommitStatusExpr is a CEL expression that evaluates to a string value + that can be used to generate a custom commit status message for use + with eligible Provider types (github, gitlab, gitea, bitbucketserver, + bitbucket, azuredevops). Supported variables are: event, provider, + and alert. + type: string + interval: + description: |- + Interval at which to reconcile the Provider with its Secret references. + Deprecated and not used in v1beta3. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + proxy: + description: |- + Proxy the HTTP/S address of the proxy server. + Deprecated: Use ProxySecretRef instead. Will be removed in v1. + maxLength: 2048 + pattern: ^(http|https)://.*$ + type: string + proxySecretRef: + description: |- + ProxySecretRef specifies the Secret containing the proxy configuration + for this Provider. The Secret should contain an 'address' key with the + HTTP/S address of the proxy server. Optional 'username' and 'password' + keys can be provided for proxy authentication. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + secretRef: + description: |- + SecretRef specifies the Secret containing the authentication + credentials for this Provider. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + serviceAccountName: + description: |- + ServiceAccountName is the name of the Kubernetes ServiceAccount used to + authenticate with cloud provider services through workload identity. + This enables multi-tenant authentication without storing static credentials. + + Supported provider types: azureeventhub, azuredevops, googlepubsub + + When specified, the controller will: + 1. Create an OIDC token for the specified ServiceAccount + 2. Exchange it for cloud provider credentials via STS + 3. Use the obtained credentials for API authentication + + When unspecified, controller-level authentication is used (single-tenant). + + An error is thrown if static credentials are also defined in SecretRef. + This field requires the ObjectLevelWorkloadIdentity feature gate to be enabled. + type: string + suspend: + description: |- + Suspend tells the controller to suspend subsequent + events handling for this Provider. + type: boolean + timeout: + description: Timeout for sending alerts to the Provider. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m))+$ + type: string + type: + description: Type specifies which Provider implementation to use. + enum: + - slack + - discord + - msteams + - rocket + - generic + - generic-hmac + - github + - gitlab + - gitea + - giteapullrequestcomment + - bitbucketserver + - bitbucket + - azuredevops + - googlechat + - googlepubsub + - webex + - sentry + - azureeventhub + - telegram + - lark + - matrix + - opsgenie + - alertmanager + - grafana + - githubdispatch + - githubpullrequestcomment + - gitlabmergerequestcomment + - pagerduty + - datadog + - nats + - zulip + - otel + type: string + username: + description: Username specifies the name under which events are posted. + maxLength: 2048 + type: string + required: + - type + type: object + x-kubernetes-validations: + - message: spec.commitStatusExpr is only supported for the 'github', 'gitlab', + 'gitea', 'bitbucketserver', 'bitbucket', 'azuredevops' provider types + rule: self.type == 'github' || self.type == 'gitlab' || self.type == + 'gitea' || self.type == 'bitbucketserver' || self.type == 'bitbucket' + || self.type == 'azuredevops' || !has(self.commitStatusExpr) + type: object + served: true + storage: true + subresources: {} +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.19.0 + labels: + app.kubernetes.io/component: notification-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: receivers.notification.toolkit.fluxcd.io +spec: + group: notification.toolkit.fluxcd.io + names: + kind: Receiver + listKind: ReceiverList + plural: receivers + singular: receiver + scope: Namespaced + versions: + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + name: v1 + schema: + openAPIV3Schema: + description: Receiver is the Schema for the receivers API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ReceiverSpec defines the desired state of the Receiver. + properties: + events: + description: |- + Events specifies the list of event types to handle, + e.g. 'push' for GitHub or 'Push Hook' for GitLab. + items: + type: string + type: array + interval: + default: 10m + description: Interval at which to reconcile the Receiver with its + Secret references. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + resourceFilter: + description: |- + ResourceFilter is a CEL expression expected to return a boolean that is + evaluated for each resource referenced in the Resources field when a + webhook is received. If the expression returns false then the controller + will not request a reconciliation for the resource. + When the expression is specified the controller will parse it and mark + the object as terminally failed if the expression is invalid or does not + return a boolean. + type: string + resources: + description: A list of resources to be notified about changes. + items: + description: |- + CrossNamespaceObjectReference contains enough information to let you locate the + typed referenced object at cluster level + properties: + apiVersion: + description: API version of the referent + type: string + kind: + description: Kind of the referent + enum: + - Bucket + - GitRepository + - Kustomization + - HelmRelease + - HelmChart + - HelmRepository + - ImageRepository + - ImagePolicy + - ImageUpdateAutomation + - OCIRepository + - ArtifactGenerator + - ExternalArtifact + type: string + matchLabels: + additionalProperties: + type: string + description: |- + MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. + MatchLabels requires the name to be set to `*`. + type: object + name: + description: |- + Name of the referent + If multiple resources are targeted `*` may be set. + maxLength: 253 + minLength: 1 + type: string + namespace: + description: Namespace of the referent + maxLength: 253 + minLength: 1 + type: string + required: + - kind + - name + type: object + type: array + secretRef: + description: |- + SecretRef specifies the Secret containing the token used + to validate the payload authenticity. The Secret must contain a 'token' + key. For GCR receivers, the Secret must also contain an 'email' key + with the IAM service account email configured on the Pub/Sub push + subscription, and may optionally contain an 'audience' key with the + expected OIDC token audience. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + suspend: + description: |- + Suspend tells the controller to suspend subsequent + events handling for this receiver. + type: boolean + type: + description: |- + Type of webhook sender, used to determine + the validation procedure and payload deserialization. + enum: + - generic + - generic-hmac + - github + - gitlab + - bitbucket + - harbor + - dockerhub + - quay + - gcr + - nexus + - acr + - cdevents + type: string + required: + - resources + - secretRef + - type + type: object + status: + default: + observedGeneration: -1 + description: ReceiverStatus defines the observed state of the Receiver. + properties: + conditions: + description: Conditions holds the conditions for the Receiver. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedGeneration: + description: ObservedGeneration is the last observed generation of + the Receiver object. + format: int64 + type: integer + webhookPath: + description: |- + WebhookPath is the generated incoming webhook address in the format + of '/hook/sha256sum(token+name+namespace)'. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} + - additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + - jsonPath: .status.conditions[?(@.type=="Ready")].status + name: Ready + type: string + - jsonPath: .status.conditions[?(@.type=="Ready")].message + name: Status + type: string + deprecated: true + deprecationWarning: v1beta2 Receiver is deprecated, upgrade to v1 + name: v1beta2 + schema: + openAPIV3Schema: + description: Receiver is the Schema for the receivers API. + properties: + apiVersion: + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + type: string + kind: + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + type: string + metadata: + type: object + spec: + description: ReceiverSpec defines the desired state of the Receiver. + properties: + events: + description: |- + Events specifies the list of event types to handle, + e.g. 'push' for GitHub or 'Push Hook' for GitLab. + items: + type: string + type: array + interval: + description: Interval at which to reconcile the Receiver with its + Secret references. + pattern: ^([0-9]+(\.[0-9]+)?(ms|s|m|h))+$ + type: string + resources: + description: A list of resources to be notified about changes. + items: + description: |- + CrossNamespaceObjectReference contains enough information to let you locate the + typed referenced object at cluster level + properties: + apiVersion: + description: API version of the referent + type: string + kind: + description: Kind of the referent + enum: + - Bucket + - GitRepository + - Kustomization + - HelmRelease + - HelmChart + - HelmRepository + - ImageRepository + - ImagePolicy + - ImageUpdateAutomation + - OCIRepository + - ArtifactGenerator + - ExternalArtifact + type: string + matchLabels: + additionalProperties: + type: string + description: |- + MatchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. + MatchLabels requires the name to be set to `*`. + type: object + name: + description: |- + Name of the referent + If multiple resources are targeted `*` may be set. + maxLength: 253 + minLength: 1 + type: string + namespace: + description: Namespace of the referent + maxLength: 253 + minLength: 1 + type: string + required: + - kind + - name + type: object + type: array + secretRef: + description: |- + SecretRef specifies the Secret containing the token used + to validate the payload authenticity. + properties: + name: + description: Name of the referent. + type: string + required: + - name + type: object + suspend: + description: |- + Suspend tells the controller to suspend subsequent + events handling for this receiver. + type: boolean + type: + description: |- + Type of webhook sender, used to determine + the validation procedure and payload deserialization. + enum: + - generic + - generic-hmac + - github + - gitlab + - bitbucket + - harbor + - dockerhub + - quay + - gcr + - nexus + - acr + type: string + required: + - resources + - secretRef + - type + type: object + status: + default: + observedGeneration: -1 + description: ReceiverStatus defines the observed state of the Receiver. + properties: + conditions: + description: Conditions holds the conditions for the Receiver. + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + type: array + lastHandledReconcileAt: + description: |- + LastHandledReconcileAt holds the value of the most recent + reconcile request value, so a change of the annotation value + can be detected. + type: string + observedGeneration: + description: ObservedGeneration is the last observed generation of + the Receiver object. + format: int64 + type: integer + url: + description: |- + URL is the generated incoming webhook address in the format + of '/hook/sha256sum(token+name+namespace)'. + Deprecated: Replaced by WebhookPath. + type: string + webhookPath: + description: |- + WebhookPath is the generated incoming webhook address in the format + of '/hook/sha256sum(token+name+namespace)'. + type: string + type: object + type: object + served: true + storage: false + subresources: + status: {} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + app.kubernetes.io/component: notification-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + name: notification-controller + namespace: flux-system +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: notification-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + control-plane: controller + name: notification-controller + namespace: flux-system +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: http + selector: + app: notification-controller + type: ClusterIP +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: notification-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + control-plane: controller + name: webhook-receiver + namespace: flux-system +spec: + ports: + - name: http + port: 80 + protocol: TCP + targetPort: http-webhook + selector: + app: notification-controller + type: ClusterIP +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: notification-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + control-plane: controller + name: notification-controller + namespace: flux-system +spec: + replicas: 1 + selector: + matchLabels: + app: notification-controller + template: + metadata: + annotations: + prometheus.io/port: "8080" + prometheus.io/scrape: "true" + labels: + app: notification-controller + app.kubernetes.io/component: notification-controller + app.kubernetes.io/instance: flux-system + app.kubernetes.io/part-of: flux + app.kubernetes.io/version: v2.8.5 + spec: + containers: + - args: + - --watch-all-namespaces=true + - --log-level=info + - --log-encoding=json + - --enable-leader-election + env: + - name: RUNTIME_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + - name: GOMEMLIMIT + valueFrom: + resourceFieldRef: + containerName: manager + resource: limits.memory + image: ghcr.io/fluxcd/notification-controller:v1.8.3 + imagePullPolicy: IfNotPresent + livenessProbe: + httpGet: + path: /healthz + port: healthz + name: manager + ports: + - containerPort: 9090 + name: http + protocol: TCP + - containerPort: 9292 + name: http-webhook + protocol: TCP + - containerPort: 8080 + name: http-prom + protocol: TCP + - containerPort: 9440 + name: healthz + protocol: TCP + readinessProbe: + httpGet: + path: /readyz + port: healthz + resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 100m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + runAsNonRoot: true + seccompProfile: + type: RuntimeDefault + volumeMounts: + - mountPath: /tmp + name: temp + nodeSelector: + kubernetes.io/os: linux + securityContext: + fsGroup: 1337 + serviceAccountName: notification-controller + terminationGracePeriodSeconds: 10 + volumes: + - emptyDir: {} + name: temp diff --git a/clusters/d8-ugmk-prod/flux-system/gotk-sync.yaml b/clusters/d8-ugmk-prod/flux-system/gotk-sync.yaml new file mode 100644 index 0000000..6944dd4 --- /dev/null +++ b/clusters/d8-ugmk-prod/flux-system/gotk-sync.yaml @@ -0,0 +1,27 @@ +# This manifest was generated by flux. DO NOT EDIT. +--- +apiVersion: source.toolkit.fluxcd.io/v1 +kind: GitRepository +metadata: + name: flux-system + namespace: flux-system +spec: + interval: 1m0s + ref: + branch: master + secretRef: + name: flux-system + url: http://10.222.255.165:3000/infra/iac.git +--- +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: flux-system + namespace: flux-system +spec: + interval: 10m0s + path: ./clusters/d8-ugmk-prod + prune: true + sourceRef: + kind: GitRepository + name: flux-system diff --git a/clusters/d8-ugmk-prod/flux-system/kustomization.yaml b/clusters/d8-ugmk-prod/flux-system/kustomization.yaml new file mode 100644 index 0000000..3842229 --- /dev/null +++ b/clusters/d8-ugmk-prod/flux-system/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- gotk-components.yaml +- gotk-sync.yaml diff --git a/clusters/d8-ugmk-prod/helm-repositories.yaml b/clusters/d8-ugmk-prod/helm-repositories.yaml new file mode 100644 index 0000000..bbdeea6 --- /dev/null +++ b/clusters/d8-ugmk-prod/helm-repositories.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: source.toolkit.fluxcd.io/v1 +kind: HelmRepository +metadata: + name: yc-oci-charts + namespace: flux-system +spec: + type: oci + interval: 10m0s + url: oci://cr.yandex/crp3ccidau046kdj8g9q/charts + secretRef: + name: yc-cr-auth diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml new file mode 100644 index 0000000..b741fc9 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -0,0 +1,12 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../../../infrastructure/vault +patches: + - path: ./patches/vault.yaml + target: + group: helm.toolkit.fluxcd.io + version: v2 + kind: HelmRelease + name: vault + namespace: vault diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml new file mode 100644 index 0000000..bbf62a3 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml @@ -0,0 +1,14 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: vault + namespace: vault +spec: + interval: 5m + timeout: 10m + values: + imagePullSecrets: + - name: regcred + server: + dataStorage: + storageClass: local-path diff --git a/clusters/d8-ugmk-prod/kustomization.yaml b/clusters/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..a8384a3 --- /dev/null +++ b/clusters/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ./flux-system + - ./helm-repositories.yaml + - ./infrastructure From 097696fdb4b67ed5fab8ba06b7ff994be8b53861 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Mon, 13 Jul 2026 17:13:35 +0300 Subject: [PATCH 02/28] ++ disable istio injection for vault in d8-ugmk-prod --- clusters/d8-ugmk-prod/infrastructure/kustomization.yaml | 5 +++++ .../infrastructure/patches/vault-namespace.yaml | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index b741fc9..08ccca9 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -10,3 +10,8 @@ patches: kind: HelmRelease name: vault namespace: vault + - path: ./patches/vault-namespace.yaml + target: + version: v1 + kind: Namespace + name: vault diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml new file mode 100644 index 0000000..b4e1203 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: vault + labels: + istio-injection: disabled From cb5ca1633c257b68a29fe2b8be692ceec1915bcb Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Mon, 13 Jul 2026 17:21:00 +0300 Subject: [PATCH 03/28] ++ pin vault to generic nodes in d8-ugmk-prod --- clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml index bbf62a3..4972162 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml @@ -9,6 +9,13 @@ spec: values: imagePullSecrets: - name: regcred + injector: + nodeSelector: + node.deckhouse.io/group: generic + tolerations: [] server: dataStorage: storageClass: local-path + nodeSelector: + node.deckhouse.io/group: generic + tolerations: [] From 38b96ebecc8626ae9ebf3b81d368b32173b00ca4 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Mon, 13 Jul 2026 17:26:31 +0300 Subject: [PATCH 04/28] ++ patch vault workloads to generic in d8-ugmk-prod --- .../infrastructure/patches/vault.yaml | 46 ++++++++++++++++--- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml index 4972162..a0293e6 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml @@ -6,16 +6,48 @@ metadata: spec: interval: 5m timeout: 10m + postRenderers: + - kustomize: + patches: + - target: + group: apps + version: v1 + kind: StatefulSet + name: vault-vault-contour + namespace: vault + patch: |- + apiVersion: apps/v1 + kind: StatefulSet + metadata: + name: vault-vault-contour + namespace: vault + spec: + template: + spec: + nodeSelector: + node.deckhouse.io/group: generic + tolerations: [] + - target: + group: apps + version: v1 + kind: Deployment + name: vault-vault-contour-agent-injector + namespace: vault + patch: |- + apiVersion: apps/v1 + kind: Deployment + metadata: + name: vault-vault-contour-agent-injector + namespace: vault + spec: + template: + spec: + nodeSelector: + node.deckhouse.io/group: generic + tolerations: [] values: imagePullSecrets: - name: regcred - injector: - nodeSelector: - node.deckhouse.io/group: generic - tolerations: [] server: dataStorage: storageClass: local-path - nodeSelector: - node.deckhouse.io/group: generic - tolerations: [] From 7dba565792c5c6cb3e824b786fadc7e180480f4e Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Mon, 13 Jul 2026 20:32:32 +0300 Subject: [PATCH 05/28] ++ add d8 ugmk prod service infra --- .../d8-ugmk-prod/bootstrap-jobs/README.md | 8 + .../bootstrap-jobs/kustomization.yaml | 4 + .../service-bootstrap-jobs.yaml | 245 ++++++++++++++++++ .../infrastructure/kustomization.yaml | 52 ++++ .../patches/camunda-namespace.yaml | 7 + .../infrastructure/patches/camunda.yaml | 198 ++++++++++++++ .../patches/kafka-namespace.yaml | 7 + .../infrastructure/patches/kafka.yaml | 73 ++++++ .../patches/rabbitmq-namespace.yaml | 7 + .../infrastructure/patches/rabbitmq.yaml | 58 +++++ .../patches/vault-namespace.yaml | 1 + .../infrastructure/patches/vault.yaml | 48 +--- .../patches/zitadel-namespace.yaml | 6 + .../infrastructure/patches/zitadel.yaml | 153 +++++++++++ clusters/d8-ugmk-prod/kustomization.yaml | 1 + 15 files changed, 829 insertions(+), 39 deletions(-) create mode 100644 clusters/d8-ugmk-prod/bootstrap-jobs/README.md create mode 100644 clusters/d8-ugmk-prod/bootstrap-jobs/kustomization.yaml create mode 100644 clusters/d8-ugmk-prod/bootstrap-jobs/service-bootstrap-jobs.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/camunda-namespace.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/kafka-namespace.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq-namespace.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/zitadel-namespace.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml diff --git a/clusters/d8-ugmk-prod/bootstrap-jobs/README.md b/clusters/d8-ugmk-prod/bootstrap-jobs/README.md new file mode 100644 index 0000000..ccdc83b --- /dev/null +++ b/clusters/d8-ugmk-prod/bootstrap-jobs/README.md @@ -0,0 +1,8 @@ +bootstrap-jobs для сервисных сущностей kafka и rabbitmq. + +Эти кронджобы читают сервисные описания из vault и синхронизируют: +- пользователей, виртуальные хосты и права в rabbitmq; +- пользователей и топики в kafka. + +Для нового кластера адрес vault переведен на `vault-vault-contour-active.vault.svc.cluster.local:8200`, +чтобы джобы ходили только в активный узел vault. diff --git a/clusters/d8-ugmk-prod/bootstrap-jobs/kustomization.yaml b/clusters/d8-ugmk-prod/bootstrap-jobs/kustomization.yaml new file mode 100644 index 0000000..269a32f --- /dev/null +++ b/clusters/d8-ugmk-prod/bootstrap-jobs/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - service-bootstrap-jobs.yaml diff --git a/clusters/d8-ugmk-prod/bootstrap-jobs/service-bootstrap-jobs.yaml b/clusters/d8-ugmk-prod/bootstrap-jobs/service-bootstrap-jobs.yaml new file mode 100644 index 0000000..5e7ad33 --- /dev/null +++ b/clusters/d8-ugmk-prod/bootstrap-jobs/service-bootstrap-jobs.yaml @@ -0,0 +1,245 @@ +apiVersion: batch/v1 +kind: CronJob +metadata: + name: rabbitmq-apps-bootstrap + namespace: rabbitmq +spec: + schedule: "*/10 * * * *" + successfulJobsHistoryLimit: 1 + failedJobsHistoryLimit: 2 + concurrencyPolicy: Forbid + jobTemplate: + spec: + backoffLimit: 0 + activeDeadlineSeconds: 600 + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + spec: + restartPolicy: OnFailure + serviceAccountName: rabbitmq + automountServiceAccountToken: false + volumes: + - name: sa-token + projected: + sources: + - serviceAccountToken: + path: token + expirationSeconds: 3600 + containers: + - name: bootstrap + image: alpine:3.20 + volumeMounts: + - name: sa-token + mountPath: /var/run/secrets/tokens + readOnly: true + command: ["/bin/sh", "-ec"] + args: + - | + apk add --no-cache curl jq >/dev/null + VAULT_ADDR="http://vault-vault-contour-active.vault.svc.cluster.local:8200" + JWT="$(cat /var/run/secrets/tokens/token)" + VAULT_TOKEN="$(curl -sS --request POST \ + --data "{\"role\":\"rabbitmq\",\"jwt\":\"${JWT}\"}" \ + "${VAULT_ADDR}/v1/auth/kubernetes/login" | jq -r '.auth.client_token')" + [ -n "${VAULT_TOKEN}" ] && [ "${VAULT_TOKEN}" != "null" ] + + admin_json="$(curl -sS -H "X-Vault-Token: ${VAULT_TOKEN}" "${VAULT_ADDR}/v1/secrets/data/rabbitmq/auth")" + admin_user="$(echo "${admin_json}" | jq -r '.data.data.username')" + admin_pass="$(echo "${admin_json}" | jq -r '.data.data.password')" + list_json="$(curl -sS -H "X-Vault-Token: ${VAULT_TOKEN}" "${VAULT_ADDR}/v1/secrets/metadata/rabbitmq/apps?list=true")" + for app in $(echo "${list_json}" | jq -r '.data.keys[]?' | sed 's#/$##'); do + app_json="$(curl -sS -H "X-Vault-Token: ${VAULT_TOKEN}" "${VAULT_ADDR}/v1/secrets/data/rabbitmq/apps/${app}")" + username="$(echo "${app_json}" | jq -r '.data.data.username')" + password="$(echo "${app_json}" | jq -r '.data.data.password')" + [ -z "${username}" ] && username="${app}" + [ -z "${password}" ] && continue + + curl -sS -u "${admin_user}:${admin_pass}" -H "content-type:application/json" \ + -X PUT "http://rabbitmq.rabbitmq.svc.cluster.local:15672/api/users/${username}" \ + -d "{\"password\":\"${password}\",\"tags\":\"\"}" >/dev/null + + vhosts_count="$(echo "${app_json}" | jq -r '(.data.data.vhosts // []) | length')" + if [ "${vhosts_count}" -gt 0 ]; then + echo "${app_json}" | jq -c '.data.data.vhosts[]' | while read -r vhost_item; do + vhost="$(echo "${vhost_item}" | jq -r '.name // "/"')" + configure="$(echo "${vhost_item}" | jq -r '.permissions.configure // ".*"')" + write="$(echo "${vhost_item}" | jq -r '.permissions.write // ".*"')" + read="$(echo "${vhost_item}" | jq -r '.permissions.read // ".*"')" + vhost_uri="$(jq -rn --arg v "${vhost}" '$v|@uri')" + + curl -sS -u "${admin_user}:${admin_pass}" -H "content-type:application/json" \ + -X PUT "http://rabbitmq.rabbitmq.svc.cluster.local:15672/api/vhosts/${vhost_uri}" \ + -d '{}' >/dev/null + curl -sS -u "${admin_user}:${admin_pass}" -H "content-type:application/json" \ + -X PUT "http://rabbitmq.rabbitmq.svc.cluster.local:15672/api/permissions/${vhost_uri}/${username}" \ + -d "{\"configure\":\"${configure}\",\"write\":\"${write}\",\"read\":\"${read}\"}" >/dev/null + done + else + vhost="$(echo "${app_json}" | jq -r '.data.data.vhost // "/"')" + configure="$(echo "${app_json}" | jq -r '.data.data.permissions.configure // ".*"')" + write="$(echo "${app_json}" | jq -r '.data.data.permissions.write // ".*"')" + read="$(echo "${app_json}" | jq -r '.data.data.permissions.read // ".*"')" + vhost_uri="$(jq -rn --arg v "${vhost}" '$v|@uri')" + + curl -sS -u "${admin_user}:${admin_pass}" -H "content-type:application/json" \ + -X PUT "http://rabbitmq.rabbitmq.svc.cluster.local:15672/api/vhosts/${vhost_uri}" \ + -d '{}' >/dev/null + curl -sS -u "${admin_user}:${admin_pass}" -H "content-type:application/json" \ + -X PUT "http://rabbitmq.rabbitmq.svc.cluster.local:15672/api/permissions/${vhost_uri}/${username}" \ + -d "{\"configure\":\"${configure}\",\"write\":\"${write}\",\"read\":\"${read}\"}" >/dev/null + fi + done +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: kafka-bootstrap-exec + namespace: kafka +rules: + - apiGroups: [""] + resources: ["pods"] + verbs: ["get", "list"] + - apiGroups: [""] + resources: ["pods/exec"] + verbs: ["create", "get"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: kafka-bootstrap-exec + namespace: kafka +subjects: + - kind: ServiceAccount + name: kafka-kafka-contour + namespace: kafka +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kafka-bootstrap-exec +--- +apiVersion: batch/v1 +kind: CronJob +metadata: + name: kafka-apps-bootstrap + namespace: kafka +spec: + schedule: "*/10 * * * *" + successfulJobsHistoryLimit: 1 + failedJobsHistoryLimit: 2 + concurrencyPolicy: Forbid + jobTemplate: + spec: + template: + metadata: + annotations: + sidecar.istio.io/inject: "false" + spec: + restartPolicy: OnFailure + serviceAccountName: kafka-kafka-contour + automountServiceAccountToken: true + volumes: + - name: sa-token + projected: + sources: + - serviceAccountToken: + path: token + expirationSeconds: 3600 + containers: + - name: bootstrap + image: alpine:3.20 + volumeMounts: + - name: sa-token + mountPath: /var/run/secrets/tokens + readOnly: true + command: ["/bin/sh", "-ec"] + args: + - | + set -e + apk add --no-cache bash curl jq kubectl >/dev/null + + VAULT_ADDR="http://vault-vault-contour-active.vault.svc.cluster.local:8200" + JWT="$(cat /var/run/secrets/tokens/token)" + VAULT_TOKEN="$(curl -sS --request POST \ + --data "{\"role\":\"kafka\",\"jwt\":\"${JWT}\"}" \ + "${VAULT_ADDR}/v1/auth/kubernetes/login" | jq -r '.auth.client_token')" + [ -n "${VAULT_TOKEN}" ] && [ "${VAULT_TOKEN}" != "null" ] + + bootstrap_json="$(curl -sS -H "X-Vault-Token: ${VAULT_TOKEN}" "${VAULT_ADDR}/v1/secrets/data/kafka/bootstrap")" + inter_broker_password="$(echo "${bootstrap_json}" | jq -r '.data.data.interBrokerPassword')" + [ -n "${inter_broker_password}" ] && [ "${inter_broker_password}" != "null" ] + list_json="$(curl -sS -H "X-Vault-Token: ${VAULT_TOKEN}" "${VAULT_ADDR}/v1/secrets/metadata/kafka/apps?list=true")" + target_pod="kafka-kafka-contour-controller-0" + if ! kubectl -n kafka get pod "${target_pod}" >/dev/null 2>&1; then + echo "Kafka controller pod not found" + exit 1 + fi + target_bootstrap="${target_pod}.kafka-kafka-contour-controller-headless.kafka.svc.cluster.local:9094" + + admin_props="$(mktemp)" + printf "%s\n" \ + "security.protocol=SASL_PLAINTEXT" \ + "sasl.mechanism=PLAIN" \ + "sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username='inter_broker_user' password='${inter_broker_password}';" \ + "default.api.timeout.ms=60000" \ + "request.timeout.ms=60000" \ + > "${admin_props}" + kubectl -n kafka exec -i "${target_pod}" -c kafka -- /bin/bash -lc 'cat > /tmp/admin.properties' < "${admin_props}" + rm -f "${admin_props}" + kubectl -n kafka exec "${target_pod}" -c kafka -- /bin/bash -lc 'test -s /tmp/admin.properties' + + for app in $(echo "${list_json}" | jq -r '.data.keys[]?' | sed 's#/$##'); do + app_json="$(curl -sS -H "X-Vault-Token: ${VAULT_TOKEN}" "${VAULT_ADDR}/v1/secrets/data/kafka/apps/${app}")" + username="$(echo "${app_json}" | jq -r '.data.data.username')" + password="$(echo "${app_json}" | jq -r '.data.data.password')" + [ -z "${username}" ] && username="${app}" + [ -z "${password}" ] && continue + + echo "Reconciling Kafka user ${username}" + user_reconciled=false + attempt=1 + while [ "${attempt}" -le 3 ]; do + if kubectl -n kafka exec "${target_pod}" -c kafka -- /bin/bash -lc "\ + timeout 60 /opt/bitnami/kafka/bin/kafka-configs.sh --bootstrap-server ${target_bootstrap} --command-config /tmp/admin.properties \ + --alter --add-config 'SCRAM-SHA-512=[password=${password}]' \ + --entity-type users --entity-name '${username}' + " >/dev/null; then + user_reconciled=true + break + fi + echo "Kafka user ${username} reconcile attempt ${attempt}/3 failed" + attempt=$((attempt + 1)) + sleep 5 + done + if [ "${user_reconciled}" != "true" ]; then + echo "Kafka user ${username} reconcile failed, continue" + continue + fi + + echo "${app_json}" | jq -c '.data.data.topics[]?' | while read -r topic_item; do + topic_name="$(echo "${topic_item}" | jq -r '.name // empty')" + partitions="$(echo "${topic_item}" | jq -r '.partitions // 3')" + replication_factor="$(echo "${topic_item}" | jq -r '.replication_factor // 1')" + topic_configs="$(echo "${topic_item}" | jq -r '(.configs // {}) | to_entries | map("\(.key)=\(.value|tostring)") | join(",")')" + [ -z "${topic_name}" ] && continue + + echo "Reconciling Kafka topic ${topic_name}" + if ! kubectl -n kafka exec "${target_pod}" -c kafka -- /bin/bash -lc "\ + timeout 40 /opt/bitnami/kafka/bin/kafka-topics.sh --bootstrap-server ${target_bootstrap} --command-config /tmp/admin.properties \ + --create --if-not-exists --topic '${topic_name}' --partitions '${partitions}' --replication-factor '${replication_factor}' + " >/dev/null; then + echo "Kafka topic ${topic_name} create/reconcile failed, continue" + continue + fi + + if [ -n "${topic_configs}" ]; then + if ! kubectl -n kafka exec "${target_pod}" -c kafka -- /bin/bash -lc "\ + timeout 40 /opt/bitnami/kafka/bin/kafka-configs.sh --bootstrap-server ${target_bootstrap} --command-config /tmp/admin.properties \ + --alter --entity-type topics --entity-name '${topic_name}' --add-config '${topic_configs}' + " >/dev/null; then + echo "Kafka topic ${topic_name} config reconcile failed, continue" + fi + fi + done + done diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index 08ccca9..ed28986 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -1,8 +1,48 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: + - ../../../infrastructure/kafka + - ../../../infrastructure/rabbitmq + - ../../../infrastructure/camunda - ../../../infrastructure/vault + - ../../../infrastructure/zitadel patches: + - path: ./patches/kafka.yaml + target: + group: helm.toolkit.fluxcd.io + version: v2 + kind: HelmRelease + name: kafka + namespace: kafka + - path: ./patches/kafka-namespace.yaml + target: + version: v1 + kind: Namespace + name: kafka + - path: ./patches/rabbitmq.yaml + target: + group: helm.toolkit.fluxcd.io + version: v2 + kind: HelmRelease + name: rabbitmq + namespace: rabbitmq + - path: ./patches/rabbitmq-namespace.yaml + target: + version: v1 + kind: Namespace + name: rabbitmq + - path: ./patches/camunda.yaml + target: + group: helm.toolkit.fluxcd.io + version: v2 + kind: HelmRelease + name: camunda + namespace: camunda + - path: ./patches/camunda-namespace.yaml + target: + version: v1 + kind: Namespace + name: camunda - path: ./patches/vault.yaml target: group: helm.toolkit.fluxcd.io @@ -15,3 +55,15 @@ patches: version: v1 kind: Namespace name: vault + - path: ./patches/zitadel.yaml + target: + group: helm.toolkit.fluxcd.io + version: v2 + kind: HelmRelease + name: zitadel + namespace: zitadel + - path: ./patches/zitadel-namespace.yaml + target: + version: v1 + kind: Namespace + name: zitadel diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/camunda-namespace.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/camunda-namespace.yaml new file mode 100644 index 0000000..2c6192a --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/camunda-namespace.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: camunda + labels: + istio-injection: disabled + security.deckhouse.io/pod-policy: privileged diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml new file mode 100644 index 0000000..abe0424 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml @@ -0,0 +1,198 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: camunda + namespace: camunda +spec: + dependsOn: [] + interval: 5m + timeout: 15m + postRenderers: + - kustomize: + patches: + - target: + group: apps + version: v1 + kind: Deployment + namespace: camunda + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - target: + group: apps + version: v1 + kind: StatefulSet + namespace: camunda + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - target: + group: batch + version: v1 + kind: Job + namespace: camunda + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + values: + global: + vault: + enabled: true + role: camunda + authPath: auth/kubernetes + image: + pullSecrets: + - name: regcred + identity: + auth: + publicIssuerUrl: "https://camunda-keycloak.contour.infra.sarex.tech/auth/realms/camunda-platform" + identity: + redirectUrl: "https://camunda-identity.contour.infra.sarex.tech" + operate: + redirectUrl: "https://camunda-operate.contour.infra.sarex.tech" + tasklist: + redirectUrl: "https://camunda-tasklist.contour.infra.sarex.tech" + optimize: + redirectUrl: "https://camunda-optimize.contour.infra.sarex.tech" + webModeler: + redirectUrl: "https://camunda-web-modeler.contour.infra.sarex.tech" + console: + redirectUrl: "https://camunda-console.contour.infra.sarex.tech" + identityPostgresql: + auth: + usePasswordFiles: true + primary: + automountServiceAccountToken: true + persistence: + size: 10Gi + storageClass: local-path + identityKeycloak: + postgresql: + auth: + usePasswordFiles: true + primary: + automountServiceAccountToken: true + persistence: + size: 10Gi + storageClass: local-path + vaultEnv: + enabled: true + role: camunda + authPath: auth/kubernetes + envFiles: + KEYCLOAK_ADMIN_PASSWORD: + path: secrets/data/camunda/keycloak-admin + key: admin-password + KEYCLOAK_PASSWORD: + path: secrets/data/camunda/keycloak-admin + key: admin-password + KEYCLOAK_DATABASE_PASSWORD: + path: secrets/data/camunda/postgresql + key: password + global: + storageClass: local-path + tolerations: [] + postgresql: + auth: + usePasswordFiles: true + primary: + automountServiceAccountToken: true + persistence: + size: 10Gi + storageClass: local-path + elasticsearch: + master: + persistence: + size: 10Gi + storageClass: local-path + tolerations: [] + metrics: + enabled: false + serviceMonitor: + enabled: false + prometheusRule: + enabled: false + tolerations: [] + camundaCanary: + enabled: false + prometheusServiceMonitor: + enabled: false + console: + image: + pullSecrets: + - name: regcred + tolerations: [] + zeebe: + pvcStorageClassName: local-path + image: + pullSecrets: + - name: regcred + tolerations: [] + zeebeGateway: + image: + pullSecrets: + - name: regcred + tolerations: [] + operate: + image: + pullSecrets: + - name: regcred + serviceAccount: + automountServiceAccountToken: true + tolerations: [] + tasklist: + image: + pullSecrets: + - name: regcred + serviceAccount: + automountServiceAccountToken: true + tolerations: [] + optimize: + image: + pullSecrets: + - name: regcred + serviceAccount: + automountServiceAccountToken: true + tolerations: [] + executionIdentity: + image: + pullSecrets: + - name: regcred + tolerations: [] + identity: + image: + pullSecrets: + - name: regcred + tolerations: [] + webModeler: + image: + pullSecrets: + - name: regcred + restapi: + tolerations: [] + webapp: + tolerations: [] + websockets: + tolerations: [] + connectors: + image: + pullSecrets: + - name: regcred + serviceAccount: + automountServiceAccountToken: true + tolerations: [] diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/kafka-namespace.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/kafka-namespace.yaml new file mode 100644 index 0000000..e171e07 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/kafka-namespace.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: kafka + labels: + istio-injection: disabled + security.deckhouse.io/pod-policy: privileged diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml new file mode 100644 index 0000000..b1e93fe --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml @@ -0,0 +1,73 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: kafka + namespace: kafka +spec: + interval: 5m + timeout: 10m + postRenderers: + - kustomize: + patches: + - target: + group: apps + version: v1 + kind: StatefulSet + namespace: kafka + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + values: + global: + imagePullSecrets: + - regcred + defaultStorageClass: local-path + image: + pullSecrets: + - regcred + controller: + replicaCount: 1 + automountServiceAccountToken: true + persistence: + size: 8Gi + storageClass: local-path + overrideConfiguration: + offsets.topic.replication.factor: 1 + transaction.state.log.replication.factor: 1 + transaction.state.log.min.isr: 1 + default.replication.factor: 1 + min.insync.replicas: 1 + broker: + replicaCount: 0 + automountServiceAccountToken: true + listeners: + client: + protocol: SASL_SSL + sslClientAuth: "none" + provisioning: + enabled: false + sasl: + managedExistingSecret: + enabled: false + existingSecret: "" + enabledMechanisms: PLAIN,SCRAM-SHA-512 + interBrokerMechanism: PLAIN + controllerMechanism: PLAIN + client: + users: [] + passwords: "" + tls: + type: PEM + vault: + enabled: true + role: kafka + authPath: auth/kubernetes + secretPath: secrets/data/kafka/bootstrap + clusterIdKey: clusterId + interBrokerPasswordKey: interBrokerPassword + controllerPasswordKey: controllerPassword diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq-namespace.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq-namespace.yaml new file mode 100644 index 0000000..0dff2d7 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq-namespace.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: rabbitmq + labels: + istio-injection: disabled + security.deckhouse.io/pod-policy: privileged diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml new file mode 100644 index 0000000..c1da47c --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml @@ -0,0 +1,58 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: rabbitmq + namespace: rabbitmq +spec: + interval: 5m + timeout: 10m + postRenderers: + - kustomize: + patches: + - target: + group: apps + version: v1 + kind: StatefulSet + namespace: rabbitmq + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + values: + global: + security: + allowInsecureImages: true + virtualService: null + gateway: null + certificate: null + metrics: + serviceMonitor: + enabled: false + default: + enabled: false + perObject: + enabled: false + detailed: + enabled: false + extraServiceMonitors: [] + replicaCount: 1 + resources: + requests: + memory: 1Gi + persistence: + storageClass: local-path + size: 10Gi + auth: + securePassword: true + existingPasswordSecret: "" + vault: + enabled: true + role: rabbitmq + authPath: auth/kubernetes + secretPath: secrets/data/rabbitmq/auth + usernameKey: username + passwordKey: password diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml index b4e1203..810a280 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml @@ -4,3 +4,4 @@ metadata: name: vault labels: istio-injection: disabled + security.deckhouse.io/pod-policy: privileged diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml index a0293e6..6fe5725 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml @@ -6,48 +6,18 @@ metadata: spec: interval: 5m timeout: 10m - postRenderers: - - kustomize: - patches: - - target: - group: apps - version: v1 - kind: StatefulSet - name: vault-vault-contour - namespace: vault - patch: |- - apiVersion: apps/v1 - kind: StatefulSet - metadata: - name: vault-vault-contour - namespace: vault - spec: - template: - spec: - nodeSelector: - node.deckhouse.io/group: generic - tolerations: [] - - target: - group: apps - version: v1 - kind: Deployment - name: vault-vault-contour-agent-injector - namespace: vault - patch: |- - apiVersion: apps/v1 - kind: Deployment - metadata: - name: vault-vault-contour-agent-injector - namespace: vault - spec: - template: - spec: - nodeSelector: - node.deckhouse.io/group: generic - tolerations: [] values: imagePullSecrets: - name: regcred + backup: + enabled: false + injector: + nodeSelector: + node.deckhouse.io/group: generic + tolerations: [] server: + nodeSelector: + node.deckhouse.io/group: generic + tolerations: [] dataStorage: storageClass: local-path diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/zitadel-namespace.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/zitadel-namespace.yaml new file mode 100644 index 0000000..fc379d8 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/zitadel-namespace.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: zitadel + labels: + istio-injection: disabled diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml new file mode 100644 index 0000000..5938c29 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml @@ -0,0 +1,153 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: zitadel + namespace: zitadel +spec: + interval: 5m + timeout: 10m + postRenderers: + - kustomize: + patches: + - target: + group: apps + version: v1 + kind: Deployment + name: zitadel-idp-contour + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - op: replace + path: /spec/template/metadata/annotations/vault.hashicorp.com~1agent-inject-template-zitadel-vault-config.yaml + value: |- + {{- with secret "secrets/data/zitadel/postgresql" -}} + Database: + postgres: + User: + Password: |- + {{ index .Data.data "password" }} + Admin: + Password: |- + {{ index .Data.data "adminPassword" }} + FirstInstance: + Org: + Human: + Password: |- + {{ index .Data.data "humanPassword" }} + {{- end -}} + - target: + group: batch + version: v1 + kind: Job + name: zitadel-idp-contour-init + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - op: replace + path: /spec/template/metadata/annotations/vault.hashicorp.com~1agent-inject-template-zitadel-vault-config.yaml + value: |- + {{- with secret "secrets/data/zitadel/postgresql" -}} + Database: + postgres: + User: + Password: |- + {{ index .Data.data "password" }} + Admin: + Password: |- + {{ index .Data.data "adminPassword" }} + FirstInstance: + Org: + Human: + Password: |- + {{ index .Data.data "humanPassword" }} + {{- end -}} + - target: + group: batch + version: v1 + kind: Job + name: zitadel-idp-contour-setup + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - op: replace + path: /spec/template/metadata/annotations/vault.hashicorp.com~1agent-inject-template-zitadel-vault-config.yaml + value: |- + {{- with secret "secrets/data/zitadel/postgresql" -}} + Database: + postgres: + User: + Password: |- + {{ index .Data.data "password" }} + Admin: + Password: |- + {{ index .Data.data "adminPassword" }} + FirstInstance: + Org: + Human: + Password: |- + {{ index .Data.data "humanPassword" }} + {{- end -}} + values: + zitadel: + configmapConfig: + ExternalDomain: sarex-login.uralmine.com + ExternalSecure: true + debug: + enabled: false + postgresqlSecret: + vault: + enabled: true + role: zitadel + authPath: auth/kubernetes + secretPath: secrets/data/zitadel/postgresql + secretKey: password + kvVersion: 2 + fileName: zitadel-vault-config.yaml + serviceAccount: + create: true + name: zitadel + replicaCount: 1 + pdb: + enabled: false + env: + - name: ZITADEL_DEFAULTINSTANCE_FEATURES_LOGINV2_REQUIRED + value: "false" + - name: ZITADEL_SYSTEMDEFAULTS_PASSWORDHASHER_VERIFIERS + value: "bcrypt,pbkdf2" + - name: ZITADEL_MACHINE_IDENTIFICATION_HOSTNAME_ENABLED + value: "true" + - name: ZITADEL_DATABASE_POSTGRES_HOST + value: "10.222.255.162" + - name: ZITADEL_DATABASE_POSTGRES_PORT + value: "5432" + - name: ZITADEL_DATABASE_POSTGRES_USER_USERNAME + value: "zitadel" + - name: ZITADEL_DATABASE_POSTGRES_ADMIN_EXISTINGDATABASE + value: "zitadel" + - name: ZITADEL_DATABASE_POSTGRES_ADMIN_USERNAME + value: "zitadel" + - name: ZITADEL_DATABASE_POSTGRES_DATABASE + value: "zitadel" + - name: ZITADEL_DATABASE_POSTGRES_USER_SSL_MODE + value: "disable" + - name: ZITADEL_DATABASE_POSTGRES_ADMIN_SSL_MODE + value: "disable" + - name: ZITADEL_DEFAULTINSTANCE_ORG_HUMAN_USERNAME + value: "zitadel-admin" + - name: ZITADEL_DEFAULTINSTANCE_ORG_NAME + value: "Sarex" diff --git a/clusters/d8-ugmk-prod/kustomization.yaml b/clusters/d8-ugmk-prod/kustomization.yaml index a8384a3..dcb749b 100644 --- a/clusters/d8-ugmk-prod/kustomization.yaml +++ b/clusters/d8-ugmk-prod/kustomization.yaml @@ -4,3 +4,4 @@ resources: - ./flux-system - ./helm-repositories.yaml - ./infrastructure + - ./bootstrap-jobs From 9f582bdc841e48ef5ba93a0dd133723a709f1fd1 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Mon, 13 Jul 2026 21:11:55 +0300 Subject: [PATCH 06/28] fuhrer fixes --- .../infrastructure/patches/camunda.yaml | 98 +++++++++++++++++++ .../infrastructure/patches/rabbitmq.yaml | 39 ++++++++ .../infrastructure/patches/vault.yaml | 17 ++++ 3 files changed, 154 insertions(+) diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml index abe0424..bb3f593 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml @@ -49,6 +49,104 @@ spec: - op: add path: /spec/template/spec/tolerations value: [] + - target: + group: apps + version: v1 + kind: Deployment + namespace: camunda + name: camunda-connectors + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - target: + group: apps + version: v1 + kind: Deployment + namespace: camunda + name: camunda-identity + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - target: + group: apps + version: v1 + kind: Deployment + namespace: camunda + name: camunda-operate + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - target: + group: apps + version: v1 + kind: Deployment + namespace: camunda + name: camunda-optimize + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - target: + group: apps + version: v1 + kind: Deployment + namespace: camunda + name: camunda-tasklist + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - target: + group: apps + version: v1 + kind: Deployment + namespace: camunda + name: camunda-zeebe-gateway + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] + - target: + group: apps + version: v1 + kind: StatefulSet + namespace: camunda + name: camunda-zeebe + patch: |- + - op: add + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: add + path: /spec/template/spec/tolerations + value: [] values: global: vault: diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml index c1da47c..d9e3ee6 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml @@ -22,6 +22,45 @@ spec: - op: add path: /spec/template/spec/tolerations value: [] + - target: + group: cert-manager.io + version: v1 + kind: Certificate + namespace: gateway + name: rmq-tls + patch: |- + $patch: delete + apiVersion: cert-manager.io/v1 + kind: Certificate + metadata: + name: rmq-tls + namespace: gateway + - target: + group: networking.istio.io + version: v1beta1 + kind: Gateway + namespace: gateway + name: rmq-gateway + patch: |- + $patch: delete + apiVersion: networking.istio.io/v1beta1 + kind: Gateway + metadata: + name: rmq-gateway + namespace: gateway + - target: + group: networking.istio.io + version: v1 + kind: VirtualService + namespace: rabbitmq + name: rmq-virt-service + patch: |- + $patch: delete + apiVersion: networking.istio.io/v1 + kind: VirtualService + metadata: + name: rmq-virt-service + namespace: rabbitmq values: global: security: diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml index 6fe5725..437a7f8 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml @@ -6,6 +6,23 @@ metadata: spec: interval: 5m timeout: 10m + postRenderers: + - kustomize: + patches: + - target: + group: apps + version: v1 + kind: StatefulSet + namespace: vault + name: vault-vault-contour + patch: |- + - op: replace + path: /spec/template/spec/nodeSelector + value: + node.deckhouse.io/group: generic + - op: replace + path: /spec/template/spec/tolerations + value: [] values: imagePullSecrets: - name: regcred From 6beaa1bbbfac01cd206d382f1786f253926210f9 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Tue, 14 Jul 2026 16:04:32 +0300 Subject: [PATCH 07/28] ++ deploy zitadel to a dedicated postgresql 17 --- .../infrastructure/kustomization.yaml | 13 +++ .../infrastructure/patches/camunda.yaml | 12 +- .../infrastructure/patches/kafka.yaml | 4 +- .../patches/postgresql-namespace-delete.yaml | 5 + .../infrastructure/patches/postgresql.yaml | 104 ++++++++++++++++++ .../infrastructure/patches/rabbitmq.yaml | 2 +- .../infrastructure/patches/vault.yaml | 2 +- .../infrastructure/patches/zitadel.yaml | 6 +- 8 files changed, 137 insertions(+), 11 deletions(-) create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/postgresql-namespace-delete.yaml create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index ed28986..9b38ba7 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -5,6 +5,7 @@ resources: - ../../../infrastructure/rabbitmq - ../../../infrastructure/camunda - ../../../infrastructure/vault + - ../../../infrastructure/postgresql - ../../../infrastructure/zitadel patches: - path: ./patches/kafka.yaml @@ -55,6 +56,18 @@ patches: version: v1 kind: Namespace name: vault + - path: ./patches/postgresql.yaml + target: + group: helm.toolkit.fluxcd.io + version: v2 + kind: HelmRelease + name: postgresql + namespace: postgresql + - path: ./patches/postgresql-namespace-delete.yaml + target: + version: v1 + kind: Namespace + name: postgresql - path: ./patches/zitadel.yaml target: group: helm.toolkit.fluxcd.io diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml index bb3f593..60dbda1 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml @@ -178,7 +178,7 @@ spec: automountServiceAccountToken: true persistence: size: 10Gi - storageClass: local-path + storageClass: nfs01 identityKeycloak: postgresql: auth: @@ -187,7 +187,7 @@ spec: automountServiceAccountToken: true persistence: size: 10Gi - storageClass: local-path + storageClass: nfs01 vaultEnv: enabled: true role: camunda @@ -203,7 +203,7 @@ spec: path: secrets/data/camunda/postgresql key: password global: - storageClass: local-path + storageClass: nfs01 tolerations: [] postgresql: auth: @@ -212,12 +212,12 @@ spec: automountServiceAccountToken: true persistence: size: 10Gi - storageClass: local-path + storageClass: nfs01 elasticsearch: master: persistence: size: 10Gi - storageClass: local-path + storageClass: nfs01 tolerations: [] metrics: enabled: false @@ -236,7 +236,7 @@ spec: - name: regcred tolerations: [] zeebe: - pvcStorageClassName: local-path + pvcStorageClassName: nfs01 image: pullSecrets: - name: regcred diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml index b1e93fe..ccc40ec 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml @@ -26,7 +26,7 @@ spec: global: imagePullSecrets: - regcred - defaultStorageClass: local-path + defaultStorageClass: nfs01 image: pullSecrets: - regcred @@ -35,7 +35,7 @@ spec: automountServiceAccountToken: true persistence: size: 8Gi - storageClass: local-path + storageClass: nfs01 overrideConfiguration: offsets.topic.replication.factor: 1 transaction.state.log.replication.factor: 1 diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql-namespace-delete.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql-namespace-delete.yaml new file mode 100644 index 0000000..73e793c --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql-namespace-delete.yaml @@ -0,0 +1,5 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: postgresql +$patch: delete diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml new file mode 100644 index 0000000..672d284 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml @@ -0,0 +1,104 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: postgresql + namespace: zitadel +spec: + interval: 5m + timeout: 2h + + install: + timeout: 2h + remediation: + retries: 3 + + upgrade: + timeout: 2h + remediation: + retries: 3 + + values: + global: + security: + allowInsecureImages: true + defaultStorageClass: nfs01 + postgresql: + auth: + username: "" + database: "" + secretKeys: + userPasswordKey: "postgres-password" + auth: + username: "" + database: "" + secretKeys: + userPasswordKey: "postgres-password" + image: + registry: cr.yandex/crp3ccidau046kdj8g9q + repository: contour/postgresql + tag: 17.0.7 + pullPolicy: Always + metrics: + enabled: false + prometheusRule: + enabled: false + primary: + automountServiceAccountToken: true + containerSecurityContext: + readOnlyRootFilesystem: false + persistence: + storageClass: nfs01 + size: 20Gi + customLivenessProbe: + exec: + command: + - /bin/sh + - -c + - exec pg_isready -U "postgres" -d postgres -h 127.0.0.1 -p 5432 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 6 + customReadinessProbe: + exec: + command: + - /bin/sh + - -c + - exec pg_isready -U "postgres" -d postgres -h 127.0.0.1 -p 5432 + initialDelaySeconds: 5 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 6 + customStartupProbe: + exec: + command: + - /bin/sh + - -c + - exec pg_isready -U "postgres" -d postgres -h 127.0.0.1 -p 5432 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 6 + nodeSelector: + node.deckhouse.io/group: generic + tolerations: [] + contour: + enabled: true + adminUser: "postgres" + vault: + enabled: true + role: postgresql + authPath: auth/kubernetes + secretPath: secrets/data/postgresql/admin + secretKey: postgres-password + usersSecretPath: secrets/data/postgresql/users + sharedPreloadLibraries: "timescaledb,pg_stat_statements" + databases: + - name: zitadel + user: zitadel + passwordKey: zitadel + extensions: [] + restoreFromDump: false diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml index d9e3ee6..b6e4a70 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml @@ -83,7 +83,7 @@ spec: requests: memory: 1Gi persistence: - storageClass: local-path + storageClass: nfs01 size: 10Gi auth: securePassword: true diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml index 437a7f8..f1a5346 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml @@ -37,4 +37,4 @@ spec: node.deckhouse.io/group: generic tolerations: [] dataStorage: - storageClass: local-path + storageClass: nfs01 diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml index 5938c29..1153847 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml @@ -6,6 +6,9 @@ metadata: spec: interval: 5m timeout: 10m + dependsOn: + - name: postgresql + namespace: zitadel postRenderers: - kustomize: patches: @@ -110,6 +113,7 @@ spec: debug: enabled: false postgresqlSecret: + create: false vault: enabled: true role: zitadel @@ -132,7 +136,7 @@ spec: - name: ZITADEL_MACHINE_IDENTIFICATION_HOSTNAME_ENABLED value: "true" - name: ZITADEL_DATABASE_POSTGRES_HOST - value: "10.222.255.162" + value: "postgresql.zitadel.svc.cluster.local" - name: ZITADEL_DATABASE_POSTGRES_PORT value: "5432" - name: ZITADEL_DATABASE_POSTGRES_USER_USERNAME From 089c125fa3e5faefc3b52e2f77a9090bb737c33e Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Tue, 14 Jul 2026 16:17:43 +0300 Subject: [PATCH 08/28] ++ fix postgresql namespace for zitadel --- .../d8-ugmk-prod/infrastructure/kustomization.yaml | 10 ++++++++++ .../infrastructure/patches/postgresql.yaml | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index 9b38ba7..465f11d 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -63,6 +63,16 @@ patches: kind: HelmRelease name: postgresql namespace: postgresql + - patch: |- + - op: replace + path: /metadata/namespace + value: zitadel + target: + group: helm.toolkit.fluxcd.io + version: v2 + kind: HelmRelease + name: postgresql + namespace: postgresql - path: ./patches/postgresql-namespace-delete.yaml target: version: v1 diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml index 672d284..07b4ce0 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml @@ -2,7 +2,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: postgresql - namespace: zitadel + namespace: postgresql spec: interval: 5m timeout: 2h From 576b67f56615d3f3e215f08a5f6aaed363ba6305 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Tue, 14 Jul 2026 16:24:53 +0300 Subject: [PATCH 09/28] ++ fix generic scheduling for postgresql and zitadel --- .../infrastructure/kustomization.yaml | 10 ++++++++++ .../infrastructure/patches/postgresql.yaml | 5 ++++- .../infrastructure/patches/zitadel.yaml | 15 ++++++++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index 465f11d..51e2f6d 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -67,6 +67,16 @@ patches: - op: replace path: /metadata/namespace value: zitadel + - op: replace + path: /spec/values/primary/nodeSelector + value: + node.deckhouse.io/group: generic + - op: replace + path: /spec/values/primary/tolerations + value: + - key: dedicated.deckhouse.io + operator: Equal + value: generic target: group: helm.toolkit.fluxcd.io version: v2 diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml index 07b4ce0..c28c7c3 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml @@ -84,7 +84,10 @@ spec: failureThreshold: 6 nodeSelector: node.deckhouse.io/group: generic - tolerations: [] + tolerations: + - key: dedicated.deckhouse.io + operator: Equal + value: generic contour: enabled: true adminUser: "postgres" diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml index 1153847..b0af0bb 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml @@ -24,7 +24,10 @@ spec: node.deckhouse.io/group: generic - op: add path: /spec/template/spec/tolerations - value: [] + value: + - key: dedicated.deckhouse.io + operator: Equal + value: generic - op: replace path: /spec/template/metadata/annotations/vault.hashicorp.com~1agent-inject-template-zitadel-vault-config.yaml value: |- @@ -55,7 +58,10 @@ spec: node.deckhouse.io/group: generic - op: add path: /spec/template/spec/tolerations - value: [] + value: + - key: dedicated.deckhouse.io + operator: Equal + value: generic - op: replace path: /spec/template/metadata/annotations/vault.hashicorp.com~1agent-inject-template-zitadel-vault-config.yaml value: |- @@ -86,7 +92,10 @@ spec: node.deckhouse.io/group: generic - op: add path: /spec/template/spec/tolerations - value: [] + value: + - key: dedicated.deckhouse.io + operator: Equal + value: generic - op: replace path: /spec/template/metadata/annotations/vault.hashicorp.com~1agent-inject-template-zitadel-vault-config.yaml value: |- From 67ad879aa3a2ca108a5c448e0e561d3fcbc44a34 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Tue, 14 Jul 2026 16:44:07 +0300 Subject: [PATCH 10/28] ++ remove default sts selector from postgresql --- clusters/d8-ugmk-prod/infrastructure/kustomization.yaml | 1 + clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index 51e2f6d..2725078 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -70,6 +70,7 @@ patches: - op: replace path: /spec/values/primary/nodeSelector value: + dedicated: null node.deckhouse.io/group: generic - op: replace path: /spec/values/primary/tolerations diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml index c28c7c3..f9ce30b 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml @@ -83,6 +83,7 @@ spec: successThreshold: 1 failureThreshold: 6 nodeSelector: + dedicated: null node.deckhouse.io/group: generic tolerations: - key: dedicated.deckhouse.io From 77b8c84b71a5bc92084fe7685cce1bc828dd0abf Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Wed, 15 Jul 2026 11:05:02 +0300 Subject: [PATCH 11/28] ++ move camunda databases external and scale down --- .../infrastructure/patches/camunda.yaml | 43 ++++++++++++++++--- 1 file changed, 37 insertions(+), 6 deletions(-) diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml index 60dbda1..6c10a9e 100644 --- a/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml @@ -153,6 +153,12 @@ spec: enabled: true role: camunda authPath: auth/kubernetes + secrets: + postgresql: + path: secrets/data/camunda/postgresql + keys: + password: identity-password + postgresPassword: postgres-password image: pullSecrets: - name: regcred @@ -172,6 +178,7 @@ spec: console: redirectUrl: "https://camunda-console.contour.infra.sarex.tech" identityPostgresql: + enabled: false auth: usePasswordFiles: true primary: @@ -180,7 +187,16 @@ spec: size: 10Gi storageClass: nfs01 identityKeycloak: + externalDatabase: + host: 10.222.255.162 + port: 5432 + user: bn_keycloak + database: bitnami_keycloak + password: "" + existingSecret: "" + existingSecretPasswordKey: password postgresql: + enabled: false auth: usePasswordFiles: true primary: @@ -201,7 +217,7 @@ spec: key: admin-password KEYCLOAK_DATABASE_PASSWORD: path: secrets/data/camunda/postgresql - key: password + key: keycloak-password global: storageClass: nfs01 tolerations: [] @@ -215,6 +231,8 @@ spec: storageClass: nfs01 elasticsearch: master: + replicaCount: 1 + podAntiAffinityPreset: soft persistence: size: 10Gi storageClass: nfs01 @@ -236,12 +254,30 @@ spec: - name: regcred tolerations: [] zeebe: + clusterSize: "1" + partitionCount: "1" + replicationFactor: "1" pvcStorageClassName: nfs01 image: pullSecrets: - name: regcred tolerations: [] zeebeGateway: + replicas: 1 + image: + pullSecrets: + - name: regcred + tolerations: [] + identity: + externalDatabase: + enabled: true + host: 10.222.255.162 + port: 5432 + username: identity + database: identity + password: "" + existingSecret: "" + existingSecretPasswordKey: password image: pullSecrets: - name: regcred @@ -272,11 +308,6 @@ spec: pullSecrets: - name: regcred tolerations: [] - identity: - image: - pullSecrets: - - name: regcred - tolerations: [] webModeler: image: pullSecrets: From 26f10ce34b8e65ce07759bc50642e5019dac7750 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Wed, 15 Jul 2026 11:50:31 +0300 Subject: [PATCH 12/28] ++ add istio routes for ugmk services --- .../infrastructure/kustomization.yaml | 8 + .../infrastructure/patches/istio-config.yaml | 140 ++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 clusters/d8-ugmk-prod/infrastructure/patches/istio-config.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index 2725078..8dfa458 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -7,6 +7,7 @@ resources: - ../../../infrastructure/vault - ../../../infrastructure/postgresql - ../../../infrastructure/zitadel + - ../../../infrastructure/istio-config patches: - path: ./patches/kafka.yaml target: @@ -101,3 +102,10 @@ patches: version: v1 kind: Namespace name: zitadel + - path: ./patches/istio-config.yaml + target: + group: helm.toolkit.fluxcd.io + version: v2 + kind: HelmRelease + name: istio-config + namespace: default diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/istio-config.yaml b/clusters/d8-ugmk-prod/infrastructure/patches/istio-config.yaml new file mode 100644 index 0000000..415ef85 --- /dev/null +++ b/clusters/d8-ugmk-prod/infrastructure/patches/istio-config.yaml @@ -0,0 +1,140 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: istio-config + namespace: default +spec: + dependsOn: [] + interval: 5m + timeout: 10m + values: + global: + env: d8-ugmk-prod + environments: + d8-ugmk-prod: + istio: + gateways: + camunda: + name: camunda-gateway + namespace: default + selector: + istio.deckhouse.io/ingress-gateway-class: istio + servers: + - hosts: + - sarex-camunda-keycloak.uralmine.com + tls: + credentialName: istio-ingress-tls + - hosts: + - sarex-camunda-identity.uralmine.com + tls: + credentialName: istio-ingress-tls + - hosts: + - sarex-camunda.uralmine.com + tls: + credentialName: istio-ingress-tls + - hosts: + - sarex-camunda-tasklist.uralmine.com + tls: + credentialName: istio-ingress-tls + - hosts: + - sarex-camunda-optimize.uralmine.com + tls: + credentialName: istio-ingress-tls + rabbitmq: + name: rabbitmq-gateway + namespace: default + selector: + istio.deckhouse.io/ingress-gateway-class: istio + servers: + - hosts: + - sarex-rabbitmq.uralmine.com + tls: + credentialName: istio-ingress-tls + zitadel: + name: zitadel-gateway + namespace: default + selector: + istio.deckhouse.io/ingress-gateway-class: istio + servers: + - hosts: + - sarex-login.uralmine.com + tls: + credentialName: istio-ingress-tls + virtualServices: + camunda-keycloak: + namespace: default + hosts: + - sarex-camunda-keycloak.uralmine.com + gateways: + - default/camunda-gateway + routes: + - path: + prefix: / + service: camunda-keycloak.camunda.svc.cluster.local + port: 80 + camunda-identity: + namespace: default + hosts: + - sarex-camunda-identity.uralmine.com + gateways: + - default/camunda-gateway + routes: + - path: + prefix: / + service: camunda-identity.camunda.svc.cluster.local + port: 80 + camunda-operate: + namespace: default + hosts: + - sarex-camunda.uralmine.com + gateways: + - default/camunda-gateway + routes: + - path: + prefix: / + service: camunda-operate.camunda.svc.cluster.local + port: 80 + camunda-tasklist: + namespace: default + hosts: + - sarex-camunda-tasklist.uralmine.com + gateways: + - default/camunda-gateway + routes: + - path: + prefix: / + service: camunda-tasklist.camunda.svc.cluster.local + port: 80 + camunda-optimize: + namespace: default + hosts: + - sarex-camunda-optimize.uralmine.com + gateways: + - default/camunda-gateway + routes: + - path: + prefix: / + service: camunda-optimize.camunda.svc.cluster.local + port: 80 + rabbitmq: + namespace: default + hosts: + - sarex-rabbitmq.uralmine.com + gateways: + - default/rabbitmq-gateway + routes: + - path: + prefix: / + service: rabbitmq.rabbitmq.svc.cluster.local + port: 15672 + zitadel: + namespace: default + hosts: + - sarex-login.uralmine.com + gateways: + - default/zitadel-gateway + routes: + - path: + prefix: / + service: zitadel-idp-contour.zitadel.svc.cluster.local + port: 8080 From 4b165fe6e1060edac556b7b0003b56bd88b02834 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Wed, 15 Jul 2026 12:07:54 +0300 Subject: [PATCH 13/28] ++ add deckhouse istio ingress and selfsigned tls --- .../istio-ingress/certificate.yaml | 16 ++++++++++++++ .../istio-ingress/clusterissuer.yaml | 6 +++++ .../istio-ingress/ingress-controller.yaml | 22 +++++++++++++++++++ .../istio-ingress/kustomization.yaml | 6 +++++ clusters/d8-ugmk-prod/kustomization.yaml | 1 + 5 files changed, 51 insertions(+) create mode 100644 clusters/d8-ugmk-prod/istio-ingress/certificate.yaml create mode 100644 clusters/d8-ugmk-prod/istio-ingress/clusterissuer.yaml create mode 100644 clusters/d8-ugmk-prod/istio-ingress/ingress-controller.yaml create mode 100644 clusters/d8-ugmk-prod/istio-ingress/kustomization.yaml diff --git a/clusters/d8-ugmk-prod/istio-ingress/certificate.yaml b/clusters/d8-ugmk-prod/istio-ingress/certificate.yaml new file mode 100644 index 0000000..d95d380 --- /dev/null +++ b/clusters/d8-ugmk-prod/istio-ingress/certificate.yaml @@ -0,0 +1,16 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: sarex-wildcard + namespace: d8-ingress-istio +spec: + commonName: "*.uralmine.com" + dnsNames: + - "*.uralmine.com" + issuerRef: + group: cert-manager.io + kind: ClusterIssuer + name: sarex-selfsigned + privateKey: + rotationPolicy: Always + secretName: istio-ingress-tls diff --git a/clusters/d8-ugmk-prod/istio-ingress/clusterissuer.yaml b/clusters/d8-ugmk-prod/istio-ingress/clusterissuer.yaml new file mode 100644 index 0000000..8f75748 --- /dev/null +++ b/clusters/d8-ugmk-prod/istio-ingress/clusterissuer.yaml @@ -0,0 +1,6 @@ +apiVersion: cert-manager.io/v1 +kind: ClusterIssuer +metadata: + name: sarex-selfsigned +spec: + selfSigned: {} diff --git a/clusters/d8-ugmk-prod/istio-ingress/ingress-controller.yaml b/clusters/d8-ugmk-prod/istio-ingress/ingress-controller.yaml new file mode 100644 index 0000000..61af7b4 --- /dev/null +++ b/clusters/d8-ugmk-prod/istio-ingress/ingress-controller.yaml @@ -0,0 +1,22 @@ +apiVersion: deckhouse.io/v1alpha1 +kind: IngressIstioController +metadata: + name: sarex +spec: + ingressGatewayClass: istio + inlet: NodePort + nodePort: + httpPort: 30080 + httpsPort: 30443 + nodeSelector: + kubernetes.io/hostname: um-sarex-k8s-frontend-01 + tolerations: + - effect: NoExecute + key: dedicated.deckhouse.io + operator: Equal + value: frontend + resourcesRequests: + mode: Static + static: + cpu: 100m + memory: 128Mi diff --git a/clusters/d8-ugmk-prod/istio-ingress/kustomization.yaml b/clusters/d8-ugmk-prod/istio-ingress/kustomization.yaml new file mode 100644 index 0000000..8ada48a --- /dev/null +++ b/clusters/d8-ugmk-prod/istio-ingress/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - clusterissuer.yaml + - certificate.yaml + - ingress-controller.yaml diff --git a/clusters/d8-ugmk-prod/kustomization.yaml b/clusters/d8-ugmk-prod/kustomization.yaml index dcb749b..9e4516b 100644 --- a/clusters/d8-ugmk-prod/kustomization.yaml +++ b/clusters/d8-ugmk-prod/kustomization.yaml @@ -4,4 +4,5 @@ resources: - ./flux-system - ./helm-repositories.yaml - ./infrastructure + - ./istio-ingress - ./bootstrap-jobs From b3434387799cf9a96274ea2dfe40b2070951c84d Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Wed, 15 Jul 2026 12:26:52 +0300 Subject: [PATCH 14/28] ++ move zitadel postgresql to master node --- clusters/d8-ugmk-prod/infrastructure/kustomization.yaml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index 8dfa458..3e4a1fd 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -71,14 +71,13 @@ patches: - op: replace path: /spec/values/primary/nodeSelector value: - dedicated: null - node.deckhouse.io/group: generic + kubernetes.io/hostname: um-sarex-k8s-master-01 - op: replace path: /spec/values/primary/tolerations value: - - key: dedicated.deckhouse.io - operator: Equal - value: generic + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule target: group: helm.toolkit.fluxcd.io version: v2 From 52f90cb00cb42a58ad1fe093c240c9d39aa73bff Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Wed, 15 Jul 2026 12:34:47 +0300 Subject: [PATCH 15/28] ++ clear postgresql chart node selector --- clusters/d8-ugmk-prod/infrastructure/kustomization.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index 3e4a1fd..36cac89 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -71,6 +71,7 @@ patches: - op: replace path: /spec/values/primary/nodeSelector value: + dedicated: null kubernetes.io/hostname: um-sarex-k8s-master-01 - op: replace path: /spec/values/primary/tolerations From 63cdb767e66b99d3413cbb9f1583fc31d6da8e91 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Wed, 15 Jul 2026 13:00:34 +0300 Subject: [PATCH 16/28] ++ move ugmk infrastructure patches to overlays --- .../infrastructure/kustomization.yaml | 114 +----------------- clusters/d8-ugmk-prod/kustomization.yaml | 1 + .../d8-ugmk-prod}/camunda-namespace.yaml | 0 .../camunda/d8-ugmk-prod}/camunda.yaml | 0 .../camunda/d8-ugmk-prod/kustomization.yaml | 7 ++ .../d8-ugmk-prod}/istio-config.yaml | 0 .../d8-ugmk-prod/kustomization.yaml | 6 + .../kafka/d8-ugmk-prod}/kafka-namespace.yaml | 0 .../kafka/d8-ugmk-prod}/kafka.yaml | 0 .../kafka/d8-ugmk-prod/kustomization.yaml | 7 ++ .../d8-ugmk-prod/kustomization.yaml | 28 +++++ .../postgresql-namespace-delete.yaml | 0 .../postgresql/d8-ugmk-prod}/postgresql.yaml | 0 .../rabbitmq/d8-ugmk-prod/kustomization.yaml | 7 ++ .../d8-ugmk-prod}/rabbitmq-namespace.yaml | 0 .../rabbitmq/d8-ugmk-prod}/rabbitmq.yaml | 0 .../vault/d8-ugmk-prod/kustomization.yaml | 7 ++ .../vault/d8-ugmk-prod}/vault-namespace.yaml | 0 .../vault/d8-ugmk-prod}/vault.yaml | 0 .../zitadel/d8-ugmk-prod/kustomization.yaml | 7 ++ .../d8-ugmk-prod}/zitadel-namespace.yaml | 0 .../zitadel/d8-ugmk-prod}/zitadel.yaml | 0 22 files changed, 76 insertions(+), 108 deletions(-) rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/camunda/d8-ugmk-prod}/camunda-namespace.yaml (100%) rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/camunda/d8-ugmk-prod}/camunda.yaml (100%) create mode 100644 infrastructure/camunda/d8-ugmk-prod/kustomization.yaml rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/istio-config/d8-ugmk-prod}/istio-config.yaml (100%) create mode 100644 infrastructure/istio-config/d8-ugmk-prod/kustomization.yaml rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/kafka/d8-ugmk-prod}/kafka-namespace.yaml (100%) rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/kafka/d8-ugmk-prod}/kafka.yaml (100%) create mode 100644 infrastructure/kafka/d8-ugmk-prod/kustomization.yaml create mode 100644 infrastructure/postgresql/d8-ugmk-prod/kustomization.yaml rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/postgresql/d8-ugmk-prod}/postgresql-namespace-delete.yaml (100%) rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/postgresql/d8-ugmk-prod}/postgresql.yaml (100%) create mode 100644 infrastructure/rabbitmq/d8-ugmk-prod/kustomization.yaml rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/rabbitmq/d8-ugmk-prod}/rabbitmq-namespace.yaml (100%) rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/rabbitmq/d8-ugmk-prod}/rabbitmq.yaml (100%) create mode 100644 infrastructure/vault/d8-ugmk-prod/kustomization.yaml rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/vault/d8-ugmk-prod}/vault-namespace.yaml (100%) rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/vault/d8-ugmk-prod}/vault.yaml (100%) create mode 100644 infrastructure/zitadel/d8-ugmk-prod/kustomization.yaml rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/zitadel/d8-ugmk-prod}/zitadel-namespace.yaml (100%) rename {clusters/d8-ugmk-prod/infrastructure/patches => infrastructure/zitadel/d8-ugmk-prod}/zitadel.yaml (100%) diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml index 36cac89..07f1f1e 100644 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml @@ -1,111 +1,9 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - - ../../../infrastructure/kafka - - ../../../infrastructure/rabbitmq - - ../../../infrastructure/camunda - - ../../../infrastructure/vault - - ../../../infrastructure/postgresql - - ../../../infrastructure/zitadel - - ../../../infrastructure/istio-config -patches: - - path: ./patches/kafka.yaml - target: - group: helm.toolkit.fluxcd.io - version: v2 - kind: HelmRelease - name: kafka - namespace: kafka - - path: ./patches/kafka-namespace.yaml - target: - version: v1 - kind: Namespace - name: kafka - - path: ./patches/rabbitmq.yaml - target: - group: helm.toolkit.fluxcd.io - version: v2 - kind: HelmRelease - name: rabbitmq - namespace: rabbitmq - - path: ./patches/rabbitmq-namespace.yaml - target: - version: v1 - kind: Namespace - name: rabbitmq - - path: ./patches/camunda.yaml - target: - group: helm.toolkit.fluxcd.io - version: v2 - kind: HelmRelease - name: camunda - namespace: camunda - - path: ./patches/camunda-namespace.yaml - target: - version: v1 - kind: Namespace - name: camunda - - path: ./patches/vault.yaml - target: - group: helm.toolkit.fluxcd.io - version: v2 - kind: HelmRelease - name: vault - namespace: vault - - path: ./patches/vault-namespace.yaml - target: - version: v1 - kind: Namespace - name: vault - - path: ./patches/postgresql.yaml - target: - group: helm.toolkit.fluxcd.io - version: v2 - kind: HelmRelease - name: postgresql - namespace: postgresql - - patch: |- - - op: replace - path: /metadata/namespace - value: zitadel - - op: replace - path: /spec/values/primary/nodeSelector - value: - dedicated: null - kubernetes.io/hostname: um-sarex-k8s-master-01 - - op: replace - path: /spec/values/primary/tolerations - value: - - key: node-role.kubernetes.io/control-plane - operator: Exists - effect: NoSchedule - target: - group: helm.toolkit.fluxcd.io - version: v2 - kind: HelmRelease - name: postgresql - namespace: postgresql - - path: ./patches/postgresql-namespace-delete.yaml - target: - version: v1 - kind: Namespace - name: postgresql - - path: ./patches/zitadel.yaml - target: - group: helm.toolkit.fluxcd.io - version: v2 - kind: HelmRelease - name: zitadel - namespace: zitadel - - path: ./patches/zitadel-namespace.yaml - target: - version: v1 - kind: Namespace - name: zitadel - - path: ./patches/istio-config.yaml - target: - group: helm.toolkit.fluxcd.io - version: v2 - kind: HelmRelease - name: istio-config - namespace: default + - ../../../infrastructure/kafka/d8-ugmk-prod + - ../../../infrastructure/rabbitmq/d8-ugmk-prod + - ../../../infrastructure/camunda/d8-ugmk-prod + - ../../../infrastructure/vault/d8-ugmk-prod + - ../../../infrastructure/postgresql/d8-ugmk-prod + - ../../../infrastructure/zitadel/d8-ugmk-prod diff --git a/clusters/d8-ugmk-prod/kustomization.yaml b/clusters/d8-ugmk-prod/kustomization.yaml index 9e4516b..77f08f9 100644 --- a/clusters/d8-ugmk-prod/kustomization.yaml +++ b/clusters/d8-ugmk-prod/kustomization.yaml @@ -4,5 +4,6 @@ resources: - ./flux-system - ./helm-repositories.yaml - ./infrastructure + - ../../infrastructure/istio-config/d8-ugmk-prod - ./istio-ingress - ./bootstrap-jobs diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/camunda-namespace.yaml b/infrastructure/camunda/d8-ugmk-prod/camunda-namespace.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/camunda-namespace.yaml rename to infrastructure/camunda/d8-ugmk-prod/camunda-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml b/infrastructure/camunda/d8-ugmk-prod/camunda.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/camunda.yaml rename to infrastructure/camunda/d8-ugmk-prod/camunda.yaml diff --git a/infrastructure/camunda/d8-ugmk-prod/kustomization.yaml b/infrastructure/camunda/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..e80d807 --- /dev/null +++ b/infrastructure/camunda/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../base +patches: + - path: camunda.yaml + - path: camunda-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/istio-config.yaml b/infrastructure/istio-config/d8-ugmk-prod/istio-config.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/istio-config.yaml rename to infrastructure/istio-config/d8-ugmk-prod/istio-config.yaml diff --git a/infrastructure/istio-config/d8-ugmk-prod/kustomization.yaml b/infrastructure/istio-config/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..894c51a --- /dev/null +++ b/infrastructure/istio-config/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../base +patches: + - path: istio-config.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/kafka-namespace.yaml b/infrastructure/kafka/d8-ugmk-prod/kafka-namespace.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/kafka-namespace.yaml rename to infrastructure/kafka/d8-ugmk-prod/kafka-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml b/infrastructure/kafka/d8-ugmk-prod/kafka.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/kafka.yaml rename to infrastructure/kafka/d8-ugmk-prod/kafka.yaml diff --git a/infrastructure/kafka/d8-ugmk-prod/kustomization.yaml b/infrastructure/kafka/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..0c35bed --- /dev/null +++ b/infrastructure/kafka/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../base +patches: + - path: kafka.yaml + - path: kafka-namespace.yaml diff --git a/infrastructure/postgresql/d8-ugmk-prod/kustomization.yaml b/infrastructure/postgresql/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..d5c44f3 --- /dev/null +++ b/infrastructure/postgresql/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,28 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../base +patches: + - path: postgresql.yaml + - patch: |- + - op: replace + path: /metadata/namespace + value: zitadel + - op: replace + path: /spec/values/primary/nodeSelector + value: + dedicated: null + kubernetes.io/hostname: um-sarex-k8s-master-01 + - op: replace + path: /spec/values/primary/tolerations + value: + - key: node-role.kubernetes.io/control-plane + operator: Exists + effect: NoSchedule + target: + group: helm.toolkit.fluxcd.io + version: v2 + kind: HelmRelease + name: postgresql + namespace: postgresql + - path: postgresql-namespace-delete.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql-namespace-delete.yaml b/infrastructure/postgresql/d8-ugmk-prod/postgresql-namespace-delete.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/postgresql-namespace-delete.yaml rename to infrastructure/postgresql/d8-ugmk-prod/postgresql-namespace-delete.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml b/infrastructure/postgresql/d8-ugmk-prod/postgresql.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/postgresql.yaml rename to infrastructure/postgresql/d8-ugmk-prod/postgresql.yaml diff --git a/infrastructure/rabbitmq/d8-ugmk-prod/kustomization.yaml b/infrastructure/rabbitmq/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..961714e --- /dev/null +++ b/infrastructure/rabbitmq/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../base +patches: + - path: rabbitmq.yaml + - path: rabbitmq-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq-namespace.yaml b/infrastructure/rabbitmq/d8-ugmk-prod/rabbitmq-namespace.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq-namespace.yaml rename to infrastructure/rabbitmq/d8-ugmk-prod/rabbitmq-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml b/infrastructure/rabbitmq/d8-ugmk-prod/rabbitmq.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/rabbitmq.yaml rename to infrastructure/rabbitmq/d8-ugmk-prod/rabbitmq.yaml diff --git a/infrastructure/vault/d8-ugmk-prod/kustomization.yaml b/infrastructure/vault/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..0597d85 --- /dev/null +++ b/infrastructure/vault/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../base +patches: + - path: vault.yaml + - path: vault-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml b/infrastructure/vault/d8-ugmk-prod/vault-namespace.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/vault-namespace.yaml rename to infrastructure/vault/d8-ugmk-prod/vault-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml b/infrastructure/vault/d8-ugmk-prod/vault.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/vault.yaml rename to infrastructure/vault/d8-ugmk-prod/vault.yaml diff --git a/infrastructure/zitadel/d8-ugmk-prod/kustomization.yaml b/infrastructure/zitadel/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..9248de4 --- /dev/null +++ b/infrastructure/zitadel/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,7 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - ../base +patches: + - path: zitadel.yaml + - path: zitadel-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/zitadel-namespace.yaml b/infrastructure/zitadel/d8-ugmk-prod/zitadel-namespace.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/zitadel-namespace.yaml rename to infrastructure/zitadel/d8-ugmk-prod/zitadel-namespace.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml b/infrastructure/zitadel/d8-ugmk-prod/zitadel.yaml similarity index 100% rename from clusters/d8-ugmk-prod/infrastructure/patches/zitadel.yaml rename to infrastructure/zitadel/d8-ugmk-prod/zitadel.yaml From ed80fd33e6fc6b7af499b8c87b7bd21a920804ba Mon Sep 17 00:00:00 2001 From: ivan Date: Wed, 15 Jul 2026 16:32:44 +0500 Subject: [PATCH 17/28] ++ --- .../attachments/d8-ugmk-prod/helmrelease.yaml | 110 ++++++++++++++++++ .../d8-ugmk-prod/kustomization.yaml | 6 + .../d8-ugmk-prod/helmrelease.yaml | 92 +++++++++++++++ .../d8-ugmk-prod/kustomization.yaml | 6 + clusters/d8-ugmk-prod/kustomization.yaml | 3 + 5 files changed, 217 insertions(+) create mode 100644 apps/attachments/d8-ugmk-prod/helmrelease.yaml create mode 100644 apps/attachments/d8-ugmk-prod/kustomization.yaml create mode 100644 apps/control-interface/d8-ugmk-prod/helmrelease.yaml create mode 100644 apps/control-interface/d8-ugmk-prod/kustomization.yaml diff --git a/apps/attachments/d8-ugmk-prod/helmrelease.yaml b/apps/attachments/d8-ugmk-prod/helmrelease.yaml new file mode 100644 index 0000000..5857773 --- /dev/null +++ b/apps/attachments/d8-ugmk-prod/helmrelease.yaml @@ -0,0 +1,110 @@ +--- +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: attachments + namespace: attachments +spec: + interval: 10m + chart: + spec: + chart: universal-chart + version: "0.1.9" + sourceRef: + kind: HelmRepository + name: yc-oci-charts + namespace: flux-system + interval: 10m + install: + remediation: + retries: 3 + upgrade: + remediation: + retries: 3 + values: + global: + env: _default + services: + attachments: + enabled: true + serviceAccount: + enabled: + _default: true + name: + _default: attachments-vault + deployment: + enabled: true + name: + _default: attachments + replicaCount: + _default: 1 + port: + _default: 8000 + command: + _default: ["/bin/bash", "-ec"] + args: + _default: + - | + set -a + [ -f /vault/secrets/attachments-db ] && . /vault/secrets/attachments-db + [ -f /vault/secrets/attachments-s3 ] && . /vault/secrets/attachments-s3 + set +a + exec /opt/attachments/entrypoint.sh + image: + name: + _default: cr.yandex/crp3ccidau046kdj8g9q/attachments:feature_6238c882 + pullPolicy: + _default: IfNotPresent + service: + enabled: true + name: + _default: attachments-service + type: + _default: ClusterIP + port: + _default: 8000 + targetPort: + _default: 8000 + portName: + _default: http + imagePullSecrets: + enabled: + _default: true + name: + _default: regcred + envs: + - name: POSTGRES_POOL_SIZE + value: + _default: "10" + - name: API_ADDRESS + value: + _default: 0.0.0.0:8000 + podAnnotations: + _default: + traffic.sidecar.istio.io/excludeOutboundPorts: "4317,4318,9411,8200" + vault.hashicorp.com/agent-init-first: "true" + vault.hashicorp.com/agent-inject: "true" + vault.hashicorp.com/agent-pre-populate-only: "true" + vault.hashicorp.com/auth-path: auth/kubernetes + vault.hashicorp.com/role: attachments + vault.hashicorp.com/agent-inject-secret-attachments-db: secrets/data/postgresql/apps/attachments + vault.hashicorp.com/agent-inject-template-attachments-db: |- + {{- with secret "secrets/data/postgresql/apps/attachments" -}} + DATABASE_HOST=postgresql.attachments.svc.cluster.local + DATABASE_PORT=5432 + DATABASE_NAME=attachments_db + DATABASE_USER={{ index .Data.data "username" }} + DATABASE_PASSWORD={{ index .Data.data "password" }} + DATABASE_SSL_MODE=disable + {{- end -}} + vault.hashicorp.com/agent-inject-secret-attachments-s3: secrets/data/minio/apps/attachments + vault.hashicorp.com/agent-inject-template-attachments-s3: |- + {{- with secret "secrets/data/minio/apps/attachments" -}} + YANDEX_S3_ENDPOINT_URL=minio.minio:9000 + YANDEX_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }} + YANDEX_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }} + YANDEX_S3_USE_SSL=false + YANDEX_S3_REGION=ru-central + YANDEX_S3_VERIFY=false + BUCKET_NAME=attachments + {{- end -}} diff --git a/apps/attachments/d8-ugmk-prod/kustomization.yaml b/apps/attachments/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..c9ccb75 --- /dev/null +++ b/apps/attachments/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,6 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: attachments +resources: + - helmrelease.yaml diff --git a/apps/control-interface/d8-ugmk-prod/helmrelease.yaml b/apps/control-interface/d8-ugmk-prod/helmrelease.yaml new file mode 100644 index 0000000..0bab467 --- /dev/null +++ b/apps/control-interface/d8-ugmk-prod/helmrelease.yaml @@ -0,0 +1,92 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: srx-admin + namespace: django + +spec: + interval: 10m + + chart: + spec: + chart: universal-chart + version: "0.1.7" + sourceRef: + kind: HelmRepository + name: yc-oci-charts + namespace: flux-system + interval: 10m + + install: + remediation: + retries: 3 + + upgrade: + remediation: + retries: 3 + + values: + global: + env: _default + + services: + frontend: + enabled: true + + image: + name: + _default: cr.yandex/crp3ccidau046kdj8g9q/srx-admin:prod_feb59026 + pullPolicy: + _default: IfNotPresent + + deployment: + enabled: true + + name: + _default: srx-admin + + replicaCount: + _default: 1 + stage: 1 + preprod: 3 + production: 3 + + port: + _default: 80 + + probes: + liveness: + enabled: false + readiness: + enabled: false + + service: + enabled: true + + name: + _default: srx-admin-svc + + + type: + _default: ClusterIP + + port: + _default: 8080 + + targetPort: + _default: 80 + + portName: + _default: http + + imagePullSecrets: + enabled: + _default: true + name: + _default: regcred + + + commitSha: "" + gitlabUri: "" + gitlabJobUrl: "" + owner: "" \ No newline at end of file diff --git a/apps/control-interface/d8-ugmk-prod/kustomization.yaml b/apps/control-interface/d8-ugmk-prod/kustomization.yaml new file mode 100644 index 0000000..64ff6c5 --- /dev/null +++ b/apps/control-interface/d8-ugmk-prod/kustomization.yaml @@ -0,0 +1,6 @@ +--- +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: django +resources: + - helmrelease.yaml diff --git a/clusters/d8-ugmk-prod/kustomization.yaml b/clusters/d8-ugmk-prod/kustomization.yaml index 77f08f9..c516c39 100644 --- a/clusters/d8-ugmk-prod/kustomization.yaml +++ b/clusters/d8-ugmk-prod/kustomization.yaml @@ -7,3 +7,6 @@ resources: - ../../infrastructure/istio-config/d8-ugmk-prod - ./istio-ingress - ./bootstrap-jobs +# apps + - ../../apps/attachments/d8-ugmk-prod + - ../../apps/control-interface/d8-ugmk-prod \ No newline at end of file From 8a350b4391c1b99831d70687a17ae7d831fed7f0 Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 14:41:59 +0300 Subject: [PATCH 18/28] Restructure `d8-ugmk-prod` kustomization to directly include infrastructure resources instead of nested directory. --- .../d8-ugmk-prod/infrastructure/kustomization.yaml | 9 --------- clusters/d8-ugmk-prod/kustomization.yaml | 11 ++++++++++- 2 files changed, 10 insertions(+), 10 deletions(-) delete mode 100644 clusters/d8-ugmk-prod/infrastructure/kustomization.yaml diff --git a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml b/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml deleted file mode 100644 index 07f1f1e..0000000 --- a/clusters/d8-ugmk-prod/infrastructure/kustomization.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -resources: - - ../../../infrastructure/kafka/d8-ugmk-prod - - ../../../infrastructure/rabbitmq/d8-ugmk-prod - - ../../../infrastructure/camunda/d8-ugmk-prod - - ../../../infrastructure/vault/d8-ugmk-prod - - ../../../infrastructure/postgresql/d8-ugmk-prod - - ../../../infrastructure/zitadel/d8-ugmk-prod diff --git a/clusters/d8-ugmk-prod/kustomization.yaml b/clusters/d8-ugmk-prod/kustomization.yaml index c516c39..6718742 100644 --- a/clusters/d8-ugmk-prod/kustomization.yaml +++ b/clusters/d8-ugmk-prod/kustomization.yaml @@ -3,10 +3,19 @@ kind: Kustomization resources: - ./flux-system - ./helm-repositories.yaml - - ./infrastructure + + +# infrastructure + - ../../infrastructure/kafka/d8-ugmk-prod + - ../../infrastructure/rabbitmq/d8-ugmk-prod + - ../../infrastructure/camunda/d8-ugmk-prod + - ../../infrastructure/vault/d8-ugmk-prod + - ../../infrastructure/postgresql/d8-ugmk-prod + - ../../infrastructure/zitadel/d8-ugmk-prod - ../../infrastructure/istio-config/d8-ugmk-prod - ./istio-ingress - ./bootstrap-jobs + # apps - ../../apps/attachments/d8-ugmk-prod - ../../apps/control-interface/d8-ugmk-prod \ No newline at end of file From 512ef2ec8e0a533ef6ca5ed9e2eeceb18eab3597 Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 14:46:18 +0300 Subject: [PATCH 19/28] Migrate `srx-admin` HelmRelease from `django` namespace to `control-interface` and update related configurations. --- apps/control-interface/d8-ugmk-prod/helmrelease.yaml | 10 ++++------ apps/control-interface/d8-ugmk-prod/kustomization.yaml | 1 + apps/control-interface/d8-ugmk-prod/namespace.yaml | 7 +++++++ 3 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 apps/control-interface/d8-ugmk-prod/namespace.yaml diff --git a/apps/control-interface/d8-ugmk-prod/helmrelease.yaml b/apps/control-interface/d8-ugmk-prod/helmrelease.yaml index 0bab467..e31e8b2 100644 --- a/apps/control-interface/d8-ugmk-prod/helmrelease.yaml +++ b/apps/control-interface/d8-ugmk-prod/helmrelease.yaml @@ -2,7 +2,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: srx-admin - namespace: django + namespace: control-interface spec: interval: 10m @@ -43,13 +43,11 @@ spec: enabled: true name: - _default: srx-admin + _default: frontend replicaCount: _default: 1 - stage: 1 - preprod: 3 - production: 3 + port: _default: 80 @@ -64,7 +62,7 @@ spec: enabled: true name: - _default: srx-admin-svc + _default: frontend-svc type: diff --git a/apps/control-interface/d8-ugmk-prod/kustomization.yaml b/apps/control-interface/d8-ugmk-prod/kustomization.yaml index 64ff6c5..39ccef0 100644 --- a/apps/control-interface/d8-ugmk-prod/kustomization.yaml +++ b/apps/control-interface/d8-ugmk-prod/kustomization.yaml @@ -4,3 +4,4 @@ kind: Kustomization namespace: django resources: - helmrelease.yaml + - namespace.yaml diff --git a/apps/control-interface/d8-ugmk-prod/namespace.yaml b/apps/control-interface/d8-ugmk-prod/namespace.yaml new file mode 100644 index 0000000..e773ad1 --- /dev/null +++ b/apps/control-interface/d8-ugmk-prod/namespace.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: control-interface + labels: + istio-injection: disabled + security.deckhouse.io/pod-policy: privileged From 8dfceabd9a0e49932d538df3c5b895474642d6bf Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 14:53:00 +0300 Subject: [PATCH 20/28] Update `d8-ugmk-prod` kustomization to use `control-interface` namespace --- apps/control-interface/d8-ugmk-prod/kustomization.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/control-interface/d8-ugmk-prod/kustomization.yaml b/apps/control-interface/d8-ugmk-prod/kustomization.yaml index 39ccef0..b806ebd 100644 --- a/apps/control-interface/d8-ugmk-prod/kustomization.yaml +++ b/apps/control-interface/d8-ugmk-prod/kustomization.yaml @@ -1,7 +1,7 @@ --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -namespace: django +namespace: control-interface resources: - helmrelease.yaml - namespace.yaml From 6abde9cce2975812e97e6cb721c3620c1084e754 Mon Sep 17 00:00:00 2001 From: Kochetkov S Date: Wed, 15 Jul 2026 14:53:18 +0300 Subject: [PATCH 21/28] ++ change infra domains --- .../istio-ingress/certificate.yaml | 3 ++- .../camunda/d8-ugmk-prod/camunda.yaml | 10 ++++---- .../d8-ugmk-prod/istio-config.yaml | 24 +++++++++---------- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/clusters/d8-ugmk-prod/istio-ingress/certificate.yaml b/clusters/d8-ugmk-prod/istio-ingress/certificate.yaml index d95d380..6fb5625 100644 --- a/clusters/d8-ugmk-prod/istio-ingress/certificate.yaml +++ b/clusters/d8-ugmk-prod/istio-ingress/certificate.yaml @@ -4,8 +4,9 @@ metadata: name: sarex-wildcard namespace: d8-ingress-istio spec: - commonName: "*.uralmine.com" + commonName: "*.sarex-k8s.uralmine.com" dnsNames: + - "*.sarex-k8s.uralmine.com" - "*.uralmine.com" issuerRef: group: cert-manager.io diff --git a/infrastructure/camunda/d8-ugmk-prod/camunda.yaml b/infrastructure/camunda/d8-ugmk-prod/camunda.yaml index 6c10a9e..30d0764 100644 --- a/infrastructure/camunda/d8-ugmk-prod/camunda.yaml +++ b/infrastructure/camunda/d8-ugmk-prod/camunda.yaml @@ -164,15 +164,15 @@ spec: - name: regcred identity: auth: - publicIssuerUrl: "https://camunda-keycloak.contour.infra.sarex.tech/auth/realms/camunda-platform" + publicIssuerUrl: "https://camunda-keycloak.sarex-k8s.uralmine.com/auth/realms/camunda-platform" identity: - redirectUrl: "https://camunda-identity.contour.infra.sarex.tech" + redirectUrl: "https://camunda-identity.sarex-k8s.uralmine.com" operate: - redirectUrl: "https://camunda-operate.contour.infra.sarex.tech" + redirectUrl: "https://camunda-operate.sarex-k8s.uralmine.com" tasklist: - redirectUrl: "https://camunda-tasklist.contour.infra.sarex.tech" + redirectUrl: "https://camunda-tasklist.sarex-k8s.uralmine.com" optimize: - redirectUrl: "https://camunda-optimize.contour.infra.sarex.tech" + redirectUrl: "https://camunda-optimize.sarex-k8s.uralmine.com" webModeler: redirectUrl: "https://camunda-web-modeler.contour.infra.sarex.tech" console: diff --git a/infrastructure/istio-config/d8-ugmk-prod/istio-config.yaml b/infrastructure/istio-config/d8-ugmk-prod/istio-config.yaml index 415ef85..04b9e06 100644 --- a/infrastructure/istio-config/d8-ugmk-prod/istio-config.yaml +++ b/infrastructure/istio-config/d8-ugmk-prod/istio-config.yaml @@ -21,23 +21,23 @@ spec: istio.deckhouse.io/ingress-gateway-class: istio servers: - hosts: - - sarex-camunda-keycloak.uralmine.com + - camunda-keycloak.sarex-k8s.uralmine.com tls: credentialName: istio-ingress-tls - hosts: - - sarex-camunda-identity.uralmine.com + - camunda-identity.sarex-k8s.uralmine.com tls: credentialName: istio-ingress-tls - hosts: - - sarex-camunda.uralmine.com + - camunda-operate.sarex-k8s.uralmine.com tls: credentialName: istio-ingress-tls - hosts: - - sarex-camunda-tasklist.uralmine.com + - camunda-tasklist.sarex-k8s.uralmine.com tls: credentialName: istio-ingress-tls - hosts: - - sarex-camunda-optimize.uralmine.com + - camunda-optimize.sarex-k8s.uralmine.com tls: credentialName: istio-ingress-tls rabbitmq: @@ -47,7 +47,7 @@ spec: istio.deckhouse.io/ingress-gateway-class: istio servers: - hosts: - - sarex-rabbitmq.uralmine.com + - rabbitmq.sarex-k8s.uralmine.com tls: credentialName: istio-ingress-tls zitadel: @@ -64,7 +64,7 @@ spec: camunda-keycloak: namespace: default hosts: - - sarex-camunda-keycloak.uralmine.com + - camunda-keycloak.sarex-k8s.uralmine.com gateways: - default/camunda-gateway routes: @@ -75,7 +75,7 @@ spec: camunda-identity: namespace: default hosts: - - sarex-camunda-identity.uralmine.com + - camunda-identity.sarex-k8s.uralmine.com gateways: - default/camunda-gateway routes: @@ -86,7 +86,7 @@ spec: camunda-operate: namespace: default hosts: - - sarex-camunda.uralmine.com + - camunda-operate.sarex-k8s.uralmine.com gateways: - default/camunda-gateway routes: @@ -97,7 +97,7 @@ spec: camunda-tasklist: namespace: default hosts: - - sarex-camunda-tasklist.uralmine.com + - camunda-tasklist.sarex-k8s.uralmine.com gateways: - default/camunda-gateway routes: @@ -108,7 +108,7 @@ spec: camunda-optimize: namespace: default hosts: - - sarex-camunda-optimize.uralmine.com + - camunda-optimize.sarex-k8s.uralmine.com gateways: - default/camunda-gateway routes: @@ -119,7 +119,7 @@ spec: rabbitmq: namespace: default hosts: - - sarex-rabbitmq.uralmine.com + - rabbitmq.sarex-k8s.uralmine.com gateways: - default/rabbitmq-gateway routes: From 15f9b3036b1199b40752ed0a2a1882057ca3f908 Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 14:58:26 +0300 Subject: [PATCH 22/28] Migrate `srx-admin` HelmRelease from `control-interface` namespace to `django` and update related configurations. --- apps/control-interface/d8-ugmk-prod/helmrelease.yaml | 6 +++--- apps/control-interface/d8-ugmk-prod/kustomization.yaml | 2 +- apps/control-interface/d8-ugmk-prod/namespace.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/control-interface/d8-ugmk-prod/helmrelease.yaml b/apps/control-interface/d8-ugmk-prod/helmrelease.yaml index e31e8b2..44b3af2 100644 --- a/apps/control-interface/d8-ugmk-prod/helmrelease.yaml +++ b/apps/control-interface/d8-ugmk-prod/helmrelease.yaml @@ -2,7 +2,7 @@ apiVersion: helm.toolkit.fluxcd.io/v2 kind: HelmRelease metadata: name: srx-admin - namespace: control-interface + namespace: django spec: interval: 10m @@ -43,7 +43,7 @@ spec: enabled: true name: - _default: frontend + _default: srx-admin replicaCount: _default: 1 @@ -62,7 +62,7 @@ spec: enabled: true name: - _default: frontend-svc + _default: srx-admin-svc type: diff --git a/apps/control-interface/d8-ugmk-prod/kustomization.yaml b/apps/control-interface/d8-ugmk-prod/kustomization.yaml index b806ebd..39ccef0 100644 --- a/apps/control-interface/d8-ugmk-prod/kustomization.yaml +++ b/apps/control-interface/d8-ugmk-prod/kustomization.yaml @@ -1,7 +1,7 @@ --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -namespace: control-interface +namespace: django resources: - helmrelease.yaml - namespace.yaml diff --git a/apps/control-interface/d8-ugmk-prod/namespace.yaml b/apps/control-interface/d8-ugmk-prod/namespace.yaml index e773ad1..e6b13ca 100644 --- a/apps/control-interface/d8-ugmk-prod/namespace.yaml +++ b/apps/control-interface/d8-ugmk-prod/namespace.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Namespace metadata: - name: control-interface + name: django labels: istio-injection: disabled security.deckhouse.io/pod-policy: privileged From 2b1bc53e1b64060151c4372d8b470d15d42ce833 Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 15:35:30 +0300 Subject: [PATCH 23/28] Add `attachments` namespace definition to `d8-ugmk-prod` --- apps/attachments/d8-ugmk-prod/namespace.yaml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 apps/attachments/d8-ugmk-prod/namespace.yaml diff --git a/apps/attachments/d8-ugmk-prod/namespace.yaml b/apps/attachments/d8-ugmk-prod/namespace.yaml new file mode 100644 index 0000000..b689e35 --- /dev/null +++ b/apps/attachments/d8-ugmk-prod/namespace.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: attachments + labels: + istio-injection: disabled + security.deckhouse.io/pod-policy: privileged From d191375321a1383e4d03f2a431ea52e5cfb77477 Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 15:35:50 +0300 Subject: [PATCH 24/28] Add `namespace.yaml` to `d8-ugmk-prod` kustomization --- apps/attachments/d8-ugmk-prod/kustomization.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/attachments/d8-ugmk-prod/kustomization.yaml b/apps/attachments/d8-ugmk-prod/kustomization.yaml index c9ccb75..3e41a8e 100644 --- a/apps/attachments/d8-ugmk-prod/kustomization.yaml +++ b/apps/attachments/d8-ugmk-prod/kustomization.yaml @@ -4,3 +4,4 @@ kind: Kustomization namespace: attachments resources: - helmrelease.yaml + - namespace.yaml From 58c189cd69a38fe42a6af6f11220851ae4a95ceb Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 15:42:46 +0300 Subject: [PATCH 25/28] Comment out `attachments` app in `d8-ugmk-prod` kustomization --- clusters/d8-ugmk-prod/kustomization.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clusters/d8-ugmk-prod/kustomization.yaml b/clusters/d8-ugmk-prod/kustomization.yaml index 6718742..2d41be0 100644 --- a/clusters/d8-ugmk-prod/kustomization.yaml +++ b/clusters/d8-ugmk-prod/kustomization.yaml @@ -17,5 +17,5 @@ resources: - ./bootstrap-jobs # apps - - ../../apps/attachments/d8-ugmk-prod +# - ../../apps/attachments/d8-ugmk-prod - ../../apps/control-interface/d8-ugmk-prod \ No newline at end of file From d60dc2a5e1fde947aaf16d38caa7b11316827132 Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 15:44:43 +0300 Subject: [PATCH 26/28] Enable `attachments` app in `d8-ugmk-prod` kustomization --- clusters/d8-ugmk-prod/kustomization.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/clusters/d8-ugmk-prod/kustomization.yaml b/clusters/d8-ugmk-prod/kustomization.yaml index 2d41be0..6718742 100644 --- a/clusters/d8-ugmk-prod/kustomization.yaml +++ b/clusters/d8-ugmk-prod/kustomization.yaml @@ -17,5 +17,5 @@ resources: - ./bootstrap-jobs # apps -# - ../../apps/attachments/d8-ugmk-prod + - ../../apps/attachments/d8-ugmk-prod - ../../apps/control-interface/d8-ugmk-prod \ No newline at end of file From 182787e33bc7221ee00ca837c19204b45da7d422 Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 16:22:37 +0300 Subject: [PATCH 27/28] Migrate `srx-admin` from raw manifest definitions to HelmRelease and move from `control-interface` namespace to `django`. Remove deprecated resources and update related configurations. --- .../attachments/d8-ugmk-prod/helmrelease.yaml | 110 ------------------ .../d8-ugmk-prod/kustomization.yaml | 7 +- apps/control-interface/base/deployment.yaml | 29 ----- .../{d8-ugmk-prod => base}/helmrelease.yaml | 4 +- .../control-interface/base/kustomization.yaml | 6 +- apps/control-interface/base/namespace.yaml | 7 -- apps/control-interface/base/service.yaml | 14 --- .../d8-ugmk-prod/kustomization.yaml | 7 +- .../yc-k8s-test/kustomization.yaml | 3 +- .../yc-k8s-test/replicas.yaml | 13 ++- 10 files changed, 28 insertions(+), 172 deletions(-) delete mode 100644 apps/attachments/d8-ugmk-prod/helmrelease.yaml delete mode 100644 apps/control-interface/base/deployment.yaml rename apps/control-interface/{d8-ugmk-prod => base}/helmrelease.yaml (95%) delete mode 100644 apps/control-interface/base/namespace.yaml delete mode 100644 apps/control-interface/base/service.yaml diff --git a/apps/attachments/d8-ugmk-prod/helmrelease.yaml b/apps/attachments/d8-ugmk-prod/helmrelease.yaml deleted file mode 100644 index 5857773..0000000 --- a/apps/attachments/d8-ugmk-prod/helmrelease.yaml +++ /dev/null @@ -1,110 +0,0 @@ ---- -apiVersion: helm.toolkit.fluxcd.io/v2 -kind: HelmRelease -metadata: - name: attachments - namespace: attachments -spec: - interval: 10m - chart: - spec: - chart: universal-chart - version: "0.1.9" - sourceRef: - kind: HelmRepository - name: yc-oci-charts - namespace: flux-system - interval: 10m - install: - remediation: - retries: 3 - upgrade: - remediation: - retries: 3 - values: - global: - env: _default - services: - attachments: - enabled: true - serviceAccount: - enabled: - _default: true - name: - _default: attachments-vault - deployment: - enabled: true - name: - _default: attachments - replicaCount: - _default: 1 - port: - _default: 8000 - command: - _default: ["/bin/bash", "-ec"] - args: - _default: - - | - set -a - [ -f /vault/secrets/attachments-db ] && . /vault/secrets/attachments-db - [ -f /vault/secrets/attachments-s3 ] && . /vault/secrets/attachments-s3 - set +a - exec /opt/attachments/entrypoint.sh - image: - name: - _default: cr.yandex/crp3ccidau046kdj8g9q/attachments:feature_6238c882 - pullPolicy: - _default: IfNotPresent - service: - enabled: true - name: - _default: attachments-service - type: - _default: ClusterIP - port: - _default: 8000 - targetPort: - _default: 8000 - portName: - _default: http - imagePullSecrets: - enabled: - _default: true - name: - _default: regcred - envs: - - name: POSTGRES_POOL_SIZE - value: - _default: "10" - - name: API_ADDRESS - value: - _default: 0.0.0.0:8000 - podAnnotations: - _default: - traffic.sidecar.istio.io/excludeOutboundPorts: "4317,4318,9411,8200" - vault.hashicorp.com/agent-init-first: "true" - vault.hashicorp.com/agent-inject: "true" - vault.hashicorp.com/agent-pre-populate-only: "true" - vault.hashicorp.com/auth-path: auth/kubernetes - vault.hashicorp.com/role: attachments - vault.hashicorp.com/agent-inject-secret-attachments-db: secrets/data/postgresql/apps/attachments - vault.hashicorp.com/agent-inject-template-attachments-db: |- - {{- with secret "secrets/data/postgresql/apps/attachments" -}} - DATABASE_HOST=postgresql.attachments.svc.cluster.local - DATABASE_PORT=5432 - DATABASE_NAME=attachments_db - DATABASE_USER={{ index .Data.data "username" }} - DATABASE_PASSWORD={{ index .Data.data "password" }} - DATABASE_SSL_MODE=disable - {{- end -}} - vault.hashicorp.com/agent-inject-secret-attachments-s3: secrets/data/minio/apps/attachments - vault.hashicorp.com/agent-inject-template-attachments-s3: |- - {{- with secret "secrets/data/minio/apps/attachments" -}} - YANDEX_S3_ENDPOINT_URL=minio.minio:9000 - YANDEX_S3_ACCESS_KEY_ID={{ index .Data.data "access_key" }} - YANDEX_S3_SECRET_ACCESS_KEY={{ index .Data.data "secret_key" }} - YANDEX_S3_USE_SSL=false - YANDEX_S3_REGION=ru-central - YANDEX_S3_VERIFY=false - BUCKET_NAME=attachments - {{- end -}} diff --git a/apps/attachments/d8-ugmk-prod/kustomization.yaml b/apps/attachments/d8-ugmk-prod/kustomization.yaml index 3e41a8e..70a0b40 100644 --- a/apps/attachments/d8-ugmk-prod/kustomization.yaml +++ b/apps/attachments/d8-ugmk-prod/kustomization.yaml @@ -3,5 +3,10 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: attachments resources: - - helmrelease.yaml + - ../base - namespace.yaml +patches: [] +# - path: patch.yaml +# target: +# kind: HelmRelease +# name: attachments diff --git a/apps/control-interface/base/deployment.yaml b/apps/control-interface/base/deployment.yaml deleted file mode 100644 index 914db47..0000000 --- a/apps/control-interface/base/deployment.yaml +++ /dev/null @@ -1,29 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: srx-admin - namespace: control-interface - labels: - app: srx-admin -spec: - replicas: 1 - selector: - matchLabels: - app: srx-admin - template: - metadata: - labels: - app: srx-admin - spec: - containers: - - name: srx-admin - image: cr.yandex/crp3ccidau046kdj8g9q/srx-admin:prod_3b9cb250 - imagePullPolicy: IfNotPresent - ports: - - name: http - containerPort: 80 - protocol: TCP - imagePullSecrets: - - name: regcred - diff --git a/apps/control-interface/d8-ugmk-prod/helmrelease.yaml b/apps/control-interface/base/helmrelease.yaml similarity index 95% rename from apps/control-interface/d8-ugmk-prod/helmrelease.yaml rename to apps/control-interface/base/helmrelease.yaml index 44b3af2..0bab467 100644 --- a/apps/control-interface/d8-ugmk-prod/helmrelease.yaml +++ b/apps/control-interface/base/helmrelease.yaml @@ -47,7 +47,9 @@ spec: replicaCount: _default: 1 - + stage: 1 + preprod: 3 + production: 3 port: _default: 80 diff --git a/apps/control-interface/base/kustomization.yaml b/apps/control-interface/base/kustomization.yaml index 1abd7c3..64ff6c5 100644 --- a/apps/control-interface/base/kustomization.yaml +++ b/apps/control-interface/base/kustomization.yaml @@ -1,8 +1,6 @@ --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization -namespace: control-interface +namespace: django resources: - - namespace.yaml - - deployment.yaml - - service.yaml + - helmrelease.yaml diff --git a/apps/control-interface/base/namespace.yaml b/apps/control-interface/base/namespace.yaml deleted file mode 100644 index febf860..0000000 --- a/apps/control-interface/base/namespace.yaml +++ /dev/null @@ -1,7 +0,0 @@ ---- -apiVersion: v1 -kind: Namespace -metadata: - name: control-interface - labels: - istio-injection: enabled diff --git a/apps/control-interface/base/service.yaml b/apps/control-interface/base/service.yaml deleted file mode 100644 index d7c0c1d..0000000 --- a/apps/control-interface/base/service.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -apiVersion: v1 -kind: Service -metadata: - name: frontend-svc - namespace: control-interface -spec: - type: ClusterIP - selector: - app: srx-admin - ports: - - port: 80 - targetPort: 80 - protocol: TCP diff --git a/apps/control-interface/d8-ugmk-prod/kustomization.yaml b/apps/control-interface/d8-ugmk-prod/kustomization.yaml index 39ccef0..6b283c2 100644 --- a/apps/control-interface/d8-ugmk-prod/kustomization.yaml +++ b/apps/control-interface/d8-ugmk-prod/kustomization.yaml @@ -3,5 +3,10 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization namespace: django resources: - - helmrelease.yaml + - ../base - namespace.yaml +patches: [] +# - path: patch.yaml +# target: +# kind: HelmRelease +# name: srx-admin diff --git a/apps/control-interface/yc-k8s-test/kustomization.yaml b/apps/control-interface/yc-k8s-test/kustomization.yaml index 5c65d7e..1409ba9 100644 --- a/apps/control-interface/yc-k8s-test/kustomization.yaml +++ b/apps/control-interface/yc-k8s-test/kustomization.yaml @@ -1,10 +1,11 @@ --- apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization +namespace: django resources: - ../base patches: - path: replicas.yaml target: - kind: Deployment + kind: HelmRelease name: srx-admin diff --git a/apps/control-interface/yc-k8s-test/replicas.yaml b/apps/control-interface/yc-k8s-test/replicas.yaml index af3c901..9b697c3 100644 --- a/apps/control-interface/yc-k8s-test/replicas.yaml +++ b/apps/control-interface/yc-k8s-test/replicas.yaml @@ -1,8 +1,13 @@ --- -apiVersion: apps/v1 -kind: Deployment +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease metadata: name: srx-admin - namespace: control-interface + namespace: django spec: - replicas: 1 + values: + services: + frontend: + deployment: + replicaCount: + _default: 1 From 1ab02557a59e3473524de21bef801be9a282e7b7 Mon Sep 17 00:00:00 2001 From: emelinda Date: Wed, 15 Jul 2026 16:28:08 +0300 Subject: [PATCH 28/28] Add `srx-admin` HelmRelease to `d8-ugmk-prod` in `django` namespace with default replica count --- apps/control-interface/d8-ugmk-prod/patch.yaml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 apps/control-interface/d8-ugmk-prod/patch.yaml diff --git a/apps/control-interface/d8-ugmk-prod/patch.yaml b/apps/control-interface/d8-ugmk-prod/patch.yaml new file mode 100644 index 0000000..9b697c3 --- /dev/null +++ b/apps/control-interface/d8-ugmk-prod/patch.yaml @@ -0,0 +1,13 @@ +--- +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: srx-admin + namespace: django +spec: + values: + services: + frontend: + deployment: + replicaCount: + _default: 1