Skip to content

Instantly share code, notes, and snippets.

@dobesv
Last active March 24, 2020 17:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dobesv/98d85b18ee8566891c5122e2b990f0c5 to your computer and use it in GitHub Desktop.
Save dobesv/98d85b18ee8566891c5122e2b990f0c5 to your computer and use it in GitHub Desktop.
Example kustomize configs for deploying apache drill on kubernetes
FROM apache/drill:1.17.0
# Disable Java's built-in DNS cache
RUN sed -i 's/#networkaddress\.cache\.ttl=-1$/networkaddress.cache.ttl=0/' "/usr/lib/jvm/jre/lib/security/java.security"
# Install JMX Prometheus Exporter
RUN mkdir -p /opt/jmx-exporter && \
curl -o "/opt/jmx-exporter/jmx-exporter.jar" "https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_prometheus_javaagent-0.12.0.jar"
COPY drill-jmx-exporter-rules.yaml /opt/jmx-exporter/drill-jmx-exporter-rules.yaml
# Add CA certs for our mongo databases so we can connect using SSL
RUN mkdir -p /etc/ssl/certs/ext-ca
COPY *.crt /etc/ssl/certs/ext-ca/
RUN for CRT in /etc/ssl/certs/ext-ca/*.crt ; do \
keytool -import -alias "${CRT}" -file "${CRT}" \
-keystore "/etc/alternatives/jre/lib/security/cacerts" -noprompt -storepass "changeit" \
&& cat ${CRT} >>/etc/ssl/certs/ca-bundle.crt ;\
done
# Install Jackson for JSON logging output
#RUN mkdir -p /opt/drill/jars/ext && \
# curl -o "/opt/drill/jars/ext/jackson-databind-2.10.1.jar" "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.10.1/jackson-databind-2.10.1.jar" && \
# curl -o "/opt/drill/jars/ext/jackson-core-2.10.1.jar" "https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.1/jackson-core-2.10.1.jar"
ENV DRILL_JAVA_OPTS -javaagent:/opt/jmx-exporter/jmx-exporter.jar=9101:/opt/jmx-exporter/drill-jmx-exporter-rules.yaml
ENTRYPOINT /opt/drill/bin/drillbit.sh
CMD run
drill.exec: {
cluster-id: "formative-production",
zk.connect: "zk-a.zookeeper.svc,zk-c.zookeeper.svc,zk-e.zookeeper.svc",
sys.store.provider.zk.blobroot: "s3a://parquet-db-tables-production/profiles"
}
apiVersion: v1
kind: Namespace
metadata:
name: drill
apiVersion: v1
kind: Service
metadata:
namespace: apache
name: drill
labels:
app: drill
component: drillbit
spec:
ports:
- name: http
port: 8047
- name: userport
port: 31010
- name: controlport
port: 31011
- name: dataport
port: 31012
- name: prom-metrics
port: 9101
selector:
app: drill
component: drillbit
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: drillbit
namespace: drill
labels:
app: drill
component: drillbit
spec:
minReplicas: 2
maxReplicas: 20
scaleTargetRef:
apiVersion: apps/v1
kind: StatefulSet
name: drillbit
metrics:
# Run at least ((cpu time used in the last 1m / 60) / 50) replicas
# This metric comes from metrics-server, which uses an average over 1 minute
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: drillbit
namespace: drill
labels:
app: drill
component: drillbit
spec:
jobLabel: component
selector:
matchLabels:
app: drill
component: drillbit
namespaceSelector:
matchNames:
- drill
endpoints:
- port: prom-metrics
interval: 30s
path: /metrics
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: drillbit
namespace: drill
labels:
app: drill
component: drillbit
spec:
selector:
matchLabels:
app: drill
component: drillbit
serviceName: drillbits
podManagementPolicy: Parallel
replicas: 1
template:
metadata:
labels:
app: drill
component: drillbit
spec:
containers:
- name: drillbit
image: 555337501170.dkr.ecr.us-east-1.amazonaws.com/drill:1.17.0-2020-03-05-8cc815fb
command:
- /opt/drill/bin/drillbit.sh
- run
livenessProbe:
httpGet:
port: 9101
successThreshold: 1
failureThreshold: 2
periodSeconds: 30
initialDelaySeconds: 60
timeoutSeconds: 1
readinessProbe:
httpGet:
port: 8047
successThreshold: 1
failureThreshold: 2
periodSeconds: 30
initialDelaySeconds: 60
timeoutSeconds: 1
resources:
limits:
cpu: 12
memory: 24Gi
ports:
- name: http
containerPort: 8047
protocol: TCP
- name: userport
containerPort: 31010
protocol: TCP
- name: controlport
containerPort: 31011
protocol: TCP
- name: dataport
containerPort: 31012
protocol: TCP
- name: prom-metrics
containerPort: 9101
protocol: TCP
env:
- name: DRILLBIT_MAX_PROC_MEM
value: 24G
- name: DRILL_HEAP
value: 8G
- name: DRILL_MAX_DIRECT_MEMORY
value: 14G
volumeMounts:
- mountPath: /opt/drill/conf/drill-override.conf
name: configmap
subPath: drill-override.conf
- mountPath: /opt/drill/conf/logback.xml
name: configmap
subPath: logback.xml
- mountPath: /opt/drill/conf/core-site.xml
name: secret
subPath: core-site.xml
- mountPath: /etc/passwd
name: secret
subPath: passwd
- mountPath: /etc/shadow
name: secret
subPath: shadow
volumes:
- name: configmap
configMap:
name: drill
- name: secret
secret:
secretName: drill
# Source: cert-manager/templates/webhook-service.yaml
apiVersion: v1
kind: Service
metadata:
name: drillbits
namespace: drill
labels:
app: drill
component: drillbit
spec:
clusterIP: None
ports:
- name: http
port: 8047
- name: userport
port: 31010
- name: controlport
port: 31011
- name: dataport
port: 31012
- name: prom-metrics
port: 9101
selector:
app: drill
component: drillbit
resources:
- ../base
- drillbit.horizontalpodautoscaler.yaml
configMapGenerator:
- name: drill
files:
- drill-override.conf
behavior: merge
namespace: drill
<?xml version="1.0" encoding="UTF-8" ?>
<!--
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.
-->
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<!-- -->
<!-- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">-->
<!-- <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">-->
<!-- <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">-->
<!-- <timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSX</timestampFormat>-->
<!-- <timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId>-->
<!-- </layout>-->
<!-- </encoder>-->
<!-- </appender>-->
<appender name="QUERY" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.query.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log.query.path}.%i</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>100MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%msg%n</pattern>
</encoder>
</appender>
<logger name="org.apache.drill" additivity="false">
<level value="info" />
<appender-ref ref="STDOUT" />
</logger>
<logger name="query.logger" additivity="false">
<level value="info" />
<appender-ref ref="QUERY" />
<!-- <appender-ref ref="SOCKET" /> -->
</logger>
<root>
<level value="error" />
<appender-ref ref="STDOUT" />
</root>
</configuration>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment