apiVersion: v1 kind: ServiceAccount metadata: name: kubeslice-install-crds namespace: kubeslice-system labels: app.kubernetes.io/managed-by: {{ .Release.Service | quote }} app.kubernetes.io/instance: {{ .Release.Name | quote }} app.kubernetes.io/version: {{ .Chart.AppVersion }} helm.sh/chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" annotations: "helm.sh/hook": pre-install,pre-upgrade,pre-rollback "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded "helm.sh/hook-weight": "1" --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubeslice-install-crds annotations: "helm.sh/hook": pre-install,pre-upgrade,pre-rollback "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded "helm.sh/hook-weight": "1" labels: app.kubernetes.io/name: kubeslice app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kubeslice-install-crds subjects: - kind: ServiceAccount name: kubeslice-install-crds namespace: kubeslice-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kubeslice-install-crds annotations: "helm.sh/hook": pre-install,pre-upgrade,pre-rollback "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded "helm.sh/hook-weight": "1" labels: app.kubernetes.io/name: kubeslice app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} rules: - apiGroups: - "apiextensions.k8s.io" resources: - customresourcedefinitions verbs: - get - list - patch - update - create --- apiVersion: v1 kind: ConfigMap metadata: name: kubeslice-install-crds annotations: "helm.sh/hook": pre-install,pre-upgrade,pre-rollback "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded "helm.sh/hook-weight": "1" labels: app.kubernetes.io/name: kubeslice app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} data: crds.yaml: | --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.7.0 creationTimestamp: null name: sliceresourcequotas.networking.kubeslice.io spec: group: networking.kubeslice.io names: kind: SliceResourceQuota listKind: SliceResourceQuotaList plural: sliceresourcequotas singular: sliceresourcequota scope: Namespaced versions: - name: v1alpha1 schema: openAPIV3Schema: description: SliceResourceQuota is the Schema for the sliceresourcequota 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: type: object status: properties: clusterName: description: ClusterName defines the name of the cluster for the ResourceQuota type: string configUpdatedOn: format: int64 type: integer resourceQuotaProfile: description: ResourceQuotaProfile defines the resource quota profile for the slice properties: clusterQuota: description: ClusterQuota defines the configuration for cluster quota of a resource quota properties: namespaceQuota: description: NamespaceQuota defines the configuration for namespace quota of a ClusterQuota items: description: NamespaceQuota defines the configuration for namespace quota of a ClusterQuota properties: enforceQuota: default: false description: EnforceQuota defines the enforceQuota status flag for NamespaceQuota type: boolean namespace: description: Namespace defines the namespace of the NamespaceQuota type: string resources: description: Resources defines the configuration for resources for NamespaceQuota properties: defaultLimitPerContainer: description: DefaultResourcePerContainerList is a set of (resource name, quantity) pairs. properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object defaultRequestPerContainer: description: DefaultRequestPerContainer is a set of (resource name, quantity) pairs. properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage LoNamespaceResourceQuotaStatuscal ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object limit: properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true podCount: description: PodCount in number. format: int64 type: integer type: object request: description: RequestResourceList is a set of (resource name, quantity) pairs. properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object type: object type: object type: array resources: description: Resources defines the configuration for resources for ClusterQuota properties: limit: properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true podCount: description: PodCount in number. format: int64 type: integer type: object request: description: RequestResourceList is a set of (resource name, quantity) pairs. properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object type: object type: object sliceQuota: description: SliceQuota defines the configuration for slice quota of a resource quota properties: resources: description: Resources defines the configuration for resources for SliceQuota properties: defaultRequestPerContainer: description: DefaultRequestPerContainer is a set of (resource name, quantity) pairs. properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage LoNamespaceResourceQuotaStatuscal ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object limit: properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true podCount: description: PodCount in number. format: int64 type: integer type: object request: description: RequestResourceList is a set of (resource name, quantity) pairs. properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object type: object type: object type: object sliceName: description: SliceName defines the name of the slice for the ResourceQuota type: string sliceResourceQuotaStatus: description: WorkerSliceResourceQuotaStatus defines the observed state of WorkerSliceResourceQuota properties: clusterResourceQuotaStatus: properties: namespaceResourceQuotaStatus: items: properties: namespace: type: string requestResourceUsage: description: RequestResourceList is a set of (resource name, quantity) pairs. properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object resourceUsage: properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true podCount: description: PodCount in number. format: int64 type: integer type: object type: object type: array requestResourceUsage: description: RequestResourceList is a set of (resource name, quantity) pairs. properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true type: object resourceUsage: properties: cpu: anyOf: - type: integer - type: string description: CPU in cores. (500m = .5 cores) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true ephemeralStorage: anyOf: - type: integer - type: string description: EphemeralStorage Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) The resource name for EphemeralStorage is alpha, and it can change across releases. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true memory: anyOf: - type: integer - type: string description: Memory in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true podCount: description: PodCount in number. format: int64 type: integer type: object type: object type: object type: object type: object served: true storage: true subresources: status: {} status: acceptedNames: kind: "" plural: "" conditions: [] storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.7.0 creationTimestamp: null name: serviceexports.networking.kubeslice.io spec: group: networking.kubeslice.io names: kind: ServiceExport listKind: ServiceExportList plural: serviceexports shortNames: - svcex singular: serviceexport scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .spec.slice name: Slice type: string - jsonPath: .spec.ingressEnabled name: Ingress type: boolean - jsonPath: .status.exposedPorts name: Port(s) type: string - jsonPath: .status.availableEndpoints name: Endpoints type: integer - jsonPath: .status.exportStatus name: Status type: string - jsonPath: .spec.aliases name: Alias type: string name: v1beta1 schema: openAPIV3Schema: description: ServiceExport is the Schema for the serviceexports 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: ServiceExportSpec defines the desired state of ServiceExport properties: aliases: description: Alias names for the exported service. The service could be addressed by the alias names in addition to the slice.local name. items: type: string type: array ingressEnabled: description: IngressEnabled denotes whether the traffic should be proxied through an ingress gateway type: boolean ports: description: Ports which should be exposed through the service items: description: ServicePort is the port exposed by ServicePod properties: containerPort: description: Port number exposed from the container format: int32 type: integer name: description: Name of the port type: string protocol: default: TCP description: Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP". type: string required: - containerPort type: object type: array selector: description: Selector is a label query over pods that should be exposed as a service 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 slice: description: Slice denotes the slice which the app is part of type: string required: - ports - selector - slice type: object status: description: ServiceExportStatus defines the observed state of ServiceExport properties: aliases: description: Alias names for the exported service. The service could be addressed by the alias names in addition to the slice.local name. items: type: string type: array availableEndpoints: description: AvailableEndpoints shows the number of available endpoints type: integer dnsName: description: DNSName is the FQDN to reach the service type: string exportStatus: description: ExportStatus denotes the export status of the service type: string exposedPorts: description: ExposedPorts shows a one line representation of ports and protocols exposed only used to show as a printercolumn type: string ingressGwEnabled: description: IngressGwEnabled denotes ingress gw is enabled for the serviceexport type: boolean ingressGwPod: description: IngressGwPod contains ingress gateway pod info properties: name: description: Name of the pod type: string nsmIp: description: NsmIP of the pod which is reachable within slice type: string required: - name type: object lastSync: description: Last sync time with backend format: int64 type: integer pods: description: Pods denotes the service endpoint pods items: description: ServicePod contains pod information which offers a service properties: dnsName: description: DNSName is the dns A record name for the pod type: string name: description: Name of the pod type: string nsmIp: description: NsmIP of the pod which is reachable within slice type: string podIp: description: PodIp of the pod which is reachable within cluster type: string required: - dnsName - name - podIp type: object type: array type: object type: object served: true storage: true subresources: status: {} status: acceptedNames: kind: "" plural: "" conditions: [] storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.7.0 creationTimestamp: null name: serviceimports.networking.kubeslice.io spec: group: networking.kubeslice.io names: kind: ServiceImport listKind: ServiceImportList plural: serviceimports shortNames: - svcim singular: serviceimport scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .spec.slice name: Slice type: string - jsonPath: .status.exposedPorts name: Port(s) type: string - jsonPath: .status.availableEndpoints name: Endpoints type: integer - jsonPath: .status.importStatus name: Status type: string - jsonPath: .spec.aliases name: Alias type: string name: v1beta1 schema: openAPIV3Schema: description: ServiceImport is the Schema for the serviceimports 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: ServiceImportSpec defines the desired state of ServiceImport properties: aliases: description: Alias names for the exported service. The service could be addressed by the alias names in addition to the slice.local name. items: type: string type: array dnsName: description: DNSName shows the FQDN to reach the service type: string ports: description: Ports which should be exposed through the service items: description: ServicePort is the port exposed by ServicePod properties: containerPort: description: Port number exposed from the container format: int32 type: integer name: description: Name of the port type: string protocol: default: TCP description: Protocol for port. Must be UDP, TCP, or SCTP. Defaults to "TCP". type: string required: - containerPort type: object type: array slice: description: Slice denotes the slice which the app is part of type: string required: - dnsName - ports - slice type: object status: description: ServiceImportStatus defines the observed state of ServiceImport properties: availableEndpoints: description: AvailableEndpoints shows the number of available endpoints type: integer endpoints: description: Endpoints which provide the service items: description: ServiceEndpoint contains details of a single endpoint which offers a particular service properties: clusterId: description: ClusterID which the endpoint belongs to type: string dnsName: description: DNSName type: string ip: description: IP of the pod which is reachable within slice type: string name: description: Name of the endpoint type: string port: description: Port to reach the endpoint format: int32 type: integer required: - clusterId - dnsName - ip - port type: object type: array exposedPorts: description: ExposedPorts shows a one line representation of ports and protocols exposed only used to show as a printercolumn type: string importStatus: description: ImportStatus denotes the status of the imported service type: string lastSync: description: Last sync time with backend format: int64 type: integer updatedOn: description: Used to match if the service is updated from backend format: int64 type: integer type: object type: object served: true storage: true subresources: status: {} status: acceptedNames: kind: "" plural: "" conditions: [] storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.7.0 creationTimestamp: null name: slicegateways.networking.kubeslice.io spec: group: networking.kubeslice.io names: kind: SliceGateway listKind: SliceGatewayList plural: slicegateways shortNames: - gw - slicegw singular: slicegateway scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .status.config.sliceGatewaySubnet name: Subnet type: string - jsonPath: .status.config.sliceGatewayRemoteSubnet name: Remote Subnet type: string - jsonPath: .status.config.sliceGatewayRemoteClusterId name: Remote Cluster type: string - jsonPath: .status.config.sliceGatewayStatus name: GW Status type: string name: v1beta1 schema: openAPIV3Schema: description: SliceGateway is the Schema for the slicegateways 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: SliceGatewaySpec defines the desired state of SliceGateway properties: siteName: description: SiteName is site name type: string sliceName: description: SliceName is the Name of the slice this gateway is attached into type: string type: object status: description: SliceGatewayStatus defines the observed state of SliceGateway properties: config: description: SliceGatewayConfig defines the config received from backend properties: sliceGatewayHostType: description: 'Host Type : server or client' type: string sliceGatewayId: description: UUID of the slice gateway. type: string sliceGatewayLocalVpnIp: description: Local VPN IP type: string sliceGatewayName: description: Slice Gateway Name type: string sliceGatewayNodePorts: description: Node port items: type: integer type: array sliceGatewayRemoteClusterId: description: Remote Cluster ID type: string sliceGatewayRemoteGatewayId: description: Remote Gateway ID type: string sliceGatewayRemoteNodeIps: description: Remote Node IPs items: type: string type: array sliceGatewayRemoteNodePorts: description: Remote Node Port items: type: integer type: array sliceGatewayRemoteSubnet: description: Remote Node Subnet type: string sliceGatewayRemoteVpnIp: description: Remote VPN IP type: string sliceGatewayStatus: description: SliceGateway status type: string sliceGatewaySubnet: description: Slice gateway subnet range. type: string sliceName: description: Name of the slice. type: string sliceSiteName: description: Slice gateway subnet range. type: string type: object configUpdatedOn: description: ConfigUpdatedOn is the time when Config updated from backend format: int64 type: integer connectionContextUpdatedOn: description: ConnectionContextUpdated is the time when context updated in pod format: int64 type: integer gatewayPodStatus: description: gatewayPodStatus is a list that consists of status of individual gatewaypods items: properties: localNsmIP: type: string peerPodName: type: string podIP: type: string podName: type: string routeRemoved: format: int32 type: integer tunnelStatus: properties: IntfName: type: string Latency: format: int64 type: integer LocalIP: type: string PacketLoss: format: int64 type: integer RemoteIP: type: string RxRate: format: int64 type: integer Status: format: int32 type: integer TxRate: format: int64 type: integer type: object type: object type: array peerIp: description: PeerIP is the gateway tunnel peer ip type: string podIps: description: PodIPs is the list of Ip of the gateway pods running in cluster items: type: string type: array podName: description: Deprecated PodName is the name of the gateway pod running in cluster type: string podNames: description: PodNames is the list of names of the gateway pods running in cluster items: type: string type: array podStatus: description: PodStatus shows whether gateway pod is healthy type: string type: object type: object served: true storage: true subresources: status: {} status: acceptedNames: kind: "" plural: "" conditions: [] storedVersions: [] --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.7.0 creationTimestamp: null name: slices.networking.kubeslice.io spec: group: networking.kubeslice.io names: kind: Slice listKind: SliceList plural: slices singular: slice scope: Namespaced versions: - name: v1beta1 schema: openAPIV3Schema: description: Slice is the Schema for the slices 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: SliceSpec defines the desired state of Slice type: object status: description: SliceStatus defines the observed state of Slice properties: allowedNamespaces: description: Slice Allowed Namespace list items: type: string type: array appPods: description: AppPods contains the list of app pods connected to the slice items: description: AppPod defines the app pods connected to slice properties: nsmInterface: description: NsmInterface is the nsm interface of App type: string nsmIp: description: NsmIP is the nsm ip of App type: string nsmPeerIp: description: PeerIp is the nsm peer ip of gateway type: string podIp: description: PodIP is App Pod IP type: string podName: description: PodName is App Pod Name type: string podNamespace: description: PodNamespace is App Pod Namespace type: string type: object type: array appPodsUpdatedOn: description: AppPodsUpdatedOn is the time when app pods list was updated format: int64 type: integer applicationNamespaces: description: Slice Application Namespace list items: type: string type: array dnsIP: description: DNSIP is the IP of Coredns server type: string networkPoliciesInstalled: default: false description: NetworkPoliciesInstalled defines whether the netpol are installed in atleast one applicationNamespace type: boolean sliceConfig: description: SliceConfig is the spec for slice received from hub cluster properties: clusterSubnetCIDR: description: ClusterSubnetCIDR is the subnet to be used by the current cluster type: string externalGatewayConfig: description: ExternalGatewayConfig determines istio ingress/egress configuration properties: egress: properties: enabled: type: boolean type: object gatewayType: type: string ingress: properties: enabled: type: boolean type: object nsIngress: properties: enabled: type: boolean type: object type: object namespaceIsolationProfile: description: Namespace Isolation profile contains fields related to namespace binding to slice properties: allowedNamespaces: description: Allowed namespaces is a list of namespaces that can send and receive traffic to app namespaces items: type: string type: array applicationNamespaces: description: Application namespaces is a list of namespaces that are bound to the slice items: type: string type: array isolationEnabled: default: false description: Enable Namespace Isolation in the slice type: boolean type: object qosProfileDetails: description: QOS profile details properties: bandwidthCeilingKbps: description: Bandwidth Ceiling eg:5000 type: integer bandwidthGuaranteedKbps: description: Bandwidth Guaranteed eg:4000 type: integer dscpClass: description: DSCP code for inter cluster traffic type: string priority: description: Priority 0-3 type: integer queueType: description: Queue Type type: string tcType: description: TC type type: string type: object sliceDisplayName: description: display name of the slice. type: string sliceId: description: UUID of the slice. type: string sliceIpam: description: IPAM configuration for the slice properties: ipamClusterOctet: description: Cluster specific octet for IPAM root subnet type: integer sliceIpamType: description: IPAM Type for slice type: string required: - sliceIpamType type: object sliceSubnet: description: IP subnet range of the slice. type: string sliceType: description: Type of the slice. type: string required: - qosProfileDetails - sliceDisplayName - sliceId - sliceIpam - sliceSubnet - sliceType type: object type: object type: object served: true storage: true subresources: status: {} status: acceptedNames: kind: "" plural: "" conditions: [] storedVersions: [] --- apiVersion: batch/v1 kind: Job metadata: name: kubeslice-install-crds namespace: kubeslice-system annotations: "helm.sh/hook": pre-install,pre-upgrade,pre-rollback "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded "helm.sh/hook-weight": "2" labels: app.kubernetes.io/name: kubeslice app.kubernetes.io/instance: {{ .Release.Name }} app.kubernetes.io/managed-by: {{ .Release.Service }} spec: backoffLimit: 3 template: metadata: name: kubeslice-install-crds spec: serviceAccountName: kubeslice-install-crds containers: - name: kubectl image: "alpine/k8s:1.22.9" command: - /bin/sh - -c - kubectl apply -f /tmp/crds.yaml volumeMounts: - mountPath: /tmp name: crds volumes: - name: crds configMap: name: kubeslice-install-crds items: - key: "crds.yaml" path: "crds.yaml" restartPolicy: OnFailure