Create Confluent Kafka Schema Registry Chart (#2884)

* Create Confluent Kafka Schema-Registry Chart

* Remove kafka chart changes for a different PR

* lower camelCase schema-registry values

* Cleanup requirements lock
This commit is contained in:
Benjamin Goldberg
2017-11-29 13:01:14 -08:00
committed by Vic Iglesias
parent b74f82787c
commit f9b45970fc
10 changed files with 269 additions and 0 deletions
+21
View File
@@ -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
+16
View File
@@ -0,0 +1,16 @@
name: schema-registry
home: https://docs.confluent.io/current/schema-registry/docs/index.html
version: 0.1.0
description: Schema Registry provides a serving layer for your metadata. It provides a RESTful
interface for storing and retrieving Avro schemas. It stores a versioned history of all schemas,
provides multiple compatibility settings and allows evolution of schemas according to the
configured compatibility setting. It provides serializers that plug into Kafka clients that
handle schema storage and retrieval for Kafka messages that are sent in the Avro format.
icon: https://www.confluent.io/wp-content/themes/confluent/assets/images/confluent-logo-300.png
apiVersion: v1
sources:
- https://github.com/confluentinc/schema-registry
- https://github.com/confluentinc/cp-docker-images
maintainers:
- name: benjigoldberg
email: ben@spothero.com
+72
View File
@@ -0,0 +1,72 @@
# Schema-Registry Helm Chart
This helm chart creates a [Confluent Schema-Registry server](https://github.com/confluentinc/schema-registry).
## Prerequisites
* Kubernetes 1.6
* A running Kafka Installation
* A running Zookeeper Installation
## Chart Components
This chart will dot he following:
* Create a Schema-Registry deployment
* Create a Service configured to connect to the available Schema-Registry pods on the configured
client port.
## Installing the Chart
You can install the chart with the release name `mysr` as below.
```console
$ helm repo add incubator http://storage.googleapis.com/kubernetes-charts-incubator
$ helm install --name mysr incubator/schema-registry
```
If you do not specify a name, helm will select a name for you.
### Installed Components
You can use `kubectl get` to view all of the installed components.
```console{%raw}
$ kubectl get all -l app=schema-registry
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/mysr-schema-registry 1 1 1 1 23m
NAME DESIRED CURRENT READY AGE
rs/mysr-schema-registry-bcb4c994c 1 1 1 23m
NAME READY STATUS RESTARTS AGE
po/mysr-schema-registry-bcb4c994c-qjqbj 1/1 Running 1 23m
```
1. `deploy/mysr-schema-registry` is the Deployment created by this chart.
1. `rs/mysr-schema-registry-bcb4c994c` is the ReplicaSet created by this Chart's Deployment.
1. `po/mysr-schema-registry-bcb4c994c-qjqbj` is the Pod created by the ReplicaSet under this Chart's Deployment.
## Configuration
You can specify each parameter using the `--set key=value[,key=value]` argument to `helm install`.
Alternatively, a YAML file that specifies the values for the parameters can be provided while installing the chart. For example,
```console
$ helm install --name my-release -f values.yaml incubator/schema-registry
```
> **Tip**: You can use the default [values.yaml](values.yaml)
### Parameters
The following tables lists the configurable parameters of the SchemaRegistry chart and their default values.
| Parameter | Description | Default |
| --------- | ----------- | ------- |
| `image` | The `SchemaRegistry` image repository | `confluentinc/cp-schema-registry` |
| `imageTag` | The `SchemaRegistry` image tag | `4.0.0` |
| `imagePullPolicy` | Image Pull Policy | `IfNotPresent` |
| `replicaCount` | The number of `SchemaRegistry` Pods in the Deployment | `1` |
| `configurationOverrides` | `SchemaRegistry` [configuration setting](https://github.com/confluentinc/schema-registry/blob/master/docs/config.rst#configuration-options) overrides in the dictionary format `setting.name: value` | `{}` |
| `resources` | CPU/Memory resource requests/limits | `{}` |
| `servicePort` | The port on which the SchemaRegistry server will be exposed. | `8081` |
| `kafka.enabled` | If `true`, install Kafka/Zookeeper alongside the `SchemaRegistry`. This is intended for testing and argument-less helm installs of this chart only and should not be used in Production. | `true` |
| `kafka.replicas` | The number of Kafka Pods to install as part of the `StatefulSet` if `kafka.Enabled` is `true`| `1` |
| `kafka.zookeeper.servers` | The number of Zookeeper Pods to install as part of the `StatefulSet` if `kafka.Enabled` is `true`| `1` |
| `kafka.ZookeeperUrl` | The URL of the Zookeeper servicing the Kafka installation if `Kafka.Enabled` is `false` | `""` |
| `kafka.ZookeeperPort` | The Port of the Zookeeper servicing the Kafka installation if `Kafka.Enabled` is `false` | `2181` |
@@ -0,0 +1,6 @@
dependencies:
- name: kafka
repository: https://kubernetes-charts-incubator.storage.googleapis.com/
version: 0.2.2
digest: sha256:43aedc891276fa0f681a738c003e0bf8f458bf05cf3087e010b0ee3f3bb5c9ec
generated: 2017-11-29T14:12:11.958088-06:00
@@ -0,0 +1,5 @@
dependencies:
- name: kafka
version: 0.2.2
repository: https://kubernetes-charts-incubator.storage.googleapis.com/
condition: kafka.enabled
@@ -0,0 +1,7 @@
Confluent Schema-Registry is now installed on your Kubernetes cluster. For more information on
Schema-Registry, please navigate to https://github.com/confluentinc/schema-registry
1. Get the application URL by running these commands:
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ template "schema-registry.name" . }},release={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
echo "Visit http://127.0.0.1:8080 to use your application"
kubectl port-forward $POD_NAME 8080:{{ .Values.servicePort }}
@@ -0,0 +1,29 @@
{{/* vim: set filetype=mustache: */}}
{{/*
Expand the name of the chart.
*/}}
{{- define "schema-registry.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 "schema-registry.fullname" -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{/*
Form the Kafka URL. If Kafka is installed as part of this chart, use k8s service discovery,
else use user-provided URL
*/}}
{{- define "kafka-zookeeper.url" }}
{{- $port := .Values.kafka.zookeeperPort | toString }}
{{- if .Values.kafka.enabled -}}
{{- printf "%s-zookeeper:%s" .Release.Name $port }}
{{- else -}}
{{- printf "%s:%s" .Values.kafka.zookeeperUrl $port }}
{{- end -}}
{{- end -}}
@@ -0,0 +1,48 @@
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: {{ template "schema-registry.fullname" . }}
labels:
app: {{ template "schema-registry.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.replicaCount }}
template:
metadata:
labels:
app: {{ template "schema-registry.name" . }}
release: {{ .Release.Name }}
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image }}:{{ .Values.imageTag }}"
imagePullPolicy: {{ .Values.imagePullPolicy }}
ports:
- containerPort: {{ .Values.servicePort }}
livenessProbe:
httpGet:
path: /
port: {{ .Values.servicePort }}
initialDelaySeconds: 10
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /
port: {{ .Values.servicePort }}
initialDelaySeconds: 10
timeoutSeconds: 5
env:
- name: SCHEMA_REGISTRY_HOST_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL
value: {{ template "kafka-zookeeper.url" . }}/
{{ range $configName, $configValue := .Values.configurationOverrides }}
- name: SCHEMA_REGISTRY_{{ $configName | replace "." "_" | upper }}
value: {{ $configValue }}
{{ end }}
resources:
{{ toYaml .Values.resources | indent 12 }}
@@ -0,0 +1,16 @@
apiVersion: v1
kind: Service
metadata:
name: {{ template "schema-registry.fullname" . }}
labels:
app: {{ template "schema-registry.name" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
ports:
- name: schema-registry
port: {{ .Values.servicePort }}
selector:
app: {{ template "schema-registry.name" . }}
release: {{ .Release.Name | quote}}
+49
View File
@@ -0,0 +1,49 @@
# Default values for Confluent Schema-Registry
# This is a YAML-formatted file.
# Declare name/value pairs to be passed into your templates.
# name: value
## schema-registry repository
image: "confluentinc/cp-schema-registry"
## The container tag to use
imageTag: "4.0.0"
## Specify a imagePullPolicy
## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images
imagePullPolicy: "IfNotPresent"
## Number of Schema Registry Pods to Deploy
replicaCount: 1
## Schema Registry Settings Overrides
## Configuration Options can be found here: https://docs.confluent.io/current/schema-registry/docs/config.html
configurationOverrides: {}
## Configure resource requests and limits
## ref: http://kubernetes.io/docs/user-guide/compute-resources/
## Confluent has production deployment guidelines here:
## ref: https://github.com/confluentinc/schema-registry/blob/master/docs/deployment.rst
##
resources: {}
# limits:
# cpu: 100m
# memory: 128Mi
# requests:
# cpu: 100m
# memory: 128Mi
## The port on which the SchemaRegistry will be available and serving requests
servicePort: 8081
## Kafka Settings
kafka:
## This is enabled only to allow installations of this chart without arguments
enabled: true
## Install only a single Kafka pod in the StatefulSet
Replicas: 1
## Install only a single Zookeeper pod in the StatefulSet
zookeeper:
Servers: 1
## If `Kafka.Enabled` is `false`, the Zookeeper url servicing the Kafka cluster must be provided
zookeeperUrl: ""
## If `Kafka.Enabled` is `false`, the Zookeeper port servicing the Kafka cluster must be provided
zookeeperPort: 2181