Add basic helm charts for Log Search (developement) (#51)
diff --git a/k8s/helm-charts/infra-solr/Chart.yaml b/k8s/helm-charts/infra-solr/Chart.yaml
new file mode 100644
index 0000000..abd08e7
--- /dev/null
+++ b/k8s/helm-charts/infra-solr/Chart.yaml
@@ -0,0 +1,9 @@
+apiVersion: v1
+name: infra-solr
+version: 1.0.0
+description: Infra solr service for Log Search components
+keywords:
+ - infra-solr
+maintainers:
+ - name: Apache
+deprecated: false
\ No newline at end of file
diff --git a/k8s/helm-charts/infra-solr/templates/infra-solr.yaml b/k8s/helm-charts/infra-solr/templates/infra-solr.yaml
new file mode 100644
index 0000000..5693d7d
--- /dev/null
+++ b/k8s/helm-charts/infra-solr/templates/infra-solr.yaml
@@ -0,0 +1,97 @@
+{{- if .Values.enabled }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ .Release.Name }}-infra-solr
+ namespace: {{.Values.global.namespace.logging}}
+ labels:
+ app: infra-solr
+spec:
+ ports:
+ - port: 8886
+ name: infra-solr
+ externalIPs:
+ []
+ clusterIP: None
+ selector:
+ app: infra-solr
+ release: {{ .Release.Name }}
+---
+apiVersion: apps/v1beta1
+kind: StatefulSet
+metadata:
+ name: {{ .Release.Name }}-infra-solr
+ namespace: {{.Values.global.namespace.logging}}
+ labels:
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+spec:
+ selector:
+ matchLabels:
+ app: infra-solr
+ serviceName: {{ .Release.Name }}-infra-solr
+ replicas: {{.Values.global.solr.replicas}}
+ updateStrategy:
+ type: RollingUpdate
+ podManagementPolicy: Parallel
+ template:
+ metadata:
+ labels:
+ app: infra-solr
+ release: {{ .Release.Name }}
+ spec:
+{{- if .Values.affinity }}
+ affinity:
+ podAntiAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - labelSelector:
+ matchExpressions:
+ - key: "app"
+ operator: In
+ values:
+ - infra-solr
+ topologyKey: "kubernetes.io/hostname"
+{{end}}
+ containers:
+ - name: infra-solr
+ image: "{{.Values.infraSolrImage}}"
+ env:
+ - name: ZK_CONNECT_STRING
+ value: "{{.Values.zkRelease}}-zookeeper-cs.{{.Values.global.namespace.logging}}.svc.{{.Values.global.clusterDomain}}:2181"
+ - name: SOLR_PORT
+ value: "8886"
+ - name: CLOUD_MODE
+ value: "true"
+ readinessProbe:
+ httpGet:
+ path: /
+ port: 8886
+ initialDelaySeconds: 30
+ timeoutSeconds: 15
+ livenessProbe:
+ httpGet:
+ path: /
+ port: 8886
+ initialDelaySeconds: 30
+ timeoutSeconds: 15
+ volumeMounts:
+ - name: data
+ mountPath: /var/lib/ambari-infra-solr/data
+ securityContext:
+ runAsUser: 8983
+{{- if .Values.persistence.enabled }}
+ volumeClaimTemplates:
+ - metadata:
+ name: solr-home
+ spec:
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: {{ .Values.persistence.size }}
+{{- else }}
+ volumes:
+ - name: data
+ emptyDir: {}
+{{- end }}
+{{end}}
\ No newline at end of file
diff --git a/k8s/helm-charts/infra-solr/values.yaml b/k8s/helm-charts/infra-solr/values.yaml
new file mode 100644
index 0000000..f23b6d3
--- /dev/null
+++ b/k8s/helm-charts/infra-solr/values.yaml
@@ -0,0 +1,18 @@
+enabled: true
+infraSolrImage: "apache/ambari-infra-solr:latest"
+heapSize: "512m"
+global:
+ clusterDomain: "cluster.local"
+ namespace:
+ logging: "default"
+ solr:
+ replicas: 3
+
+loglevel: INFO
+affinity: true
+
+persistence:
+ enabled: false
+ size: 100G
+
+zkRelease: test-zk
\ No newline at end of file
diff --git a/k8s/helm-charts/logsearch-helm.sh b/k8s/helm-charts/logsearch-helm.sh
new file mode 100755
index 0000000..f6b949d
--- /dev/null
+++ b/k8s/helm-charts/logsearch-helm.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+sdir="`dirname \"$0\"`"
+: ${1:?"argument is missing: (install|delete)"}
+command="$1"
+shift
+
+function install_charts() {
+ helm install --name test-zk $sdir/zookeeper/
+ helm install --name test-solr $sdir/infra-solr/ --set zkRelease=test-zk
+ helm install --name test-logsearch $sdir/logsearch/ --set zkRelease=test-zk
+}
+
+function purge_charts() {
+ helm del --purge test-logsearch
+ helm del --purge test-solr
+ helm del --purge test-zk
+}
+
+case $command in
+ "install")
+ install_charts
+ ;;
+ "delete")
+ purge_charts
+ ;;
+ *)
+ echo "Available commands: (install|delete)"
+ ;;
+esac
\ No newline at end of file
diff --git a/k8s/helm-charts/logsearch/Chart.yaml b/k8s/helm-charts/logsearch/Chart.yaml
new file mode 100644
index 0000000..42d4316
--- /dev/null
+++ b/k8s/helm-charts/logsearch/Chart.yaml
@@ -0,0 +1,9 @@
+apiVersion: v1
+name: logsearch
+version: 1.0.0
+description: Apache Ambari Log Search service
+keywords:
+ - logsearch
+maintainers:
+ - name: Apache
+deprecated: false
\ No newline at end of file
diff --git a/k8s/helm-charts/logsearch/templates/logsearch-configmap.yaml b/k8s/helm-charts/logsearch/templates/logsearch-configmap.yaml
new file mode 100644
index 0000000..eeacb2a
--- /dev/null
+++ b/k8s/helm-charts/logsearch/templates/logsearch-configmap.yaml
@@ -0,0 +1,100 @@
+{{ if .Values.enabled }}
+
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: {{ .Release.Name }}-logsearch-configmap
+ namespace: {{.Values.global.namespace.logging}}
+ labels:
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+ heritage: {{ .Release.Service }}
+data:
+ logsearch.properties: |-
+ ---
+ logsearch.solr.zk_connect_string={{.Values.zkRelease}}-zookeeper-cs.{{.Values.global.namespace.logging}}.svc.{{.Values.global.clusterDomain}}:2181
+ logsearch.config.zk_connect_string={{.Values.zkRelease}}-zookeeper-cs.{{.Values.global.namespace.logging}}.svc.{{.Values.global.clusterDomain}}:2181
+ logsearch.config.api.enabled={{.Values.configApiEnabled }}
+ logsearch.config.api.filter.zk.enabled=true
+
+ # Service Logs
+ logsearch.solr.service.logs.collection=service_logs
+ logsearch.solr.service.logs.config.name=hadoop_logs
+
+ logsearch.solr.service.logs.numshards=6
+ logsearch.solr.service.logs.replication.factor=2
+ logsearch.web.service_logs.field.visible=sdi_java_logger_name,sdi_java_method
+
+ # Audit logs
+ logsearch.solr.audit.logs.zk_connect_string={{.Release.Name}}-zookeeper-cs.{{.Values.global.namespace.logging}}.svc.{{.Values.global.clusterDomain}}:2181
+
+ logsearch.solr.audit.logs.url=
+ logsearch.solr.audit.logs.collection=audit_logs
+ logsearch.solr.audit.logs.numshards=2
+ logsearch.solr.audit.logs.replication.factor=2
+
+ logsearch.solr.config_set.folder=/usr/lib/ambari-logsearch-portal/conf/solr_configsets
+ logsearch.solr.audit.logs.config_set.folder=/usr/lib/ambari-logsearch-portal/conf/solr_configsets
+
+ # Metadata collection
+ logsearch.solr.logsearch_metadata.collection=logsearch_metadata
+ logsearch.solr.logsearch_metadata.config.name=logsearch_metadata
+ logsearch.solr.logsearch_metadata.replication.factor=2
+
+ # Logfeeder Settings
+ logsearch.logfeeder.include.default.level=FATAL,ERROR,WARN,INFO
+
+ # logsearch-admin.json
+ logsearch.auth.file.enable=true
+ logsearch.login.credentials.file=users.json
+
+ logsearch.auth.ldap.enable=false
+ logsearch.auth.simple.enable=false
+ logsearch.auth.external_auth.enable=false
+ logsearch.auth.redirect.forward=true
+
+ logsearch.protocol=http
+ log4j2.yml: |-
+ Configutation:
+ name: LogSearchConfig
+ packages: org.apache.ambari.logsearch.layout
+ Properties:
+ Property:
+ name: log-path
+ value: "/var/log/ambari-logsearch-portal"
+ Appenders:
+ Console:
+ name: Console_Appender
+ target: SYSTEM_OUT
+ PatternLayout:
+ pattern: "%d [%t] %-5p %C{6} (%F:%L) - %m%n"
+ Loggers:
+ Root:
+ level: info
+ AppenderRef:
+ - ref: Console_Appender
+
+ users.json: |-
+ {
+ "users": [{
+ "name": "Logsearch Admin",
+ "username": "{{.Values.username}}",
+ "password": "{{.Values.password}}",
+ "en_password": ""
+ }]
+ }
+
+ logsearch-env.sh: |-
+ set -e
+ export JAVA_HOME=/usr/java/default
+ export LOGFILE=/var/log/ambari-logsearch-portal/logsearch.log
+ export LOGSEARCH_PORT=61888
+ export LOGSEARCH_PATH=/usr/lib/ambari-logsearch-portal
+ export LOGSEARCH_CONF_DIR=/logsearch-conf
+ export LOGSEARCH_PID_FILE=/var/run/ambari-logsearch-portal/logsearch.pid
+ export LOGSEARCH_JAVA_MEM=${LOGSEARCH_JAVA_MEM:-"-Xmx1024m"}
+ export LOGSEARCH_DEBUG=false
+ export LOGSEARCH_DEBUG_PORT=5005
+ export LOGSEARCH_SSL="false"
+
+{{ end }}
\ No newline at end of file
diff --git a/k8s/helm-charts/logsearch/templates/logsearch.yaml b/k8s/helm-charts/logsearch/templates/logsearch.yaml
new file mode 100755
index 0000000..cf71579
--- /dev/null
+++ b/k8s/helm-charts/logsearch/templates/logsearch.yaml
@@ -0,0 +1,65 @@
+{{ if .Values.enabled }}
+apiVersion: extensions/v1beta1
+kind: Deployment
+metadata:
+ name: {{ .Release.Name }}-logsearch
+ namespace: {{.Values.global.namespace.logging}}
+spec:
+ strategy:
+ rollingUpdate:
+ maxUnavailable: 0
+ replicas: 1
+ selector:
+ matchLabels:
+ app: logsearch
+ release: {{ .Release.Name }}
+ template:
+ metadata:
+ labels:
+ app: logsearch
+ release: {{ .Release.Name }}
+ spec:
+{{- if .Values.rbac.enabled}}
+ serviceAccountName: {{ .Release.Name }}-logsearch-service-account
+{{end}}
+ terminationGracePeriodSeconds: 0
+ containers:
+ - name: logsearch
+ image: {{ .Values.image }}
+ imagePullPolicy: Always
+ env:
+ - name: ZK_CONNECT_STRING
+ value: "{{.Values.zkRelease}}-zookeeper-cs.{{.Values.global.namespace.logging}}.svc.{{.Values.global.clusterDomain}}:2181/infra-solr"
+ ports:
+ - containerPort: 61888
+ name: logsearchweb
+ volumeMounts:
+ - name: logsearch-configmap
+ mountPath: {{ .Values.configMountPath }}
+ readOnly: false
+ resources:
+{{ toYaml .Values.resources | indent 12 }}
+ readinessProbe:
+ httpGet:
+ path: /
+ port: 61888
+ initialDelaySeconds: 10
+ timeoutSeconds: 5
+ volumes:
+ - name: logsearch-configmap
+ configMap:
+ name: {{ .Release.Name }}-logsearch-configmap
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ .Release.Name }}-logsearch
+ namespace: {{.Values.global.namespace.logging}}
+spec:
+ ports:
+ - port: 61888
+ name: logsearchweb
+ selector:
+ app: logsearch
+ release: {{ .Release.Name }}
+{{- end }}
\ No newline at end of file
diff --git a/k8s/helm-charts/logsearch/values.yaml b/k8s/helm-charts/logsearch/values.yaml
new file mode 100755
index 0000000..001cdfd
--- /dev/null
+++ b/k8s/helm-charts/logsearch/values.yaml
@@ -0,0 +1,18 @@
+enabled: true
+image: apache/ambari-logsearch-portal:latest
+configMountPath: /logsearch-conf
+
+global:
+ clusterDomain: "cluster.local"
+ namespace:
+ logging: "default"
+ kubernetesApi: "default"
+ solr:
+ replicas: 3
+
+username: admin
+password: admin
+configApiEnabled: true
+
+rbac:
+ enabled: false
\ No newline at end of file
diff --git a/k8s/helm-charts/zookeeper/Chart.yaml b/k8s/helm-charts/zookeeper/Chart.yaml
new file mode 100644
index 0000000..5e2847a
--- /dev/null
+++ b/k8s/helm-charts/zookeeper/Chart.yaml
@@ -0,0 +1,9 @@
+apiVersion: v1
+name: zookeeper
+version: 1.0.0
+description: zookeeper service for our components
+keywords:
+ - zookeeper
+maintainers:
+ - name: Apache
+deprecated: false
\ No newline at end of file
diff --git a/k8s/helm-charts/zookeeper/templates/zookeeper.yaml b/k8s/helm-charts/zookeeper/templates/zookeeper.yaml
new file mode 100644
index 0000000..dfe3646
--- /dev/null
+++ b/k8s/helm-charts/zookeeper/templates/zookeeper.yaml
@@ -0,0 +1,142 @@
+{{- if .Values.enabled }}
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ .Release.Name }}-zookeeper-hs
+ labels:
+ app: {{ .Release.Name }}-zookeeper
+spec:
+ ports:
+ - port: 2888
+ name: server
+ - port: 3888
+ name: leader-election
+ clusterIP: None
+ selector:
+ app: {{ .Release.Name }}-zookeeper
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: {{ .Release.Name }}-zookeeper-cs
+ labels:
+ app: {{ .Release.Name }}-zookeeper
+spec:
+ ports:
+ - port: 2181
+ name: client
+ selector:
+ app: {{ .Release.Name }}-zookeeper
+---
+apiVersion: policy/v1beta1
+kind: PodDisruptionBudget
+metadata:
+ name: {{ .Release.Name }}-zookeeper-pdb
+spec:
+ selector:
+ matchLabels:
+ app: {{ .Release.Name }}-zookeeper
+ maxUnavailable: 1
+---
+apiVersion: apps/v1beta1
+kind: StatefulSet
+metadata:
+ name: {{ .Release.Name }}-zookeeper
+ labels:
+ chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
+ release: {{ .Release.Name }}
+spec:
+ selector:
+ matchLabels:
+ app: {{ .Release.Name }}-zookeeper
+ serviceName: {{ .Release.Name }}-zookeeper-hs
+ replicas: {{.Values.replicas}}
+ updateStrategy:
+ type: RollingUpdate
+ podManagementPolicy: Parallel
+ template:
+ metadata:
+ labels:
+ app: {{ .Release.Name }}-zookeeper
+ spec:
+{{- if .Values.affinity }}
+ affinity:
+ podAntiAffinity:
+ requiredDuringSchedulingIgnoredDuringExecution:
+ - labelSelector:
+ matchExpressions:
+ - key: "app"
+ operator: In
+ values:
+ - {{ .Release.Name }}-zookeeper
+ topologyKey: "kubernetes.io/hostname"
+{{end}}
+ containers:
+ - name: kubernetes-zookeeper
+ image: "k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10"
+ resources:
+ requests:
+ memory: "1Gi"
+ cpu: "0.5"
+ ports:
+ - containerPort: 2181
+ name: client
+ - containerPort: 2888
+ name: server
+ - containerPort: 3888
+ name: leader-election
+ command:
+ - sh
+ - -c
+ - "start-zookeeper \
+ --servers={{.Values.replicas}} \
+ --data_dir=/var/lib/zookeeper/data \
+ --data_log_dir=/var/lib/zookeeper/data/log \
+ --conf_dir=/opt/zookeeper/conf \
+ --client_port=2181 \
+ --election_port=3888 \
+ --server_port=2888 \
+ --tick_time=2000 \
+ --init_limit=10 \
+ --sync_limit=5 \
+ --heap=512M \
+ --max_client_cnxns=60 \
+ --snap_retain_count=3 \
+ --purge_interval=12 \
+ --max_session_timeout=40000 \
+ --min_session_timeout=4000 \
+ --log_level=INFO"
+ readinessProbe:
+ exec:
+ command:
+ - sh
+ - -c
+ - "zookeeper-ready 2181"
+ initialDelaySeconds: 10
+ timeoutSeconds: 5
+ livenessProbe:
+ exec:
+ command:
+ - sh
+ - -c
+ - "zookeeper-ready 2181"
+ initialDelaySeconds: 10
+ timeoutSeconds: 5
+ volumeMounts:
+ - name: zookeeper-datadir
+ mountPath: /var/lib/zookeeper
+{{- if .Values.persistence.enabled }}
+ volumeClaimTemplates:
+ - metadata:
+ name: zookeeper-datadir
+ spec:
+ accessModes: [ "ReadWriteOnce" ]
+ resources:
+ requests:
+ storage: {{ .Values.persistence.size }}
+{{- else }}
+ volumes:
+ - name: zookeeper-datadir
+ emptyDir: {}
+{{- end }}
+{{end}}
\ No newline at end of file
diff --git a/k8s/helm-charts/zookeeper/values.yaml b/k8s/helm-charts/zookeeper/values.yaml
new file mode 100644
index 0000000..2cdfc01
--- /dev/null
+++ b/k8s/helm-charts/zookeeper/values.yaml
@@ -0,0 +1,9 @@
+enabled: true
+zookeeperImage: "k8s.gcr.io/kubernetes-zookeeper:1.0-3.4.10"
+
+affinity: false
+persistence:
+ enabled: false
+ size: 100G
+
+replicas: 1
\ No newline at end of file
diff --git a/k8s/localstack/localstack.yaml b/k8s/localstack/localstack.yaml
new file mode 100644
index 0000000..6558387
--- /dev/null
+++ b/k8s/localstack/localstack.yaml
@@ -0,0 +1,62 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: localstack
+ labels:
+ app: localstack
+spec:
+ selector:
+ matchLabels:
+ app: localstack
+ template:
+ metadata:
+ labels:
+ app: localstack
+ spec:
+ hostname: localstack
+ containers:
+ - name: localstack
+ image: localstack/localstack
+ env:
+ - name: SERVICES
+ value: "s3:4569"
+ - name: POD_IP
+ valueFrom: { fieldRef: { fieldPath: status.podIP } }
+ ports:
+ - name: http
+ containerPort: 4569
+---
+kind: NetworkPolicy
+apiVersion: networking.k8s.io/v1
+metadata:
+ name: localstack
+ labels:
+spec:
+ policyTypes:
+ - Ingress
+ - Egress
+ podSelector:
+ matchLabels:
+ app: localstack
+ ingress:
+ - ports:
+ - port: 4569
+ egress:
+ - {}
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: localstack
+ labels:
+spec:
+ type: NodePort
+ ports:
+ - name: http
+ port: 4569
+ nodePort: 31000
+ targetPort: http
+ externalIPs:
+ []
+ selector:
+ app: localstack
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 23a5d8e..23b36cd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -375,6 +375,7 @@
<exclude>**/node_modules/**</exclude>
<exclude>**/dist/**</exclude>
<exclude>.repository/**</exclude>
+ <exclude>k8s/**</exclude>
</excludes>
</configuration>
<executions>