From a445251d51874799a1dafb75995d213d634abbec Mon Sep 17 00:00:00 2001 From: Chaer Date: Wed, 27 Sep 2023 18:05:04 +0800 Subject: [PATCH 1/3] release operating-0.1.0 --- charts/operating | 2 +- versions/operating/0.1.0/Chart.yaml | 16 + versions/operating/0.1.0/README.md | 0 versions/operating/0.1.0/templates/NOTES.txt | 2 + .../operating/0.1.0/templates/_helpers.tpl | 62 ++ .../crd/apps.kusionstack.io_collasets.yaml | 581 ++++++++++++++++++ ...pps.kusionstack.io_podtransitionrules.yaml | 409 ++++++++++++ .../apps.kusionstack.io_resourcecontexts.yaml | 56 ++ .../operating/0.1.0/templates/deployment.yaml | 56 ++ .../operating/0.1.0/templates/namespace.yaml | 9 + .../operating/0.1.0/templates/rbac/rbac.yaml | 271 ++++++++ .../operating/0.1.0/templates/service.yaml | 12 + .../0.1.0/templates/webhook/webhook.yaml | 115 ++++ versions/operating/0.1.0/values.yaml | 31 + 14 files changed, 1621 insertions(+), 1 deletion(-) create mode 100644 versions/operating/0.1.0/Chart.yaml create mode 100644 versions/operating/0.1.0/README.md create mode 100644 versions/operating/0.1.0/templates/NOTES.txt create mode 100644 versions/operating/0.1.0/templates/_helpers.tpl create mode 100644 versions/operating/0.1.0/templates/crd/apps.kusionstack.io_collasets.yaml create mode 100644 versions/operating/0.1.0/templates/crd/apps.kusionstack.io_podtransitionrules.yaml create mode 100644 versions/operating/0.1.0/templates/crd/apps.kusionstack.io_resourcecontexts.yaml create mode 100644 versions/operating/0.1.0/templates/deployment.yaml create mode 100644 versions/operating/0.1.0/templates/namespace.yaml create mode 100644 versions/operating/0.1.0/templates/rbac/rbac.yaml create mode 100644 versions/operating/0.1.0/templates/service.yaml create mode 100644 versions/operating/0.1.0/templates/webhook/webhook.yaml create mode 100644 versions/operating/0.1.0/values.yaml diff --git a/charts/operating b/charts/operating index 8b57616..4d08656 120000 --- a/charts/operating +++ b/charts/operating @@ -1 +1 @@ -../versions/operating/0.1.0-beta.1 \ No newline at end of file +../versions/operating/0.1.0 \ No newline at end of file diff --git a/versions/operating/0.1.0/Chart.yaml b/versions/operating/0.1.0/Chart.yaml new file mode 100644 index 0000000..7fde8ac --- /dev/null +++ b/versions/operating/0.1.0/Chart.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +name: operating +description: Helm chart for operating components +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: 0.1.0 + +home: https://KusionStack.io +sources: + - https://github.com/KusionStack/operating \ No newline at end of file diff --git a/versions/operating/0.1.0/README.md b/versions/operating/0.1.0/README.md new file mode 100644 index 0000000..e69de29 diff --git a/versions/operating/0.1.0/templates/NOTES.txt b/versions/operating/0.1.0/templates/NOTES.txt new file mode 100644 index 0000000..50a494f --- /dev/null +++ b/versions/operating/0.1.0/templates/NOTES.txt @@ -0,0 +1,2 @@ +KusionStack Operating installed. +Welcome! ^_^ \ No newline at end of file diff --git a/versions/operating/0.1.0/templates/_helpers.tpl b/versions/operating/0.1.0/templates/_helpers.tpl new file mode 100644 index 0000000..140fe6b --- /dev/null +++ b/versions/operating/0.1.0/templates/_helpers.tpl @@ -0,0 +1,62 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "myctrlmesh.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "myctrlmesh.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "myctrlmesh.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "myctrlmesh.labels" -}} +helm.sh/chart: {{ include "myctrlmesh.chart" . }} +{{ include "myctrlmesh.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "myctrlmesh.selectorLabels" -}} +app.kubernetes.io/name: {{ include "myctrlmesh.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "myctrlmesh.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "myctrlmesh.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/versions/operating/0.1.0/templates/crd/apps.kusionstack.io_collasets.yaml b/versions/operating/0.1.0/templates/crd/apps.kusionstack.io_collasets.yaml new file mode 100644 index 0000000..73d0e39 --- /dev/null +++ b/versions/operating/0.1.0/templates/crd/apps.kusionstack.io_collasets.yaml @@ -0,0 +1,581 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.10.0 + creationTimestamp: null + name: collasets.apps.kusionstack.io +spec: + group: apps.kusionstack.io + names: + kind: CollaSet + listKind: CollaSetList + plural: collasets + shortNames: + - cls + singular: collaset + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: The desired number of pods. + jsonPath: .spec.replicas + name: DESIRED + type: integer + - description: The number of currently all pods. + jsonPath: .status.replicas + name: CURRENT + type: integer + - description: The number of pods available. + jsonPath: .status.availableReplicas + name: AVAILABLE + type: integer + - description: The number of pods updated. + jsonPath: .status.updatedReplicas + name: UPDATED + type: integer + - description: The number of pods ready. + jsonPath: .status.updatedReadyReplicas + name: UPDATED_READY + type: integer + - description: The number of pods updated available. + jsonPath: .status.updatedAvailableReplicas + name: UPDATED_AVAILABLE + type: integer + - description: The current revision. + jsonPath: .status.currentRevision + name: CURRENT_REVISION + type: string + - description: The updated revision. + jsonPath: .status.updatedRevision + name: UPDATED_REVISION + type: string + - jsonPath: .metadata.creationTimestamp + name: AGE + type: date + name: v1alpha1 + schema: + openAPIV3Schema: + description: CollaSet is the Schema for the collasets 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: CollaSetSpec defines the desired state of CollaSet + properties: + historyLimit: + description: Indicate the number of histories to be conserved If unspecified, + defaults to 20 + format: int32 + type: integer + paused: + description: Indicates that the scaling and updating is paused and + will not be processed by the CollaSet controller. + type: boolean + replicas: + description: Replicas is the desired number of replicas of the given + Template. These are replicas in the sense that they are instantiations + of the same Template, but individual replicas also have a consistent + identity. If unspecified, defaults to 0. + format: int32 + type: integer + scaleStrategy: + description: ScaleStrategy indicates the strategy detail that will + be used during pod scaling. + properties: + context: + description: Context indicates the pool from which to allocate + Pod instance ID. CollaSets are allowed to share the same Context. + It is not allowed to change. Context defaults to be CollaSet's + name. + type: string + operationDelaySeconds: + description: OperationDelaySeconds indicates how many seconds + it should delay before operating scale. + format: int32 + type: integer + persistentVolumeClaimRetentionPolicy: + description: PersistentVolumeClaimRetentionPolicy describes the + lifecycle of PersistentVolumeClaim created from volumeClaimTemplates. + By default, all persistent volume claims are created as needed + and deleted after no pod is using them. This policy allows the + lifecycle to be altered, for example by deleting persistent + volume claims when their CollaSet is deleted, or when their + pod is scaled down. + properties: + whenDeleted: + description: WhenDeleted specifies what happens to PVCs created + from CollaSet VolumeClaimTemplates when the CollaSet is + deleted. The default policy of `Delete` policy causes those + PVCs to be deleted. `Retain` causes PVCs to not be affected + by StatefulSet deletion. The + type: string + whenScaled: + description: WhenScaled specifies what happens to PVCs created + from StatefulSet VolumeClaimTemplates when the StatefulSet + is scaled down. The default policy of `Retain` causes PVCs + to not be affected by a scaledown. The `Delete` policy causes + the associated PVCs for any excess pods above the replica + count to be deleted. + type: string + type: object + podToExclude: + description: PodToExclude indicates the pods which will be orphaned + by CollaSet. + items: + type: string + type: array + podToInclude: + description: PodToInclude indicates the pods which will be adapted + by CollaSet. + items: + type: string + type: array + type: object + selector: + description: Selector is a label query over pods that should match + the replica count. It must match the pod template's labels. + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement is a selector that + contains values, a key, and an operator that relates the key + and values. + properties: + key: + description: key is the label key that the selector applies + to. + type: string + operator: + description: operator represents a key's relationship to + a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + 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 + x-kubernetes-map-type: atomic + template: + description: Template is the object that describes the pod that will + be created if insufficient replicas are detected. Each pod stamped + out by the CollaSet will fulfill this Template, but have a unique + identity from the rest of the CollaSet. + x-kubernetes-preserve-unknown-fields: true + updateStrategy: + description: UpdateStrategy indicates the CollaSetUpdateStrategy that + will be employed to update Pods in the CollaSet when a revision + is made to Template. + properties: + operationDelaySeconds: + description: OperationDelaySeconds indicates how many seconds + it should delay before operating update. + format: int32 + type: integer + podUpgradePolicy: + description: PodUpdatePolicy indicates the policy by to update + pods. + type: string + rollingUpdate: + description: RollingUpdate is used to communicate parameters when + Type is RollingUpdateStatefulSetStrategyType. + properties: + byLabel: + description: ByLabel indicates the update progress is controlled + by attaching pod label. + type: object + byPartition: + description: ByPartition indicates the update progress is + controlled by partition value. + properties: + partition: + description: Partition controls the update progress by + indicating how many pods should be updated. Defaults + to nil (all pods will be updated) + format: int32 + type: integer + type: object + type: object + type: object + volumeClaimTemplates: + description: VolumeClaimTemplates is a list of claims that pods are + allowed to reference. The StatefulSet controller is responsible + for mapping network identities to claims in a way that maintains + the identity of a pod. Every claim in this list must have at least + one matching (by name) volumeMount in one container in the template. + A claim in this list takes precedence over any volumes in the template, + with the same name. + items: + description: PersistentVolumeClaim is a user's request for and claim + to a persistent volume + 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: + description: 'Standard object''s metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata' + type: object + spec: + description: 'Spec defines the desired characteristics of a + volume requested by a pod author. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + accessModes: + description: 'AccessModes contains the desired access modes + the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + dataSource: + description: 'This field can be used to specify either: + * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) + * An existing PVC (PersistentVolumeClaim) If the provisioner + or an external controller can support the specified data + source, it will create a new volume based on the contents + of the specified data source. If the AnyVolumeDataSource + feature gate is enabled, this field will always have the + same contents as the DataSourceRef field.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, the + specified Kind must be in the core API group. For + any other third-party types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + description: 'Specifies the object from which to populate + the volume with data, if a non-empty volume is desired. + This may be any local object from a non-empty API group + (non core object) or a PersistentVolumeClaim object. When + this field is specified, volume binding will only succeed + if the type of the specified object matches some installed + volume populator or dynamic provisioner. This field will + replace the functionality of the DataSource field and + as such if both fields are non-empty, they must have the + same value. For backwards compatibility, both fields (DataSource + and DataSourceRef) will be set to the same value automatically + if one of them is empty and the other is non-empty. There + are two important differences between DataSource and DataSourceRef: + * While DataSource only allows two specific types of objects, + DataSourceRef allows any non-core object, as well as PersistentVolumeClaim + objects. * While DataSource ignores disallowed values + (dropping them), DataSourceRef preserves all values, and + generates an error if a disallowed value is specified. + (Alpha) Using this field requires the AnyVolumeDataSource + feature gate to be enabled.' + properties: + apiGroup: + description: APIGroup is the group for the resource + being referenced. If APIGroup is not specified, the + specified Kind must be in the core API group. For + any other third-party types, APIGroup is required. + type: string + kind: + description: Kind is the type of resource being referenced + type: string + name: + description: Name is the name of resource being referenced + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + resources: + description: 'Resources represents the minimum resources + the volume should have. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources' + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Limits describes the maximum amount of + compute resources allowed. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: 'Requests describes the minimum amount + of compute resources required. If Requests is omitted + for a container, it defaults to Limits if that is + explicitly specified, otherwise to an implementation-defined + value. More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/' + type: object + type: object + selector: + description: A label query over volumes to consider for + binding. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, + NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists + or DoesNotExist, the values array must be empty. + This array is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + 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 + x-kubernetes-map-type: atomic + storageClassName: + description: 'Name of the StorageClass required by the claim. + More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1' + type: string + volumeMode: + description: volumeMode defines what type of volume is required + by the claim. Value of Filesystem is implied when not + included in claim spec. + type: string + volumeName: + description: VolumeName is the binding reference to the + PersistentVolume backing this claim. + type: string + type: object + status: + description: 'Status represents the current information/status + of a persistent volume claim. Read-only. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims' + properties: + accessModes: + description: 'AccessModes contains the actual access modes + the volume backing the PVC has. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1' + items: + type: string + type: array + capacity: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: Represents the actual resources of the underlying + volume. + type: object + conditions: + description: Current Condition of persistent volume claim. + If underlying persistent volume is being resized then + the Condition will be set to 'ResizeStarted'. + items: + description: PersistentVolumeClaimCondition contails details + about state of pvc + properties: + lastProbeTime: + description: Last time we probed the condition. + format: date-time + type: string + lastTransitionTime: + description: Last time the condition transitioned + from one status to another. + format: date-time + type: string + message: + description: Human-readable message indicating details + about last transition. + type: string + reason: + description: Unique, this should be a short, machine + understandable string that gives the reason for + condition's last transition. If it reports "ResizeStarted" + that means the underlying persistent volume is being + resized. + type: string + status: + type: string + type: + description: PersistentVolumeClaimConditionType is + a valid value of PersistentVolumeClaimCondition.Type + type: string + required: + - status + - type + type: object + type: array + phase: + description: Phase represents the current phase of PersistentVolumeClaim. + type: string + type: object + type: object + type: array + type: object + status: + description: CollaSetStatus defines the observed state of CollaSet + properties: + availableReplicas: + description: The number of available replicas (ready for at least + minReadySeconds) for this replica set. + format: int32 + type: integer + collisionCount: + description: Count of hash collisions for the DaemonSet. The DaemonSet + controller uses this field as a collision avoidance mechanism when + it needs to create the name for the newest ControllerRevision. + format: int32 + type: integer + conditions: + description: Represents the latest available observations of a CollaSet's + current state. + items: + properties: + lastTransitionTime: + description: Last time the condition transitioned from one status + to another. + format: date-time + type: string + message: + description: A human readable message indicating details about + the transition. + type: string + reason: + description: The reason for the condition's last transition. + type: string + status: + description: Status of the condition, one of True, False, Unknown. + type: string + type: + description: Type of in place set condition. + type: string + type: object + type: array + currentRevision: + description: CurrentRevision, if not empty, indicates the version + of the CollaSet. + type: string + observedGeneration: + description: ObservedGeneration is the most recent generation observed + for this CollaSet. It corresponds to the CollaSet's generation, + which is updated on mutation by the API Server. + format: int64 + type: integer + operatingReplicas: + description: OperatingReplicas indicates the number of pods during + pod ops lifecycle and not finish update-phase. + format: int32 + type: integer + readyReplicas: + description: ReadyReplicas indicates the number of the pod with ready + condition + format: int32 + type: integer + replicas: + description: Replicas is the most recently observed number of replicas. + format: int32 + type: integer + scheduledReplicas: + description: the number of scheduled replicas for the CollaSet. + format: int32 + type: integer + updatedAvailableReplicas: + description: UpdatedAvailableReplicas indicates the number of available + updated revision replicas for this CollaSet. A pod is updated available + means the pod is ready for updated revision and accessible + format: int32 + type: integer + updatedReadyReplicas: + description: UpdatedReadyReplicas indicates the number of the pod + with updated revision and ready condition + format: int32 + type: integer + updatedReplicas: + description: The number of pods in updated version. + format: int32 + type: integer + updatedRevision: + description: UpdatedRevision, if not empty, indicates the version + of the CollaSet currently updated. + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/versions/operating/0.1.0/templates/crd/apps.kusionstack.io_podtransitionrules.yaml b/versions/operating/0.1.0/templates/crd/apps.kusionstack.io_podtransitionrules.yaml new file mode 100644 index 0000000..e7fb88a --- /dev/null +++ b/versions/operating/0.1.0/templates/crd/apps.kusionstack.io_podtransitionrules.yaml @@ -0,0 +1,409 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.10.0 + creationTimestamp: null + name: podtransitionrules.apps.kusionstack.io +spec: + group: apps.kusionstack.io + names: + kind: PodTransitionRule + listKind: PodTransitionRuleList + plural: podtransitionrules + shortNames: + - rs + singular: podtransitionrule + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: PodTransitionRule is the Schema for the podtransitionrules 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: PodTransitionRuleSpec defines the desired state of PodTransitionRule + properties: + rules: + description: Rules is a set of rules that need to be checked in certain + situations + items: + properties: + availablePolicy: + description: AvailablePolicy is the rule to check if the max + unavailable number is reached by current resource updated. + properties: + maxUnavailableValue: + anyOf: + - type: integer + - type: string + description: MaxUnavailableValue is the expected max unavailable + replicas which is allowed to be a integer or a percentage + of the whole number of the target resources. + x-kubernetes-int-or-string: true + minAvailableValue: + anyOf: + - type: integer + - type: string + description: MinAvailableValue is the expected min available + replicas which is allowed to be a integer or a percentage + of the whole number of the target resources. + x-kubernetes-int-or-string: true + type: object + conditions: + description: Conditions is the condition to control this rule + enable or not. + items: + type: string + type: array + disabled: + description: Disabled is the switch to control this rule enable + or not. + type: boolean + filter: + description: Filter is used to filter the resource which will + be applied with this rule. + properties: + labelSelector: + description: LabelSelector is used to filter resource with + label match expresion. + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, + NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists + or DoesNotExist, the values array must be empty. + This array is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + 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 + x-kubernetes-map-type: atomic + type: object + labelCheck: + description: LabelCheck is the rule to check labels on pods. + properties: + requires: + description: Requires is the expected labels on pods + properties: + matchExpressions: + description: matchExpressions is a list of label selector + requirements. The requirements are ANDed. + items: + description: A label selector requirement is a selector + that contains values, a key, and an operator that + relates the key and values. + properties: + key: + description: key is the label key that the selector + applies to. + type: string + operator: + description: operator represents a key's relationship + to a set of values. Valid operators are In, + NotIn, Exists and DoesNotExist. + type: string + values: + description: values is an array of string values. + If the operator is In or NotIn, the values array + must be non-empty. If the operator is Exists + or DoesNotExist, the values array must be empty. + This array is replaced during a strategic merge + patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + 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 + x-kubernetes-map-type: atomic + required: + - requires + type: object + name: + description: Name is the name of this rule. + type: string + stage: + type: string + webhook: + properties: + clientConfig: + description: ClientConfig is the configuration for accessing + webhook. + properties: + caBundle: + description: '`caBundle` is a PEM encoded CA bundle + which will be used to validate the webhook''s server + certificate. If unspecified, system trust roots on + the apiserver are used. After Base64.' + type: string + intervalSeconds: + description: interval give the request time interval, + default 5s + format: int64 + type: integer + traceTimeoutSeconds: + description: timeout give the request time timeout, + default 60s + format: int64 + type: integer + url: + description: '`url` gives the location of the webhook, + in standard URL form (`scheme://host:port/path`). + Exactly one of `url` or `service` must be specified.' + type: string + required: + - url + type: object + failurePolicy: + description: FailurePolicy defines how unrecognized errors + from the admission endpoint are handled - allowed values + are Ignore or Fail. Defaults to Ignore. + type: string + parameters: + description: Parameters contains the list of parameters + which will be passed in webhook body. + items: + properties: + key: + description: Key is the parameter key. + type: string + value: + description: Value is the string value of this parameter. + Defaults to "". + type: string + valueFrom: + description: Source for the parameter's value. Cannot + be used if value is not empty. + properties: + fieldRef: + description: 'Selects a field of the pod: supports + metadata.name, metadata.namespace, metadata.labels, + metadata.annotations, spec.nodeName, spec.serviceAccountName, + status.hostIP, status.podIP.' + properties: + apiVersion: + description: Version of the schema the FieldPath + is written in terms of, defaults to "v1". + type: string + fieldPath: + description: Path of the field to select in + the specified API version. + type: string + required: + - fieldPath + type: object + x-kubernetes-map-type: atomic + type: object + type: object + type: array + type: object + type: object + type: array + selector: + description: Selector select the targets controlled by podtransitionrule + properties: + matchExpressions: + description: matchExpressions is a list of label selector requirements. + The requirements are ANDed. + items: + description: A label selector requirement is a selector that + contains values, a key, and an operator that relates the key + and values. + properties: + key: + description: key is the label key that the selector applies + to. + type: string + operator: + description: operator represents a key's relationship to + a set of values. Valid operators are In, NotIn, Exists + and DoesNotExist. + type: string + values: + description: values is an array of string values. If the + operator is In or NotIn, the values array must be non-empty. + If the operator is Exists or DoesNotExist, the values + array must be empty. This array is replaced during a strategic + merge patch. + items: + type: string + type: array + required: + - key + - operator + type: object + type: array + 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 + x-kubernetes-map-type: atomic + type: object + status: + description: PodTransitionRuleStatus defines the observed state of PodTransitionRule + properties: + details: + description: Details contains all pods podtransitionrule details + items: + properties: + name: + type: string + passed: + type: boolean + passedRules: + items: + type: string + type: array + rejectInfo: + items: + properties: + reason: + type: string + ruleName: + type: string + type: object + type: array + stage: + type: string + required: + - passed + type: object + type: array + observedGeneration: + description: ObservedGeneration is the most recent generation observed + for PodTransitionRule + format: int64 + type: integer + ruleStates: + description: RuleStates contains the RuleState resource info in webhook + processing progress. + items: + description: RuleState defines the resource info in webhook processing + progress. + properties: + name: + description: Name is the name representing the rule + type: string + webhookStatus: + description: WebhookStatus is the webhook status representing + processing progress + properties: + itemStatus: + description: PodTransitionRulePodStatus is async request + status representing the info of pods + items: + description: ItemStatus defines async request info of + resources + properties: + name: + description: Name representing the name of pod + type: string + traceId: + description: TraceId representing async request traceId + type: string + webhookChecked: + description: WebhookChecked representing the pod has + pass check + type: boolean + required: + - webhookChecked + type: object + type: array + traceStates: + description: TraceStates is a list of tracing info + items: + properties: + beginTime: + format: date-time + type: string + lastTime: + format: date-time + type: string + message: + type: string + traceId: + type: string + type: object + type: array + type: object + type: object + type: array + targets: + description: Targets contains the target resource names this PodTransitionRule + is able to select. + items: + type: string + type: array + updateTime: + format: date-time + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/versions/operating/0.1.0/templates/crd/apps.kusionstack.io_resourcecontexts.yaml b/versions/operating/0.1.0/templates/crd/apps.kusionstack.io_resourcecontexts.yaml new file mode 100644 index 0000000..611dfae --- /dev/null +++ b/versions/operating/0.1.0/templates/crd/apps.kusionstack.io_resourcecontexts.yaml @@ -0,0 +1,56 @@ +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + controller-gen.kubebuilder.io/version: v0.10.0 + creationTimestamp: null + name: resourcecontexts.apps.kusionstack.io +spec: + group: apps.kusionstack.io + names: + kind: ResourceContext + listKind: ResourceContextList + plural: resourcecontexts + shortNames: + - rc + singular: resourcecontext + scope: Namespaced + versions: + - name: v1alpha1 + schema: + openAPIV3Schema: + description: ResourceContext is the Schema for the resourcecontext 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: ResourceContextSpec defines the desired state of ResourceContext + properties: + contexts: + items: + properties: + data: + additionalProperties: + type: string + type: object + id: + type: integer + required: + - id + type: object + type: array + type: object + type: object + served: true + storage: true diff --git a/versions/operating/0.1.0/templates/deployment.yaml b/versions/operating/0.1.0/templates/deployment.yaml new file mode 100644 index 0000000..ff54ed6 --- /dev/null +++ b/versions/operating/0.1.0/templates/deployment.yaml @@ -0,0 +1,56 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- toYaml .Values.commonLabels | nindent 4 }} + control-plane: {{ .Values.controlPlane }} + name: kusionstack-controller-manager + namespace: {{ .Values.namespace }} +spec: + replicas: {{ .Values.managerReplicas }} + selector: + matchLabels: + control-plane: {{ .Values.controlPlane }} + template: + metadata: + labels: + control-plane: {{ .Values.controlPlane }} + spec: + containers: + - args: + - --leader-elect + - --cert-dir=/webhook-certs + - --dns-name=kusionstack-controller-manager.{{ .Values.namespace }}.svc + - --health-probe-bind-address=:8081 + - --metrics-bind-address=127.0.0.1:8080 + - -v=4 + command: + - /manager + env: + - name: POD_NAMESPACE + valueFrom: + fieldRef: + fieldPath: metadata.namespace + image: {{ .Values.image.repo }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + {{- toYaml .Values.resources | nindent 10 }} + serviceAccountName: kusionstack-controller-manager + terminationGracePeriodSeconds: 0 + volumes: + - name: webhook-certs + secret: + secretName: webhook-certs \ No newline at end of file diff --git a/versions/operating/0.1.0/templates/namespace.yaml b/versions/operating/0.1.0/templates/namespace.yaml new file mode 100644 index 0000000..43be56f --- /dev/null +++ b/versions/operating/0.1.0/templates/namespace.yaml @@ -0,0 +1,9 @@ +{{- if .Values.namespaceEnabled -}} +apiVersion: v1 +kind: Namespace +metadata: + labels: + {{- toYaml .Values.commonLabels | nindent 4 }} + control-plane: {{ .Values.controlPlane }} + name: {{ .Values.namespace }} +{{- end }} \ No newline at end of file diff --git a/versions/operating/0.1.0/templates/rbac/rbac.yaml b/versions/operating/0.1.0/templates/rbac/rbac.yaml new file mode 100644 index 0000000..06f194b --- /dev/null +++ b/versions/operating/0.1.0/templates/rbac/rbac.yaml @@ -0,0 +1,271 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + labels: + {{- toYaml .Values.commonLabels | nindent 4 }} + name: kusionstack-controller-manager + namespace: {{ .Values.namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + labels: + {{- toYaml .Values.commonLabels | nindent 4 }} + name: kusionstack-leader-election-role + namespace: {{ .Values.namespace }} +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - get + - list + - watch + - create + - update + - patch + - delete +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: kusionstack-manager-role +rules: +- apiGroups: + - apps + resources: + - controllerrevisions + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps.kusionstack.io + resources: + - collasets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps.kusionstack.io + resources: + - collasets/finalizers + verbs: + - update +- apiGroups: + - apps.kusionstack.io + resources: + - collasets/status + verbs: + - get + - patch + - update +- apiGroups: + - apps.kusionstack.io + resources: + - resourcecontexts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps.kusionstack.io + resources: + - resourcecontexts/finalizers + verbs: + - update +- apiGroups: + - apps.kusionstack.io + resources: + - resourcecontexts/status + verbs: + - get + - patch + - update +- apiGroups: + - apps.kusionstack.io + resources: + - podtransitionrules + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps.kusionstack.io + resources: + - podtransitionrules/finalizers + verbs: + - update +- apiGroups: + - apps.kusionstack.io + resources: + - podtransitionrules/status + verbs: + - get + - patch + - update +- apiGroups: + - "" + resources: + - events + verbs: + - create + - patch + - update +- apiGroups: + - "" + resources: + - pods + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - pods/status + verbs: + - get + - patch + - update +- apiGroups: + - "" + resources: + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + creationTimestamp: null + name: kusionstack-webhook-role +rules: +- apiGroups: + - admissionregistration.k8s.io + resources: + - mutatingwebhookconfigurations + - validatingwebhookconfigurations + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - secrets/status + verbs: + - get + - patch + - update +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + labels: + {{- toYaml .Values.commonLabels | nindent 4 }} + name: kusionstack-leader-election-rolebinding + namespace: {{ .Values.namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: kusionstack-leader-election-role +subjects: +- kind: ServiceAccount + name: kusionstack-controller-manager + namespace: {{ .Values.namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + {{- toYaml .Values.commonLabels | nindent 4 }} + name: kusionstack-manager-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kusionstack-manager-role +subjects: +- kind: ServiceAccount + name: kusionstack-controller-manager + namespace: {{ .Values.namespace }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + labels: + {{- toYaml .Values.commonLabels | nindent 4 }} + name: kusionstack-webhook-rolebinding +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: kusionstack-webhook-role +subjects: +- kind: ServiceAccount + name: kusionstack-controller-manager + namespace: {{ .Values.namespace }} diff --git a/versions/operating/0.1.0/templates/service.yaml b/versions/operating/0.1.0/templates/service.yaml new file mode 100644 index 0000000..6d30706 --- /dev/null +++ b/versions/operating/0.1.0/templates/service.yaml @@ -0,0 +1,12 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: kusionstack-controller-manager + namespace: {{ .Values.namespace }} +spec: + ports: + - port: 443 + targetPort: 9443 + selector: + control-plane: {{ .Values.controlPlane }} \ No newline at end of file diff --git a/versions/operating/0.1.0/templates/webhook/webhook.yaml b/versions/operating/0.1.0/templates/webhook/webhook.yaml new file mode 100644 index 0000000..56e5698 --- /dev/null +++ b/versions/operating/0.1.0/templates/webhook/webhook.yaml @@ -0,0 +1,115 @@ +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: MutatingWebhookConfiguration +metadata: + name: kusionstack-controller-manager-mutating +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + namespace: {{ .Values.namespace }} + name: kusionstack-controller-manager + path: /mutating-generic + failurePolicy: Fail + name: mutating-pod.apps.kusionstack.io + objectSelector: + matchExpressions: + - key: kusionstack.io/control + operator: In + values: + - "true" + rules: + - apiGroups: + - '*' + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + - DELETE + resources: + - pods + - pods/status + scope: '*' + sideEffects: NoneOnDryRun +- name: mutating-generic.apps.kusionstack.io + sideEffects: NoneOnDryRun + admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + namespace: {{ .Values.namespace }} + name: kusionstack-controller-manager + path: /mutating-generic + failurePolicy: Fail + rules: + - apiGroups: + - "apps.kusionstack.io" + apiVersions: + - "*" + operations: + - CREATE + - UPDATE + - DELETE + resources: + - "*/*" +--- +apiVersion: admissionregistration.k8s.io/v1 +kind: ValidatingWebhookConfiguration +metadata: + name: kusionstack-controller-manager-validating +webhooks: +- admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + namespace: {{ .Values.namespace }} + name: kusionstack-controller-manager + path: /validating-generic + failurePolicy: Fail + name: validating-pod.apps.kusionstack.io + objectSelector: + matchExpressions: + - key: kusionstack.io/control + operator: In + values: + - "true" + rules: + - apiGroups: + - '*' + apiVersions: + - v1 + operations: + - CREATE + - UPDATE + resources: + - pods + scope: '*' + sideEffects: NoneOnDryRun +- name: validating-generic.apps.kusionstack.io + sideEffects: NoneOnDryRun + admissionReviewVersions: + - v1 + - v1beta1 + clientConfig: + service: + namespace: {{ .Values.namespace }} + name: kusionstack-controller-manager + path: /validating-generic + failurePolicy: Fail + rules: + - apiGroups: + - "apps.kusionstack.io" + apiVersions: + - "*" + operations: + - CREATE + - UPDATE + - DELETE + resources: + - "*/*" + scope: '*' \ No newline at end of file diff --git a/versions/operating/0.1.0/values.yaml b/versions/operating/0.1.0/values.yaml new file mode 100644 index 0000000..091dd6f --- /dev/null +++ b/versions/operating/0.1.0/values.yaml @@ -0,0 +1,31 @@ +# Default values for mykridge. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +managerReplicas: 3 + +project: operating +namespace: kusionstack-system +namespaceEnabled: true + +controlPlane: kusionstack-operating + +image: + tag: v0.1.0 + repo: kusionstack/operating + pullPolicy: IfNotPresent + +resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + +commonLabels: + app.kubernetes.io/part-of: operating + + + + From 3ceb28ec5c1ccb2d669451918a07cade691e8107 Mon Sep 17 00:00:00 2001 From: Chaer Date: Wed, 27 Sep 2023 18:22:59 +0800 Subject: [PATCH 2/3] delete helper --- .../operating/0.1.0/templates/_helpers.tpl | 62 ------------------- 1 file changed, 62 deletions(-) delete mode 100644 versions/operating/0.1.0/templates/_helpers.tpl diff --git a/versions/operating/0.1.0/templates/_helpers.tpl b/versions/operating/0.1.0/templates/_helpers.tpl deleted file mode 100644 index 140fe6b..0000000 --- a/versions/operating/0.1.0/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "myctrlmesh.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "myctrlmesh.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "myctrlmesh.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "myctrlmesh.labels" -}} -helm.sh/chart: {{ include "myctrlmesh.chart" . }} -{{ include "myctrlmesh.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "myctrlmesh.selectorLabels" -}} -app.kubernetes.io/name: {{ include "myctrlmesh.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "myctrlmesh.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "myctrlmesh.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} From 9bef7a5425f6334065dbde446c7e84638ed48508 Mon Sep 17 00:00:00 2001 From: Chaer Date: Wed, 27 Sep 2023 18:27:09 +0800 Subject: [PATCH 3/3] update description --- versions/operating/0.1.0/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/versions/operating/0.1.0/Chart.yaml b/versions/operating/0.1.0/Chart.yaml index 7fde8ac..c767d51 100644 --- a/versions/operating/0.1.0/Chart.yaml +++ b/versions/operating/0.1.0/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v1 name: operating -description: Helm chart for operating components +description: Helm chart for KusionStack Operating # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/)