From 4cc13f2a63a660c2df92d0226fa0c41ca8d0ad4c Mon Sep 17 00:00:00 2001 From: Oleksii Asiutin <1220384+aasiutin@users.noreply.github.com> Date: Tue, 11 Dec 2018 00:43:16 +0200 Subject: [PATCH] add apache ignite helm chart (#9293) * add apache ignite helm chart Signed-off-by: Oleksii Asiutin * Disable Ignite persistence if volumes are disabled Signed-off-by: Mykola Rybak * Expose peerClassLoadingEnabled property Signed-off-by: Mykola Rybak * Expose environment variable configuration Signed-off-by: Mykola Rybak * add service account to support rbac Signed-off-by: Oleksii Asiutin * add ability to disable rbac Signed-off-by: Oleksii Asiutin * change appVersion and chart version Signed-off-by: Oleksii Asiutin * move all ignite: configs to top-level Signed-off-by: Oleksii Asiutin * update app version to 2.7.0 Signed-off-by: Oleksii Asiutin * fixed cluster activation commands new ignite version (2.7.0) has different binaries path Signed-off-by: Oleksii Asiutin * change "dataStorage" config key to "persistence" Most helm charts use "persistence" config key. So we follow the same convention. Signed-off-by: Oleksii Asiutin * adapt chart configs to RBAC standards according to this link https://docs.helm.sh/chart_best_practices/#role-based-access-control Signed-off-by: Oleksii Asiutin --- stable/ignite/.helmignore | 21 +++++ stable/ignite/Chart.yaml | 22 +++++ stable/ignite/README.md | 31 +++++++ stable/ignite/templates/NOTES.txt | 14 +++ stable/ignite/templates/_helpers.tpl | 43 +++++++++ stable/ignite/templates/account-role.yaml | 16 ++++ stable/ignite/templates/configmap.yaml | 87 ++++++++++++++++++ .../templates/persistence-storage-class.yaml | 9 ++ stable/ignite/templates/role-binding.yaml | 14 +++ stable/ignite/templates/service-account.yaml | 6 ++ stable/ignite/templates/stateful-set.yaml | 88 +++++++++++++++++++ stable/ignite/templates/svc.yaml | 32 +++++++ .../ignite/templates/wal-storage-class.yaml | 9 ++ stable/ignite/values.yaml | 56 ++++++++++++ 14 files changed, 448 insertions(+) create mode 100644 stable/ignite/.helmignore create mode 100644 stable/ignite/Chart.yaml create mode 100644 stable/ignite/README.md create mode 100644 stable/ignite/templates/NOTES.txt create mode 100644 stable/ignite/templates/_helpers.tpl create mode 100644 stable/ignite/templates/account-role.yaml create mode 100644 stable/ignite/templates/configmap.yaml create mode 100644 stable/ignite/templates/persistence-storage-class.yaml create mode 100644 stable/ignite/templates/role-binding.yaml create mode 100644 stable/ignite/templates/service-account.yaml create mode 100644 stable/ignite/templates/stateful-set.yaml create mode 100644 stable/ignite/templates/svc.yaml create mode 100644 stable/ignite/templates/wal-storage-class.yaml create mode 100644 stable/ignite/values.yaml diff --git a/stable/ignite/.helmignore b/stable/ignite/.helmignore new file mode 100644 index 0000000000..f0c1319444 --- /dev/null +++ b/stable/ignite/.helmignore @@ -0,0 +1,21 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj diff --git a/stable/ignite/Chart.yaml b/stable/ignite/Chart.yaml new file mode 100644 index 0000000000..e28cb87813 --- /dev/null +++ b/stable/ignite/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +appVersion: "2.7.0" +description: Apache Ignite is an open-source distributed database, caching and processing platform designed to store and compute on large volumes of data across a cluster of nodes. +name: ignite +version: 1.0.0 +keywords: +- java +- datagrid +- caching +- jvm +- sql +- key-value +- nosql +- distributed +home: https://ignite.apache.org/ +icon: https://ignite.apache.org/images/Ignite_tm_Logo_wht_RGB.svg +sources: +- https://github.com/apache/ignite +maintainers: +- name: aasiutin +- name: greyteardrop +engine: gotpl diff --git a/stable/ignite/README.md b/stable/ignite/README.md new file mode 100644 index 0000000000..721ec48588 --- /dev/null +++ b/stable/ignite/README.md @@ -0,0 +1,31 @@ +# apache-ignite + +This is a helm chart for [Apache Ignite](https://ignite.apache.org/) + +Apache Ignite is an open-source distributed database, caching and processing +platform designed to store and compute on large volumes of data across a +cluster of nodes. + +## Install + +```console +$ helm install --name my-release stable/ignite +``` + +## Configuring persistence + +Data persistence and WAL persistence can be enabled by specifying appropriate +variables. Please note that default persistence configuration is for AWS EBS. + +```console +helm install --name my-release \ + --set persistence.enabled=true \ + --set persistence.size=100Gi \ + --set wal_persistence.enabled=true \ + --set wal_persistence.size=8Gi \ + stable/ignite +``` + +To configure persistence for other volume plugins you should edit +`persistence.provisioner` and `persistence.provisioner_parameters` variables. +(and the same variables for `wal_persistence` section). diff --git a/stable/ignite/templates/NOTES.txt b/stable/ignite/templates/NOTES.txt new file mode 100644 index 0000000000..0f1f2dac53 --- /dev/null +++ b/stable/ignite/templates/NOTES.txt @@ -0,0 +1,14 @@ +{{- if (.Values.persistence.enabled) }} +You need to activate your ignite deployment. To do it please ensure all +stateful set pods are in "Running" state : + + kubectl get pods -n {{ .Release.Namespace }} -l app={{ include "ignite.fullname" . }} + +and then execute: + + kubectl exec -n {{ .Release.Namespace }} {{ include "ignite.fullname" . }}-0 -- /opt/ignite/apache-ignite/bin/control.sh --activate + +{{- end }} +To check cluster state please run: + + kubectl exec -n {{ .Release.Namespace }} {{ include "ignite.fullname" . }}-0 -- /opt/ignite/apache-ignite/bin/control.sh --state diff --git a/stable/ignite/templates/_helpers.tpl b/stable/ignite/templates/_helpers.tpl new file mode 100644 index 0000000000..7e26d0bc78 --- /dev/null +++ b/stable/ignite/templates/_helpers.tpl @@ -0,0 +1,43 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "ignite.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 "ignite.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 the name of the service account to use +*/}} +{{- define "ignite.serviceAccountName" -}} +{{- if .Values.serviceAccount.create -}} + {{ default (include "ignite.fullname" .) .Values.serviceAccount.name }} +{{- else -}} + {{ default "default" .Values.serviceAccount.name }} +{{- end -}} +{{- end -}} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "ignite.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} diff --git a/stable/ignite/templates/account-role.yaml b/stable/ignite/templates/account-role.yaml new file mode 100644 index 0000000000..094fb7f24b --- /dev/null +++ b/stable/ignite/templates/account-role.yaml @@ -0,0 +1,16 @@ +{{- if .Values.rbac.create }} +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRole +metadata: + name: {{ include "ignite.fullname" . }} +rules: +- apiGroups: + - "" + resources: # Here are resources you can access + - pods + - endpoints + verbs: # That is what you can do with them + - get + - list + - watch +{{- end }} \ No newline at end of file diff --git a/stable/ignite/templates/configmap.yaml b/stable/ignite/templates/configmap.yaml new file mode 100644 index 0000000000..078c34ea18 --- /dev/null +++ b/stable/ignite/templates/configmap.yaml @@ -0,0 +1,87 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "ignite.fullname" . }}-configmap +data: + ignite-config.xml: | + + + + + + + + + + + +{{- if (.Values.persistence.enabled) }} + + + + + + + + + + + + + + + + + + + + + +{{- end }} + + + + + + + + + + + + + + diff --git a/stable/ignite/templates/persistence-storage-class.yaml b/stable/ignite/templates/persistence-storage-class.yaml new file mode 100644 index 0000000000..1a9fd3dbfe --- /dev/null +++ b/stable/ignite/templates/persistence-storage-class.yaml @@ -0,0 +1,9 @@ +{{- if (.Values.persistence.enabled) }} +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: {{ include "ignite.fullname" . }}-persistence-storage-class +provisioner: {{ .Values.persistence.persistenceVolume.provisioner }} +parameters: +{{ toYaml .Values.persistence.persistenceVolume.provisionerParameters | indent 2 }} +{{- end }} diff --git a/stable/ignite/templates/role-binding.yaml b/stable/ignite/templates/role-binding.yaml new file mode 100644 index 0000000000..b6fd10bbbc --- /dev/null +++ b/stable/ignite/templates/role-binding.yaml @@ -0,0 +1,14 @@ +{{- if .Values.rbac.create }} +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1beta1 +metadata: + name: {{ include "ignite.fullname" . }} +roleRef: + kind: ClusterRole + name: {{ include "ignite.fullname" . }} + apiGroup: rbac.authorization.k8s.io +subjects: +- kind: ServiceAccount + name: {{ include "ignite.fullname" . }} + namespace: {{ .Release.Namespace }} +{{- end }} \ No newline at end of file diff --git a/stable/ignite/templates/service-account.yaml b/stable/ignite/templates/service-account.yaml new file mode 100644 index 0000000000..dfcbe886d1 --- /dev/null +++ b/stable/ignite/templates/service-account.yaml @@ -0,0 +1,6 @@ +{{- if .Values.serviceAccount.create }} +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "ignite.serviceAccountName" . }} +{{- end }} \ No newline at end of file diff --git a/stable/ignite/templates/stateful-set.yaml b/stable/ignite/templates/stateful-set.yaml new file mode 100644 index 0000000000..c3ed3e8de0 --- /dev/null +++ b/stable/ignite/templates/stateful-set.yaml @@ -0,0 +1,88 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: {{ include "ignite.fullname" . }} + labels: + app.kubernetes.io/name: {{ include "ignite.name" . }} + helm.sh/chart: {{ include "ignite.chart" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + app.kubernetes.io/managed-by: {{ .Release.Service }} +spec: + selector: + matchLabels: + app: {{ include "ignite.fullname" . }} + serviceName: {{ include "ignite.fullname" . }} + replicas: {{ .Values.replicaCount }} + template: + metadata: + labels: + app: {{ include "ignite.fullname" . }} + spec: + serviceAccountName: {{ include "ignite.serviceAccountName" . }} + volumes: + - name: config-volume + configMap: + name: {{ include "ignite.fullname" . }}-configmap + items: + - key: ignite-config.xml + path: default-config.xml + containers: + - name: ignite + image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" + resources: +{{ toYaml .Values.resources | indent 10 }} +{{- if .Values.env }} + env: +{{- range $name, $value := .Values.env }} + - name: "{{ $name }}" + value: "{{ $value }}" +{{- end }} +{{- end }} + ports: + - containerPort: 11211 # JDBC port number. + - containerPort: 47100 # communication SPI port number. + - containerPort: 47500 # discovery SPI port number. + - containerPort: 49112 # JMX port number. + - containerPort: 10800 # SQL port number. + - containerPort: 8080 # REST port number. + - containerPort: 10900 #Thin clients port number. + volumeMounts: +{{- if (.Values.persistence.enabled) }} + - mountPath: "/wal" + name: ignite-wal + - mountPath: "/persistence" + name: ignite-persistence +{{- end }} + - name: config-volume + mountPath: /opt/ignite/apache-ignite-fabric/config +{{- with .Values.nodeSelector }} + nodeSelector: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: +{{ toYaml . | indent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: +{{ toYaml . | indent 8 }} + {{- end }} + volumeClaimTemplates: +{{- if (.Values.persistence.enabled) }} + - metadata: + name: ignite-persistence + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: "{{ include "ignite.fullname" . }}-persistence-storage-class" + resources: + requests: + storage: {{ .Values.persistence.persistenceVolume.size }} + - metadata: + name: ignite-wal + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: "{{ include "ignite.fullname" . }}-wal-storage-class" + resources: + requests: + storage: {{ .Values.persistence.walVolume.size }} +{{- end }} diff --git a/stable/ignite/templates/svc.yaml b/stable/ignite/templates/svc.yaml new file mode 100644 index 0000000000..811870c03a --- /dev/null +++ b/stable/ignite/templates/svc.yaml @@ -0,0 +1,32 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "ignite.fullname" . }} + labels: + app: {{ include "ignite.fullname" . }} +spec: + ports: + - name: jdbc + port: 11211 + targetPort: 11211 + - name: spi-communication + port: 47100 + targetPort: 47100 + - name: spi-discovery + port: 47500 + targetPort: 47500 + - name: jmx + port: 49112 + targetPort: 49112 + - name: sql + port: 10800 + targetPort: 10800 + - name: rest + port: 8080 + targetPort: 8080 + - name: thin-clients + port: 10900 + targetPort: 10900 + clusterIP: None + selector: + app: {{ include "ignite.fullname" . }} diff --git a/stable/ignite/templates/wal-storage-class.yaml b/stable/ignite/templates/wal-storage-class.yaml new file mode 100644 index 0000000000..2c03cbe2a7 --- /dev/null +++ b/stable/ignite/templates/wal-storage-class.yaml @@ -0,0 +1,9 @@ +{{- if (.Values.persistence.enabled) }} +kind: StorageClass +apiVersion: storage.k8s.io/v1 +metadata: + name: {{ include "ignite.fullname" . }}-wal-storage-class +provisioner: {{ .Values.persistence.walVolume.provisioner }} +parameters: +{{ toYaml .Values.persistence.walVolume.provisionerParameters | indent 2 }} +{{- end }} diff --git a/stable/ignite/values.yaml b/stable/ignite/values.yaml new file mode 100644 index 0000000000..a5bc830cea --- /dev/null +++ b/stable/ignite/values.yaml @@ -0,0 +1,56 @@ +# Default values for ignite. +replicaCount: 2 + +image: + repository: apacheignite/ignite + tag: 2.7.0 + pullPolicy: IfNotPresent + +nameOverride: "" +fullnameOverride: "" + +rbac: + create: true + +serviceAccount: + create: true + name: + +env: + OPTION_LIBS: "ignite-kubernetes,ignite-rest-http" + IGNITE_QUIET: "false" + JVM_OPTS: "-Djava.net.preferIPv4Stack=true" +peerClassLoadingEnabled: false + +persistence: + enabled: false + persistenceVolume: + size: 8Gi + provisioner: kubernetes.io/aws-ebs + provisionerParameters: + type: gp2 + fsType: ext4 + walVolume: + size: 8Gi + provisioner: kubernetes.io/aws-ebs + provisionerParameters: + type: gp2 + fsType: ext4 + +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: {} + +tolerations: [] + +affinity: {}