From b32de1bc05194d3b38b42a0264e508c8ee0fbe23 Mon Sep 17 00:00:00 2001 From: yanghua Date: Mon, 27 Feb 2023 18:40:33 +0800 Subject: [PATCH 1/5] [Addon #579] Add Apache Kyuubi as a experimental addon Signed-off-by: yanghua --- experimental/addons/kyuubi/README.md | 3 + .../addons/kyuubi/definitions/mytrait.cue | 25 +++++++ experimental/addons/kyuubi/metadata.yaml | 7 ++ experimental/addons/kyuubi/parameter.cue | 10 +++ .../addons/kyuubi/resources/myresource.cue | 18 +++++ .../addons/kyuubi/schemas/myschema.yaml | 8 +++ experimental/addons/kyuubi/template.cue | 71 +++++++++++++++++++ experimental/addons/kyuubi/views/my-view.cue | 31 ++++++++ 8 files changed, 173 insertions(+) create mode 100644 experimental/addons/kyuubi/README.md create mode 100644 experimental/addons/kyuubi/definitions/mytrait.cue create mode 100644 experimental/addons/kyuubi/metadata.yaml create mode 100644 experimental/addons/kyuubi/parameter.cue create mode 100644 experimental/addons/kyuubi/resources/myresource.cue create mode 100644 experimental/addons/kyuubi/schemas/myschema.yaml create mode 100644 experimental/addons/kyuubi/template.cue create mode 100644 experimental/addons/kyuubi/views/my-view.cue diff --git a/experimental/addons/kyuubi/README.md b/experimental/addons/kyuubi/README.md new file mode 100644 index 000000000..1c2aae1da --- /dev/null +++ b/experimental/addons/kyuubi/README.md @@ -0,0 +1,3 @@ +# kyuubi + +This is an addon template. Check how to build your own addon: https://kubevela.net/docs/platform-engineers/addon/intro diff --git a/experimental/addons/kyuubi/definitions/mytrait.cue b/experimental/addons/kyuubi/definitions/mytrait.cue new file mode 100644 index 000000000..53bf66226 --- /dev/null +++ b/experimental/addons/kyuubi/definitions/mytrait.cue @@ -0,0 +1,25 @@ +// We put Definitions in definitions directory. +// References: +// - https://kubevela.net/docs/platform-engineers/cue/definition-edit +// - https://kubevela.net/docs/platform-engineers/addon/intro#definitions-directoryoptional +"mytrait": { + alias: "mt" + annotations: {} + attributes: { + appliesToWorkloads: [ + "deployments.apps", + "replicasets.apps", + "statefulsets.apps", + ] + conflictsWith: [] + podDisruptive: false + workloadRefPath: "" + } + description: "My trait description." + labels: {} + type: "trait" +} +template: { + parameter: {param: ""} + outputs: {sample: {}} +} diff --git a/experimental/addons/kyuubi/metadata.yaml b/experimental/addons/kyuubi/metadata.yaml new file mode 100644 index 000000000..8172069a7 --- /dev/null +++ b/experimental/addons/kyuubi/metadata.yaml @@ -0,0 +1,7 @@ +description: An addon for KubeVela. +icon: "" +invisible: false +name: kyuubi +tags: +- my-tag +version: 1.0.0 diff --git a/experimental/addons/kyuubi/parameter.cue b/experimental/addons/kyuubi/parameter.cue new file mode 100644 index 000000000..01184b38d --- /dev/null +++ b/experimental/addons/kyuubi/parameter.cue @@ -0,0 +1,10 @@ +// parameter.cue is used to store addon parameters. +// +// You can use these parameters in template.cue or in resources/ by 'parameter.myparam' +// +// For example, you can use parameters to allow the user to customize +// container images, ports, and etc. +parameter: { + // +usage=Custom parameter description + myparam: *"myns" | string +} diff --git a/experimental/addons/kyuubi/resources/myresource.cue b/experimental/addons/kyuubi/resources/myresource.cue new file mode 100644 index 000000000..a962ff3af --- /dev/null +++ b/experimental/addons/kyuubi/resources/myresource.cue @@ -0,0 +1,18 @@ +// We put Components in resources directory. +// References: +// - https://kubevela.net/docs/end-user/components/references +// - https://kubevela.net/docs/platform-engineers/addon/intro#resources-directoryoptional +output: { + type: "k8s-objects" + properties: { + objects: [ + { + // This creates a plain old Kubernetes namespace + apiVersion: "v1" + kind: "Namespace" + // We can use the parameter defined in parameter.cue like this. + metadata: name: parameter.myparam + }, + ] + } +} diff --git a/experimental/addons/kyuubi/schemas/myschema.yaml b/experimental/addons/kyuubi/schemas/myschema.yaml new file mode 100644 index 000000000..8f5d801c8 --- /dev/null +++ b/experimental/addons/kyuubi/schemas/myschema.yaml @@ -0,0 +1,8 @@ +# We put UI Schemas that correspond to Definitions in schemas directory. +# References: +# - https://kubevela.net/docs/platform-engineers/addon/intro#schemas-directoryoptional +# - https://kubevela.net/docs/reference/ui-schema +- jsonKey: myparam + label: MyParam + validate: + required: true diff --git a/experimental/addons/kyuubi/template.cue b/experimental/addons/kyuubi/template.cue new file mode 100644 index 000000000..4cfcb393b --- /dev/null +++ b/experimental/addons/kyuubi/template.cue @@ -0,0 +1,71 @@ +package main +output: { + apiVersion: "core.oam.dev/v1beta1" + kind: "Application" + spec: { + components: [ + { + type: "k8s-objects" + name: "kyuubi-ns" + properties: objects: [{ + apiVersion: "v1" + kind: "Namespace" + metadata: name: parameter.namespace + }] + }, + { + name: "flink-operator-helm" + type: "helm" + dependsOn: ["kyuubi-ns"] + type: "helm" + properties: { + repoType: "helm" + url: "https://github.com/apache/kyuubi/tree/master/charts/kyuubi" + chart: "kyuubi" + targetNamespace: parameter["namespace"] + version: "1.6.0" + values: { + webhook: { + create: parameter["createWebhook"] + } + + image: { + repository: parameter["imageRepository"] + tag: parameter["imageTag"] + } + + jobServiceAccount: { + create: parameter["createJobServiceAccount"] + } + + operatorServiceAccount: { + name: "flink-kubernetes-operator" + } + } + } + } + ] + policies: [ + { + type: "shared-resource" + name: "namespace" + properties: rules: [{ + selector: resourceTypes: ["Namespace"] + }] + }, + { + type: "topology" + name: "deploy-cert-manager-ns" + properties: { + namespace: parameter.namespace + if parameter.clusters != _|_ { + clusters: parameter.clusters + } + if parameter.clusters == _|_ { + clusterLabelSelector: {} + } + } + } + ] + } +} diff --git a/experimental/addons/kyuubi/views/my-view.cue b/experimental/addons/kyuubi/views/my-view.cue new file mode 100644 index 000000000..abfe8c745 --- /dev/null +++ b/experimental/addons/kyuubi/views/my-view.cue @@ -0,0 +1,31 @@ +// We put VelaQL views in views directory. +// +// VelaQL(Vela Query Language) is a resource query language for KubeVela, +// used to query status of any extended resources in application-level. +// Reference: https://kubevela.net/docs/platform-engineers/system-operation/velaql +// +// This VelaQL View querys the status of this addon. +// Use this view to query by: +// vela ql --query 'my-view{addonName:kyuubi}.status' +// You should see 'running'. + +import ( + "vela/ql" +) + +app: ql.#Read & { + value: { + kind: "Application" + apiVersion: "core.oam.dev/v1beta1" + metadata: { + name: "addon-" + parameter.addonName + namespace: "vela-system" + } + } +} + +parameter: { + addonName: *"kyuubi" | string +} + +status: app.value.status.status From b09f608bf6cda90cea4a8df50a1a95917b0e4cd8 Mon Sep 17 00:00:00 2001 From: yanghua Date: Fri, 10 Mar 2023 18:35:15 +0800 Subject: [PATCH 2/5] [Addon #579] Refactor kyuubi addon Signed-off-by: yanghua --- experimental/addons/kyuubi/metadata.yaml | 15 +++- experimental/addons/kyuubi/parameter.cue | 10 ++- .../addons/kyuubi/resources/myresource.cue | 18 ---- .../addons/kyuubi/schemas/myschema.yaml | 8 -- experimental/addons/kyuubi/template.cue | 88 ++++++------------- experimental/addons/kyuubi/views/my-view.cue | 31 ------- 6 files changed, 45 insertions(+), 125 deletions(-) delete mode 100644 experimental/addons/kyuubi/resources/myresource.cue delete mode 100644 experimental/addons/kyuubi/schemas/myschema.yaml delete mode 100644 experimental/addons/kyuubi/views/my-view.cue diff --git a/experimental/addons/kyuubi/metadata.yaml b/experimental/addons/kyuubi/metadata.yaml index 8172069a7..1cc980002 100644 --- a/experimental/addons/kyuubi/metadata.yaml +++ b/experimental/addons/kyuubi/metadata.yaml @@ -1,7 +1,14 @@ -description: An addon for KubeVela. -icon: "" +description: A distributed and multi-tenant gateway to provide serverless SQL on lakehouses. +icon: "https://raw.githubusercontent.com/apache/kyuubi/master/docs/imgs/logo.png" invisible: false name: kyuubi tags: -- my-tag -version: 1.0.0 +- apache/kyuubi +version: 1.6 +url: https://github.com/apache/kyuubi + +dependencies: + - name: fluxcd + +system: + vela: ">=1.5.0-beta.3" diff --git a/experimental/addons/kyuubi/parameter.cue b/experimental/addons/kyuubi/parameter.cue index 01184b38d..29da4771c 100644 --- a/experimental/addons/kyuubi/parameter.cue +++ b/experimental/addons/kyuubi/parameter.cue @@ -5,6 +5,12 @@ // For example, you can use parameters to allow the user to customize // container images, ports, and etc. parameter: { - // +usage=Custom parameter description - myparam: *"myns" | string + // +usage=Deploy to specified clusters. Leave empty to deploy to all clusters. + clusters?: [...string] + // +usage=Namespace to deploy to + namespace: *"kyuubi-ns" | string + // +usage=Specify the image repository + "imageRepository": *"apache/kyuubi" | string + // +usage=Specify the image tag + "imageTag": *"" | string } diff --git a/experimental/addons/kyuubi/resources/myresource.cue b/experimental/addons/kyuubi/resources/myresource.cue deleted file mode 100644 index a962ff3af..000000000 --- a/experimental/addons/kyuubi/resources/myresource.cue +++ /dev/null @@ -1,18 +0,0 @@ -// We put Components in resources directory. -// References: -// - https://kubevela.net/docs/end-user/components/references -// - https://kubevela.net/docs/platform-engineers/addon/intro#resources-directoryoptional -output: { - type: "k8s-objects" - properties: { - objects: [ - { - // This creates a plain old Kubernetes namespace - apiVersion: "v1" - kind: "Namespace" - // We can use the parameter defined in parameter.cue like this. - metadata: name: parameter.myparam - }, - ] - } -} diff --git a/experimental/addons/kyuubi/schemas/myschema.yaml b/experimental/addons/kyuubi/schemas/myschema.yaml deleted file mode 100644 index 8f5d801c8..000000000 --- a/experimental/addons/kyuubi/schemas/myschema.yaml +++ /dev/null @@ -1,8 +0,0 @@ -# We put UI Schemas that correspond to Definitions in schemas directory. -# References: -# - https://kubevela.net/docs/platform-engineers/addon/intro#schemas-directoryoptional -# - https://kubevela.net/docs/reference/ui-schema -- jsonKey: myparam - label: MyParam - validate: - required: true diff --git a/experimental/addons/kyuubi/template.cue b/experimental/addons/kyuubi/template.cue index 4cfcb393b..2cd79f6d3 100644 --- a/experimental/addons/kyuubi/template.cue +++ b/experimental/addons/kyuubi/template.cue @@ -3,69 +3,33 @@ output: { apiVersion: "core.oam.dev/v1beta1" kind: "Application" spec: { - components: [ - { - type: "k8s-objects" - name: "kyuubi-ns" - properties: objects: [{ - apiVersion: "v1" - kind: "Namespace" - metadata: name: parameter.namespace - }] - }, - { - name: "flink-operator-helm" - type: "helm" - dependsOn: ["kyuubi-ns"] - type: "helm" - properties: { - repoType: "helm" - url: "https://github.com/apache/kyuubi/tree/master/charts/kyuubi" - chart: "kyuubi" - targetNamespace: parameter["namespace"] - version: "1.6.0" - values: { - webhook: { - create: parameter["createWebhook"] - } - - image: { - repository: parameter["imageRepository"] - tag: parameter["imageTag"] - } - - jobServiceAccount: { - create: parameter["createJobServiceAccount"] - } - - operatorServiceAccount: { - name: "flink-kubernetes-operator" - } - } - } - } - ] - policies: [ - { - type: "shared-resource" - name: "namespace" - properties: rules: [{ - selector: resourceTypes: ["Namespace"] - }] - }, - { - type: "topology" - name: "deploy-cert-manager-ns" - properties: { - namespace: parameter.namespace - if parameter.clusters != _|_ { - clusters: parameter.clusters + components: [{ + type: "k8s-objects" + name: "kyuubi-ns" + properties: objects: [{ + apiVersion: "v1" + kind: "Namespace" + metadata: name: parameter.namespace + }] + }, + { + name: "kyuubi-helm" + type: "helm" + dependsOn: ["kyuubi-ns"] + properties: { + repoType: "helm" + url: "https://awesome-kyuubi.github.io/kyuubi-helm-chart/" + chart: "kyuubi" + targetNamespace: parameter["namespace"] + version: "0.1.0" + values: { + image: { + repository: parameter["imageRepository"] + tag: parameter["imageTag"] + }, } - if parameter.clusters == _|_ { - clusterLabelSelector: {} - } - } } - ] + }] + policies: [] } } diff --git a/experimental/addons/kyuubi/views/my-view.cue b/experimental/addons/kyuubi/views/my-view.cue deleted file mode 100644 index abfe8c745..000000000 --- a/experimental/addons/kyuubi/views/my-view.cue +++ /dev/null @@ -1,31 +0,0 @@ -// We put VelaQL views in views directory. -// -// VelaQL(Vela Query Language) is a resource query language for KubeVela, -// used to query status of any extended resources in application-level. -// Reference: https://kubevela.net/docs/platform-engineers/system-operation/velaql -// -// This VelaQL View querys the status of this addon. -// Use this view to query by: -// vela ql --query 'my-view{addonName:kyuubi}.status' -// You should see 'running'. - -import ( - "vela/ql" -) - -app: ql.#Read & { - value: { - kind: "Application" - apiVersion: "core.oam.dev/v1beta1" - metadata: { - name: "addon-" + parameter.addonName - namespace: "vela-system" - } - } -} - -parameter: { - addonName: *"kyuubi" | string -} - -status: app.value.status.status From 3505bf8daa89aabb6cfe2d07e8818625c81d5b72 Mon Sep 17 00:00:00 2001 From: yanghua Date: Mon, 13 Mar 2023 17:57:34 +0800 Subject: [PATCH 3/5] Remove definitions dir Signed-off-by: yanghua --- .../addons/kyuubi/definitions/mytrait.cue | 25 ------------------- 1 file changed, 25 deletions(-) delete mode 100644 experimental/addons/kyuubi/definitions/mytrait.cue diff --git a/experimental/addons/kyuubi/definitions/mytrait.cue b/experimental/addons/kyuubi/definitions/mytrait.cue deleted file mode 100644 index 53bf66226..000000000 --- a/experimental/addons/kyuubi/definitions/mytrait.cue +++ /dev/null @@ -1,25 +0,0 @@ -// We put Definitions in definitions directory. -// References: -// - https://kubevela.net/docs/platform-engineers/cue/definition-edit -// - https://kubevela.net/docs/platform-engineers/addon/intro#definitions-directoryoptional -"mytrait": { - alias: "mt" - annotations: {} - attributes: { - appliesToWorkloads: [ - "deployments.apps", - "replicasets.apps", - "statefulsets.apps", - ] - conflictsWith: [] - podDisruptive: false - workloadRefPath: "" - } - description: "My trait description." - labels: {} - type: "trait" -} -template: { - parameter: {param: ""} - outputs: {sample: {}} -} From 1b2546b367174a424b2ebce3a59ffa477aed3efe Mon Sep 17 00:00:00 2001 From: yanghua Date: Mon, 13 Mar 2023 19:12:12 +0800 Subject: [PATCH 4/5] Update readme file Signed-off-by: yanghua --- experimental/addons/kyuubi/README.md | 36 +++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/experimental/addons/kyuubi/README.md b/experimental/addons/kyuubi/README.md index 1c2aae1da..5d990d9c7 100644 --- a/experimental/addons/kyuubi/README.md +++ b/experimental/addons/kyuubi/README.md @@ -1,3 +1,37 @@ # kyuubi -This is an addon template. Check how to build your own addon: https://kubevela.net/docs/platform-engineers/addon/intro +Apache Kyuubi is a distributed and multi-tenant gateway to provide serverless SQL on data warehouses and lakehouses. + +For more information about Apache Kyuubi, please see the Apache Kyuubi documentation: https://kyuubi.readthedocs.io/en/master/. + +## Install + +Add experimental registry + +``` +vela addon registry add experimental --type=helm --endpoint=https://addons.kubevela.net/experimental/ +``` + +Enable this addon + +``` +vela addon enable fluxcd +vela addon enable kyuubi +``` + +Uninstall + +``` +vela addon disable kyuubi +``` + +# To check the kyuubi running status + +* Firstly, check the kyuubi(and the fluxcd and we need to deploy by helm) running status: + +``` +vela addon status kyuubi +vela ls -A | grep kyuubi +``` + + From a44568fb25dbaec21aed1580c9be84d40debdf03 Mon Sep 17 00:00:00 2001 From: yanghua Date: Fri, 17 Mar 2023 18:57:02 +0800 Subject: [PATCH 5/5] Update template file Signed-off-by: yanghua --- experimental/addons/kyuubi/template.cue | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/experimental/addons/kyuubi/template.cue b/experimental/addons/kyuubi/template.cue index 2cd79f6d3..b549b53a1 100644 --- a/experimental/addons/kyuubi/template.cue +++ b/experimental/addons/kyuubi/template.cue @@ -18,7 +18,7 @@ output: { dependsOn: ["kyuubi-ns"] properties: { repoType: "helm" - url: "https://awesome-kyuubi.github.io/kyuubi-helm-chart/" + url: "https://awesome-kyuubi.github.io/kyuubi-helm-chart/" chart: "kyuubi" targetNamespace: parameter["namespace"] version: "0.1.0" @@ -27,6 +27,11 @@ output: { repository: parameter["imageRepository"] tag: parameter["imageTag"] }, + kyuubiConf: { + kyuubiDefaults: """ + spark.master=local + """ + } } } }]