From 4eece2c7b76b8a204e4fcda7c4731a41eb1c6418 Mon Sep 17 00:00:00 2001 From: Thomas Risberg Date: Thu, 8 Mar 2018 13:44:55 -0500 Subject: [PATCH] [incubator/spring-cloud-data-flow] Update to new app version 1.3.0 (#3525) * [incubator/spring-cloud-data-flow] Update to new app version 1.3.0 - Add new spring-cloud-skipper component - Add RBAC support - Update requirements versions * Updating chart for RBAC best practices * Addressing further review comments - use "scdf" prefix for name/fullname/serviceAccountName templates - remove namespace from Role definition - update to latest image tags for Data Flow server * Address review comments - add seviceAccount config to README - remove most port config options - move SPRING_APPLICATION_JSON to ConfigMap * Update Chart.yaml with latest release version * Adding names to container ports - refer to ports by name for services and probes - remove TCP protocol since it is the default - add probes for skipper deployment * Avoid warning message for skipper init-mysql-database init container * Modifying init container init-wait-mysql for skipper component * Fix env var references that include the release name - replaces any '-' characters with '_' to create valid env var references --- incubator/spring-cloud-data-flow/Chart.yaml | 7 +- incubator/spring-cloud-data-flow/README.md | 39 ++++++--- .../spring-cloud-data-flow/requirements.lock | 28 ++----- .../spring-cloud-data-flow/requirements.yaml | 6 +- .../templates/NOTES.txt | 6 +- .../templates/_helpers.tpl | 34 +++++--- .../templates/metrics-deployment-rabbit.yaml | 30 ++++--- .../templates/metrics-service.yaml | 9 +-- .../templates/secrets.yaml | 2 +- .../templates/server-config-rabbit.yaml | 10 +-- .../templates/server-deployment.yaml | 22 ++++-- .../templates/server-rbac.yaml | 41 ++++++++++ .../templates/server-service.yaml | 7 +- .../templates/service-account.yaml | 11 +++ .../templates/skipper-config.yaml | 12 +++ .../templates/skipper-deployment.yaml | 79 +++++++++++++++++++ .../templates/skipper-service.yaml | 20 +++++ incubator/spring-cloud-data-flow/values.yaml | 46 +++++++++-- 18 files changed, 315 insertions(+), 94 deletions(-) create mode 100644 incubator/spring-cloud-data-flow/templates/server-rbac.yaml create mode 100644 incubator/spring-cloud-data-flow/templates/service-account.yaml create mode 100644 incubator/spring-cloud-data-flow/templates/skipper-config.yaml create mode 100644 incubator/spring-cloud-data-flow/templates/skipper-deployment.yaml create mode 100644 incubator/spring-cloud-data-flow/templates/skipper-service.yaml diff --git a/incubator/spring-cloud-data-flow/Chart.yaml b/incubator/spring-cloud-data-flow/Chart.yaml index 2c1dcb22c8..f8f3ef3a3b 100644 --- a/incubator/spring-cloud-data-flow/Chart.yaml +++ b/incubator/spring-cloud-data-flow/Chart.yaml @@ -1,12 +1,13 @@ apiVersion: v1 -description: Open source, multi-cloud toolkit for building data integration and real-time data processing pipelines. +description: Toolkit for building data processing pipelines. name: spring-cloud-data-flow -version: 0.1.0 -appVersion: 1.2.2.RELEASE +version: 0.2.0 +appVersion: 1.3.1.RELEASE home: http://cloud.spring.io/spring-cloud-dataflow/ sources: - https://github.com/spring-cloud/spring-cloud-dataflow - https://github.com/spring-cloud/spring-cloud-dataflow-server-kubernetes +- https://github.com/spring-cloud/spring-cloud-skipper - https://github.com/spring-cloud/spring-cloud-dataflow-metrics-collector icon: https://raw.githubusercontent.com/spring-cloud/spring-cloud-dataflow/master/spring-cloud-dataflow-docs/src/main/docbook/images/logo.png maintainers: diff --git a/incubator/spring-cloud-data-flow/README.md b/incubator/spring-cloud-data-flow/README.md index 6fecd493cc..be1439d84e 100644 --- a/incubator/spring-cloud-data-flow/README.md +++ b/incubator/spring-cloud-data-flow/README.md @@ -36,6 +36,19 @@ Note that this chart pulls in many different Docker images so can take a while t The following tables lists the configurable parameters and their default values. +### RBAC Configuration + +| Parameter | Description | Default | +| ------------- | --------------------------- | ------------------------- | +| rbac.create | Create RBAC configurations | true + +### ServiceAccount Configuration + +| Parameter | Description | Default | +| --------------------- | ---------------------- | --------------------------- | +| serviceAccount.create | Create ServiceAccount | true +| serviceAccount.name | ServiceAccount name | (generated if not specified) + ### Data Flow User Accounts | Parameter | Description | Default | @@ -45,19 +58,25 @@ The following tables lists the configurable parameters and their default values. | dataflowRoles | The roles assigned to the primary user | ROLE_VIEW, ROLE_CREATE | dataflowAdminUsername | The username for the admin user | admin | dataflowAdminPassword | The password for the admin user | admin -| dataflowAdminRoles | The roles assigned to the admin user ROLE_MANAGE, ROLE_VIEW +| dataflowAdminRoles | The roles assigned to the admin user | ROLE_MANAGE, ROLE_VIEW ### Data Flow Server Configuration | Parameter | Description | Default | | --------------------------------- | -------------------------------------------------- | ---------------- | -| server.version | The version/tag of the Data Flow server | 1.2.2.RELEASE +| server.version | The version/tag of the Data Flow server | 1.3.0.RELEASE | server.imagePullPolicy | The imagePullPolicy of the Data Flow server | IfNotPresent | server.service.type | The service type for the Data Flow server | LoadBalancer | server.service.externalPort | The external port for the Data Flow server | 80 -| server.service.internalPort | The internal port for the Data Flow server | 80 -| server.service.resources.limits | Data Flow server Resource limits | cpu: 1.0 memory: 2048Mi -| server.service.resources.requests | Data Flow server Resource resuests | cpu: 0.5 memory: 1024Mi + +### Skipper Server Configuration + +| Parameter | Description | Default | +| ---------------------------------- | ------------------------------------------------- | ---------------- | +| skipper.version | The version/tag of the Skipper server | 1.0.0.RELEASE +| skipper.imagePullPolicy | The imagePullPolicy of the Skipper server | IfNotPresent +| skipper.platformName | The name of the configured platform account | minikube +| skipper.service.type | The service type for the Skipper server | ClusterIP ### Metrics Server Configuration @@ -66,23 +85,21 @@ The following tables lists the configurable parameters and their default values. | metrics.version | The version/tag of the Metrics server | 1.0.0.RELEASE | metrics.imagePullPolicy | The imagePullPolicy of the Metrics server | IfNotPresent | metrics.service.type | The service type for the Metrics server | ClusterIP -| metrics.service.externalPort | The external port for the Metrics server | 80 -| metrics.service.internalPort | The internal port for the Metrics server | 80 -| metrics.service.resources.limits | Metrics server Resource limits | cpu: 1.0 memory: 1024Mi -| metrics.service.resources.requests | Metrics server Resource limits | cpu: 0.5 memory: 640Mi ### Spring Cloud Deployer Configuration | Parameter | Description | Default | | ------------------------------------------- | -------------------------------------- | ------------------------- | +| deployer.resourceLimits.cpu | Deployer resource limit for cpu | 500m +| deployer.resourceLimits.memory | Deployer resource limit for memory | 1024Mi | deployer.readinessProbe.initialDelaySeconds | Deployer readiness probe initial delay | 120 | deployer.livenessProbe.initialDelaySeconds | Deployer liveness probe initial delay | 90 -### Rabbit MQ Configuration +### RabbitMQ Configuration | Parameter | Description | Default | | -------------------------- | --------------------- | ------------------------- | -| rabbitmq.rabbitmqUsername | Rebbit MQ user name | user +| rabbitmq.rabbitmqUsername | RabbitMQ user name | user ### MySQL Configuration diff --git a/incubator/spring-cloud-data-flow/requirements.lock b/incubator/spring-cloud-data-flow/requirements.lock index 63e5439125..3c0091040d 100644 --- a/incubator/spring-cloud-data-flow/requirements.lock +++ b/incubator/spring-cloud-data-flow/requirements.lock @@ -1,24 +1,12 @@ dependencies: -- condition: "" - enabled: false - import-values: null - name: mysql +- name: mysql repository: https://kubernetes-charts.storage.googleapis.com/ - tags: null - version: 0.2.6 -- condition: "" - enabled: false - import-values: null - name: redis + version: 0.3.4 +- name: redis repository: https://kubernetes-charts.storage.googleapis.com/ - tags: null - version: 0.7.0 -- condition: "" - enabled: false - import-values: null - name: rabbitmq + version: 1.1.11 +- name: rabbitmq repository: https://kubernetes-charts.storage.googleapis.com/ - tags: null - version: 0.5.3 -digest: sha256:49551c5220854587689ffacf8ff53167aec2dd302593d163dcea2f6eb412b5a5 -generated: 2017-07-05T15:31:20.67673899-04:00 + version: 0.6.16 +digest: sha256:b16ffdc5da316b3a7e677d3a83670341b13670d7e59f8ce74d023a01df05f135 +generated: 2018-01-31T09:21:26.470351-05:00 diff --git a/incubator/spring-cloud-data-flow/requirements.yaml b/incubator/spring-cloud-data-flow/requirements.yaml index 2defefea55..f5ec71f953 100644 --- a/incubator/spring-cloud-data-flow/requirements.yaml +++ b/incubator/spring-cloud-data-flow/requirements.yaml @@ -1,10 +1,10 @@ dependencies: - name: mysql - version: 0.2.6 + version: 0.3.4 repository: https://kubernetes-charts.storage.googleapis.com/ - name: redis - version: 0.7.0 + version: 1.1.11 repository: https://kubernetes-charts.storage.googleapis.com/ - name: rabbitmq - version: 0.5.3 + version: 0.6.16 repository: https://kubernetes-charts.storage.googleapis.com/ diff --git a/incubator/spring-cloud-data-flow/templates/NOTES.txt b/incubator/spring-cloud-data-flow/templates/NOTES.txt index b4691f4c2a..5cd1ac6f36 100644 --- a/incubator/spring-cloud-data-flow/templates/NOTES.txt +++ b/incubator/spring-cloud-data-flow/templates/NOTES.txt @@ -9,7 +9,7 @@ export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ template "scdf.fullname" . }}-server -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo http://$SERVICE_IP:{{ .Values.server.service.externalPort }} {{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "scdf.fullname" . }}-server" -> -l "app={{ template "name" . }},release={{ .Release.Name }},component=server" - echo "Visit http://127.0.0.1:{{ .Values.server.service.internalPort }} to use your application" - kubectl port-forward $POD_NAME {{ .Values.server.service.internalPort }}:{{ .Values.service.externalPort }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "scdf.fullname" . }}-server" -> -l "app={{ template "scdf.name" . }},release={{ .Release.Name }},component=server" + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl port-forward $POD_NAME 8080:{{ .Values.server.service.externalPort }} {{- end }} diff --git a/incubator/spring-cloud-data-flow/templates/_helpers.tpl b/incubator/spring-cloud-data-flow/templates/_helpers.tpl index b4d68ddbbd..099e087c17 100644 --- a/incubator/spring-cloud-data-flow/templates/_helpers.tpl +++ b/incubator/spring-cloud-data-flow/templates/_helpers.tpl @@ -2,19 +2,10 @@ {{/* Expand the name of the chart. */}} -{{- define "name" -}} +{{- define "scdf.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). -*/}} -{{- define "fullname" -}} -{{- $name := default .Chart.Name .Values.nameOverride -}} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} -{{- end -}} - {{/* Create a default short app name to use for resource naming. We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). @@ -25,10 +16,27 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this {{- end -}} {{/* -Create a default short app name to use for environment variables. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +Create an uppercase app name to use for environment variables. */}} {{- define "scdf.envname" -}} {{- $name := default "data-flow" .Values.appNameOverride -}} -{{- printf "%s_%s" .Release.Name $name | upper | replace "-" "_" | trunc 63 | trimSuffix "_" -}} +{{- printf "%s_%s" .Release.Name $name | upper | replace "-" "_" | trimSuffix "_" -}} +{{- end -}} + +{{/* +Create an uppercase release prefix to use for environment variables. +*/}} +{{- define "scdf.envrelease" -}} +{{- printf "%s" .Release.Name | upper | replace "-" "_" | trimSuffix "_" -}} +{{- end -}} + +{{/* +Create the name of the service account to use +*/}} +{{- define "scdf.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (include "scdf.fullname" .) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} {{- end -}} diff --git a/incubator/spring-cloud-data-flow/templates/metrics-deployment-rabbit.yaml b/incubator/spring-cloud-data-flow/templates/metrics-deployment-rabbit.yaml index fc9c990ee1..1cf6757f53 100644 --- a/incubator/spring-cloud-data-flow/templates/metrics-deployment-rabbit.yaml +++ b/incubator/spring-cloud-data-flow/templates/metrics-deployment-rabbit.yaml @@ -3,7 +3,7 @@ kind: Deployment metadata: name: {{ template "scdf.fullname" . }}-metrics labels: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} component: metrics chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" release: "{{ .Release.Name }}" @@ -13,7 +13,7 @@ spec: template: metadata: labels: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} component: metrics release: "{{ .Release.Name }}" spec: @@ -22,30 +22,35 @@ spec: image: {{ .Values.metrics.image }}:{{ .Values.metrics.version }} imagePullPolicy: {{ .Values.metrics.imagePullPolicy }} ports: - - containerPort: {{ .Values.metrics.service.internalPort }} + - containerPort: 8080 + name: http resources: {{ toYaml .Values.metrics.resources | indent 10 }} livenessProbe: httpGet: path: /health - port: {{ .Values.metrics.service.internalPort }} - initialDelaySeconds: 60 - timeoutSeconds: 10 + port: http + initialDelaySeconds: 90 + periodSeconds: 15 + timeoutSeconds: 5 readinessProbe: httpGet: path: /health - port: {{ .Values.metrics.service.internalPort }} - initialDelaySeconds: 30 - timeoutSeconds: 10 + port: http + initialDelaySeconds: 60 + periodSeconds: 15 + timeoutSeconds: 5 env: - name: SERVER_PORT - value: '80' + value: '8080' + - name: SPRING_CLOUD_CONFIG_ENABLED + value: 'false' - name: SECURITY_BASIC_ENABLED value: 'false' - name: SPRING_RABBITMQ_HOST - value: '${{ printf "{%s" .Release.Name | upper }}_RABBITMQ_SERVICE_HOST}' + value: '${{ printf "{" }}{{ template "scdf.envrelease" . }}_RABBITMQ_SERVICE_HOST}' - name: SPRING_RABBITMQ_PORT - value: '${{ printf "{%s" .Release.Name | upper }}_RABBITMQ_SERVICE_PORT_AMPQ}' + value: '${{ printf "{" }}{{ template "scdf.envrelease" . }}_RABBITMQ_SERVICE_PORT_AMQP}' - name: SPRING_RABBITMQ_USERNAME value: '{{ .Values.rabbitmq.rabbitmqUsername }}' - name: SPRING_RABBITMQ_PASSWORD @@ -53,3 +58,4 @@ spec: secretKeyRef: name: {{ printf "%s-%s" .Release.Name "rabbitmq" | trunc 63 | trimSuffix "-" }} key: rabbitmq-password + serviceAccountName: {{ template "scdf.serviceAccountName" . }} diff --git a/incubator/spring-cloud-data-flow/templates/metrics-service.yaml b/incubator/spring-cloud-data-flow/templates/metrics-service.yaml index 3d9c3b4596..2a348c1d11 100644 --- a/incubator/spring-cloud-data-flow/templates/metrics-service.yaml +++ b/incubator/spring-cloud-data-flow/templates/metrics-service.yaml @@ -3,7 +3,7 @@ apiVersion: v1 metadata: name: {{ template "scdf.fullname" . }}-metrics labels: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} component: metrics chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" release: "{{ .Release.Name }}" @@ -11,11 +11,10 @@ metadata: spec: type: {{ .Values.metrics.service.type }} ports: - - port: {{ .Values.metrics.service.externalPort }} - targetPort: {{ .Values.metrics.service.internalPort }} - protocol: TCP + - port: 80 + targetPort: http name: http selector: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} component: metrics release: {{ .Release.Name }} diff --git a/incubator/spring-cloud-data-flow/templates/secrets.yaml b/incubator/spring-cloud-data-flow/templates/secrets.yaml index da22c4ea52..97eb9d6c4b 100644 --- a/incubator/spring-cloud-data-flow/templates/secrets.yaml +++ b/incubator/spring-cloud-data-flow/templates/secrets.yaml @@ -3,7 +3,7 @@ kind: Secret metadata: name: {{ template "scdf.fullname" . }} labels: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" release: "{{ .Release.Name }}" heritage: "{{ .Release.Service }}" diff --git a/incubator/spring-cloud-data-flow/templates/server-config-rabbit.yaml b/incubator/spring-cloud-data-flow/templates/server-config-rabbit.yaml index 2123ce4b8a..5ba444beaf 100644 --- a/incubator/spring-cloud-data-flow/templates/server-config-rabbit.yaml +++ b/incubator/spring-cloud-data-flow/templates/server-config-rabbit.yaml @@ -3,7 +3,7 @@ kind: ConfigMap metadata: name: {{ template "scdf.fullname" . }}-server labels: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} component: server chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" release: "{{ .Release.Name }}" @@ -26,15 +26,15 @@ data: {{ .Values.dataflowUsername }}: ${data-flow-password}, {{ .Values.dataflowRoles }} deployer: kubernetes: - environmentVariables: 'SPRING_RABBITMQ_HOST=${{ printf "{%s" .Release.Name | upper }}_RABBITMQ_SERVICE_HOST},SPRING_RABBITMQ_PORT=${{ printf "{%s" .Release.Name | upper }}_RABBITMQ_SERVICE_PORT_AMPQ},SPRING_RABBITMQ_USERNAME={{ .Values.rabbitmq.rabbitmqUsername }},SPRING_RABBITMQ_PASSWORD=${rabbitmq-password},SPRING_REDIS_HOST=${{ printf "{%s" .Release.Name | upper }}_REDIS_SERVICE_HOST},SPRING_REDIS_PORT=${{ printf "{%s" .Release.Name | upper }}_REDIS_SERVICE_PORT},SPRING_REDIS_PASSWORD=${redis-password}' + environmentVariables: 'SPRING_RABBITMQ_HOST=${{ printf "{" }}{{ template "scdf.envrelease" . }}_RABBITMQ_SERVICE_HOST},SPRING_RABBITMQ_PORT=${{ printf "{" }}{{ template "scdf.envrelease" . }}_RABBITMQ_SERVICE_PORT_AMQP},SPRING_RABBITMQ_USERNAME={{ .Values.rabbitmq.rabbitmqUsername }},SPRING_RABBITMQ_PASSWORD=${rabbitmq-password},SPRING_REDIS_HOST=${{ printf "{" }}{{ template "scdf.envrelease" . }}_REDIS_SERVICE_HOST},SPRING_REDIS_PORT=${{ printf "{" }}{{ template "scdf.envrelease" . }}_REDIS_SERVICE_PORT},SPRING_REDIS_PASSWORD=${redis-password}' datasource: - url: 'jdbc:mysql://${{ printf "{%s" .Release.Name | upper }}_MYSQL_SERVICE_HOST}:3306/dataflow' + url: 'jdbc:mysql://${{ printf "{" }}{{ template "scdf.envrelease" . }}_MYSQL_SERVICE_HOST}:3306/dataflow' driverClassName: org.mariadb.jdbc.Driver username: root password: ${mysql-root-password} testOnBorrow: true validationQuery: "SELECT 1" redis: - host: ${{ printf "{%s" .Release.Name | upper }}_REDIS_SERVICE_HOST} - port: ${{ printf "{%s" .Release.Name | upper }}_REDIS_SERVICE_PORT} + host: ${{ printf "{" }}{{ template "scdf.envrelease" . }}_REDIS_SERVICE_HOST} + port: ${{ printf "{" }}{{ template "scdf.envrelease" . }}_REDIS_SERVICE_PORT} password: ${redis-password} diff --git a/incubator/spring-cloud-data-flow/templates/server-deployment.yaml b/incubator/spring-cloud-data-flow/templates/server-deployment.yaml index 4b716de1eb..92e112ad56 100644 --- a/incubator/spring-cloud-data-flow/templates/server-deployment.yaml +++ b/incubator/spring-cloud-data-flow/templates/server-deployment.yaml @@ -3,7 +3,7 @@ kind: Deployment metadata: name: {{ template "scdf.fullname" . }}-server labels: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} component: server chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" release: "{{ .Release.Name }}" @@ -13,7 +13,7 @@ spec: template: metadata: labels: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} component: server release: "{{ .Release.Name }}" spec: @@ -44,13 +44,14 @@ spec: } ] ports: - - containerPort: {{ .Values.server.service.internalPort }} + - containerPort: 8080 + name: http resources: {{ toYaml .Values.server.resources | indent 10 }} livenessProbe: httpGet: path: /management/health - port: {{ .Values.server.service.internalPort }} + port: http httpHeaders: - name: Authorization value: 'Basic {{ printf "%s:%s" .Values.dataflowAdminUsername .Values.dataflowAdminPassword | b64enc }}' @@ -60,7 +61,7 @@ spec: readinessProbe: httpGet: path: /management/health - port: {{ .Values.server.service.internalPort }} + port: http httpHeaders: - name: Authorization value: 'Basic {{ printf "%s:%s" .Values.dataflowAdminUsername .Values.dataflowAdminPassword | b64enc }}' @@ -73,15 +74,17 @@ spec: fieldRef: fieldPath: "metadata.namespace" - name: SERVER_PORT - value: '{{ .Values.server.service.internalPort }}' + value: '8080' - name: SPRING_CLOUD_CONFIG_ENABLED value: 'false' - name: SPRING_CLOUD_DATAFLOW_FEATURES_ANALYTICS_ENABLED value: 'true' - name: SPRING_CLOUD_DEPLOYER_KUBERNETES_CREATE_DEPLOYMENT value: 'true' + - name: SPRING_CLOUD_DEPLOYER_KUBERNETES_CPU + value: '{{ .Values.deployer.resourceLimits.cpu }}' - name: SPRING_CLOUD_DEPLOYER_KUBERNETES_MEMORY - value: 640Mi + value: '{{ .Values.deployer.resourceLimits.memory }}' - name: SPRING_CLOUD_DEPLOYER_KUBERNETES_READINESS_PROBE_DELAY value: '{{ .Values.deployer.readinessProbe.initialDelaySeconds }}' - name: SPRING_CLOUD_DEPLOYER_KUBERNETES_LIVENESS_PROBE_DELAY @@ -92,6 +95,10 @@ spec: value: 'true' - name: SPRING_CLOUD_KUBERNETES_SECRETS_PATHS value: /etc/secrets + - name: SPRING_CLOUD_DATAFLOW_FEATURES_SKIPPER_ENABLED + value: 'true' + - name: SPRING_CLOUD_SKIPPER_CLIENT_SERVER_URI + value: 'http://${{ printf "{" }}{{ template "scdf.envname" . }}_SKIPPER_SERVICE_HOST}/api' - name: SPRING_CLOUD_DATAFLOW_METRICS_COLLECTOR_URI value: 'http://${{ printf "{" }}{{ template "scdf.envname" . }}_METRICS_SERVICE_HOST}' - name: SPRING_CLOUD_DATAFLOW_SERVER_URI @@ -125,3 +132,4 @@ spec: } } ] + serviceAccountName: {{ template "scdf.serviceAccountName" . }} diff --git a/incubator/spring-cloud-data-flow/templates/server-rbac.yaml b/incubator/spring-cloud-data-flow/templates/server-rbac.yaml new file mode 100644 index 0000000000..6f49f8c5a9 --- /dev/null +++ b/incubator/spring-cloud-data-flow/templates/server-rbac.yaml @@ -0,0 +1,41 @@ +{{- if .Values.rbac.create -}} +kind: Role +apiVersion: rbac.authorization.k8s.io/{{ required "A valid .Values.rbac.apiVersion entry required!" .Values.rbac.apiVersion }} +metadata: + name: {{ template "scdf.fullname" . }} + labels: + app: {{ template "scdf.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +rules: + - apiGroups: [""] + resources: ["services", "pods", "replicationcontrollers", "persistentvolumeclaims"] + verbs: ["get", "list", "watch", "create", "delete", "update"] + - apiGroups: [""] + resources: ["configmaps", "secrets"] + verbs: ["get", "list", "watch"] + - apiGroups: ["apps"] + resources: ["statefulsets"] + verbs: ["get", "list", "watch", "create", "delete", "update"] + - apiGroups: ["extensions"] + resources: ["deployments", "replicasets", "jobs"] + verbs: ["get", "list", "watch", "create", "delete", "update", "patch"] +--- +kind: RoleBinding +apiVersion: rbac.authorization.k8s.io/{{ required "A valid .Values.rbac.apiVersion entry required!" .Values.rbac.apiVersion }} +metadata: + name: {{ template "scdf.fullname" . }} + labels: + app: {{ template "scdf.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +roleRef: + kind: Role + name: {{ template "scdf.fullname" . }} + apiGroup: rbac.authorization.k8s.io +subjects: +- kind: ServiceAccount + name: {{ template "scdf.serviceAccountName" . }} +{{- end -}} diff --git a/incubator/spring-cloud-data-flow/templates/server-service.yaml b/incubator/spring-cloud-data-flow/templates/server-service.yaml index 2ff317d251..85588e68da 100644 --- a/incubator/spring-cloud-data-flow/templates/server-service.yaml +++ b/incubator/spring-cloud-data-flow/templates/server-service.yaml @@ -3,7 +3,7 @@ apiVersion: v1 metadata: name: {{ template "scdf.fullname" . }}-server labels: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} component: server chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" release: "{{ .Release.Name }}" @@ -13,10 +13,9 @@ spec: type: {{ .Values.server.service.type }} ports: - port: {{ .Values.server.service.externalPort }} - targetPort: {{ .Values.server.service.internalPort }} - protocol: TCP + targetPort: http name: http selector: - app: {{ template "name" . }} + app: {{ template "scdf.name" . }} component: server release: {{ .Release.Name }} diff --git a/incubator/spring-cloud-data-flow/templates/service-account.yaml b/incubator/spring-cloud-data-flow/templates/service-account.yaml new file mode 100644 index 0000000000..5afaabbc55 --- /dev/null +++ b/incubator/spring-cloud-data-flow/templates/service-account.yaml @@ -0,0 +1,11 @@ +{{- if .Values.serviceAccount.create -}} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "scdf.serviceAccountName" . }} + labels: + app: {{ template "scdf.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +{{- end -}} diff --git a/incubator/spring-cloud-data-flow/templates/skipper-config.yaml b/incubator/spring-cloud-data-flow/templates/skipper-config.yaml new file mode 100644 index 0000000000..d456b81e0f --- /dev/null +++ b/incubator/spring-cloud-data-flow/templates/skipper-config.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "scdf.fullname" . }}-skipper + labels: + app: {{ template "scdf.name" . }} + component: skipper + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +data: + spring.application.json: '{"spring.cloud.skipper.server.enableLocalPlatform" : false, "spring.cloud.skipper.server.platform.kubernetes.accounts.{{ .Values.skipper.platformName }}.environmentVariables" : "SPRING_RABBITMQ_HOST=${{ printf "{" }}{{ template "scdf.envrelease" . }}_RABBITMQ_SERVICE_HOST},SPRING_RABBITMQ_PORT=${{ printf "{" }}{{ template "scdf.envrelease" . }}_RABBITMQ_SERVICE_PORT_AMQP},SPRING_RABBITMQ_USERNAME={{ .Values.rabbitmq.rabbitmqUsername }},SPRING_RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD}","spring.cloud.skipper.server.platform.kubernetes.accounts.{{ .Values.skipper.platformName }}.memory" : "{{ .Values.deployer.resourceLimits.memory }}","spring.cloud.skipper.server.platform.kubernetes.accounts.{{ .Values.skipper.platformName }}.cpu" : "{{ .Values.deployer.resourceLimits.cpu }}","spring.cloud.skipper.server.platform.kubernetes.accounts.{{ .Values.skipper.platformName }}.createDeployment" : true}' diff --git a/incubator/spring-cloud-data-flow/templates/skipper-deployment.yaml b/incubator/spring-cloud-data-flow/templates/skipper-deployment.yaml new file mode 100644 index 0000000000..49724bb12b --- /dev/null +++ b/incubator/spring-cloud-data-flow/templates/skipper-deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: extensions/v1beta1 +kind: Deployment +metadata: + name: {{ template "scdf.fullname" . }}-skipper + labels: + app: {{ template "scdf.name" . }} + component: skipper + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + replicas: 1 + template: + metadata: + labels: + app: {{ template "scdf.name" . }} + component: skipper + release: "{{ .Release.Name }}" + spec: + containers: + - name: {{ template "scdf.fullname" . }}-skipper + image: {{ .Values.skipper.image }}:{{ .Values.skipper.version }} + imagePullPolicy: {{ .Values.skipper.imagePullPolicy }} + ports: + - containerPort: 7577 + name: http + resources: +{{ toYaml .Values.skipper.resources | indent 10 }} + livenessProbe: + httpGet: + path: /api/about + port: http + initialDelaySeconds: 90 + periodSeconds: 15 + timeoutSeconds: 5 + readinessProbe: + httpGet: + path: /api/about + port: http + initialDelaySeconds: 30 + periodSeconds: 15 + timeoutSeconds: 5 + env: + - name: SPRING_DATASOURCE_URL + value: 'jdbc:mysql://${{ printf "{" }}{{ template "scdf.envrelease" . }}_MYSQL_SERVICE_HOST}:3306/skipper' + - name: SPRING_DATASOURCE_USERNAME + value: root + - name: SPRING_DATASOURCE_PASSWORD + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "mysql" | trunc 63 | trimSuffix "-" }} + key: mysql-root-password + - name: SPRING_DATASOURCE_DRIVER_CLASS_NAME + value: org.mariadb.jdbc.Driver + - name: RABBITMQ_PASSWORD + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "rabbitmq" | trunc 63 | trimSuffix "-" }} + key: rabbitmq-password + - name: SPRING_APPLICATION_JSON + valueFrom: + configMapKeyRef: + name: {{ template "scdf.fullname" . }}-skipper + key: spring.application.json + value: + initContainers: + - name: init-mysql-wait + image: busybox + command: ['sh', '-c', 'until nc -w3 -z {{ printf "%s-%s" .Release.Name "mysql" | trunc 63 | trimSuffix "-" }} 3306; do echo waiting for mysql; sleep 3; done;'] + - name: init-mysql-database + image: mysql:5.7.14 + env: + - name: MYSQL_PWD + valueFrom: + secretKeyRef: + name: {{ printf "%s-%s" .Release.Name "mysql" | trunc 63 | trimSuffix "-" }} + key: mysql-root-password + command: ['sh', '-c', 'mysql -h {{ printf "%s-%s" .Release.Name "mysql" | trunc 63 | trimSuffix "-" }} -u root -e "CREATE DATABASE IF NOT EXISTS skipper;"'] + serviceAccountName: {{ template "scdf.serviceAccountName" . }} diff --git a/incubator/spring-cloud-data-flow/templates/skipper-service.yaml b/incubator/spring-cloud-data-flow/templates/skipper-service.yaml new file mode 100644 index 0000000000..d3d3b439f0 --- /dev/null +++ b/incubator/spring-cloud-data-flow/templates/skipper-service.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ template "scdf.fullname" . }}-skipper + labels: + app: {{ template "scdf.name" . }} + component: skipper + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: "{{ .Release.Name }}" + heritage: "{{ .Release.Service }}" +spec: + type: {{ .Values.skipper.service.type }} + ports: + - port: 80 + targetPort: http + name: http + selector: + app: {{ template "scdf.name" . }} + component: skipper + release: {{ .Release.Name }} diff --git a/incubator/spring-cloud-data-flow/values.yaml b/incubator/spring-cloud-data-flow/values.yaml index 8588e85ad0..45ad9f449c 100644 --- a/incubator/spring-cloud-data-flow/values.yaml +++ b/incubator/spring-cloud-data-flow/values.yaml @@ -7,14 +7,26 @@ dataflowRoles: ROLE_VIEW, ROLE_CREATE dataflowAdminUsername: admin dataflowAdminPassword: admin dataflowAdminRoles: ROLE_MANAGE, ROLE_VIEW + +rbac: + # Specifies whether RBAC resources should be created + create: true + apiVersion: v1beta1 + +serviceAccount: + # Specifies whether a service account should be created + create: true + # The name of the service account to use. + # If not set and create is true, a name is generated using the serviceAccountName template + name: + server: image: springcloud/spring-cloud-dataflow-server-kubernetes - version: 1.2.2.RELEASE + version: 1.3.1.RELEASE imagePullPolicy: IfNotPresent service: type: LoadBalancer externalPort: 80 - internalPort: 80 resources: {} # limits: # cpu: 1.0 @@ -22,14 +34,14 @@ server: # requests: # cpu: 0.5 # memory: 640Mi -metrics: - image: springcloud/metrics-collector-rabbit - version: 1.0.0.RELEASE + +skipper: + image: springcloud/spring-cloud-skipper-server + version: 1.0.1.RELEASE imagePullPolicy: IfNotPresent + platformName: minikube service: type: ClusterIP - externalPort: 80 - internalPort: 80 resources: {} # limits: # cpu: 1.0 @@ -37,12 +49,32 @@ metrics: # requests: # cpu: 0.5 # memory: 640Mi + +metrics: + image: springcloud/metrics-collector-rabbit + version: 1.0.0.RELEASE + imagePullPolicy: IfNotPresent + service: + type: ClusterIP + resources: {} + # limits: + # cpu: 1.0 + # memory: 1024Mi + # requests: + # cpu: 0.5 + # memory: 640Mi + deployer: + resourceLimits: + cpu: 500m + memory: 1024Mi readinessProbe: initialDelaySeconds: 120 livenessProbe: initialDelaySeconds: 90 + rabbitmq: rabbitmqUsername: user + mysql: mysqlDatabase: dataflow