Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding helm charts #237

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/create-deploy-resources.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ jobs:
shell: bash
run: scripts/generate-k8s-resources.sh

- name: Create helm charts
shell: bash
run: scripts/generate-helm-charts.sh

- name: Create docker-compose resources
shell: bash
run: scripts/generate-docker-compose-resources.sh
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Further down in the Commit generated resources task you probably need to add "**/deploy/helm/*.yml", "deploy/helm/*.yml","**/deploy/helm/*.yaml", "deploy/helm/*.yaml" to the add parameter so that all the generated resources get added & committed back to the repo.

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm only going to make this comment here but it does repeat inside all the projects.

The deploy/helm directory inside each project should not be checked into source control manually. It should be auto-generated by the generate-helm-charts.sh script and added to version control by the create-deploy-resources GitHub actions job.

name: event-statistics-java11-latest-knative
version: 1.0.0
apiVersion: v2
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# Quarkus Helm Notes

To access the Helm annotations or properties you just need to have the following dependency in your
class path:

<dependency>
<groupId>io.quarkiverse.helm</groupId>
<artifactId>quarkus-helm</artifactId>
<version>{quarkus-helm-version}</version>
</dependency>

Build the project using:

mvn clean package

You can find the generated Helm artifacts under: `target/helm/kubernetes/<chart name>/` that should look like:
- Chart.yaml
- values.yaml
- templates/*.yml the generated resources by Quarkus Helm

**Note**: The `<chart name>` is set from either the property `quarkus.helm.name` or the `@HelmChart` annotation or the Quarkus application.

# Requirements

- Have installed [the Helm command line](https://helm.sh/docs/intro/install/)
- Have connected/logged to a kubernetes cluster
- Configure your Quarkus application to use any of the Quarkus Kubernetes extensions like Quarkus Kubernetes, Quarkus OpenShift or Quarkus Knative.
- Configure your Quarkus application to use any of [the Quarkus Container Image extensions](https://quarkus.io/guides/container-image) - This example uses `container-image-docker`.

# How can it be used?

You can run the following Maven command in order to generate the Helm artifacts and build/push the image into a container registry:

```shell
mvn clean package -Dquarkus.container-image.build=true -Dquarkus.container-image.push=true -Dquarkus.container-image.registry=<your container registry> -Dquarkus.container-image.group=<your container registry namespace>
```

This command will push the image to a container registry and will become available when a pod or container is created.

Finally, let's use Helm to deploy it into the cluster:

```shell
helm install helm-example ./target/helm/kubernetes/<chart name>
```

The above command will deploy a chart using the default values (as defined within the `values.yaml` file). We can override the default values to use your `values.dev.yaml` file by executing the following command:

```shell
helm install helm-example ./target/helm/kubernetes/<chart name> --values ./target/helm/<chart name>/kubernetes/values.dev.yaml
```

How can I update my deployment?

- Via the `upgrade` option of Helm command line:

After making changes to your project and regenerating the Helm resources and the application container image, then you need to upgrade your deployment:

```shell
helm upgrade helm-example ./target/helm/kubernetes/<chart name>
```

- Via the `set` option of Helm command line:

```shell
helm upgrade helm-example ./target/helm/kubernetes/<chart name> --set <app name>.replicas=1
```

How can we delete my deployment?

```shell
helm uninstall helm-example
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: event-statistics
application: event-stats
system: quarkus-super-heroes
name: event-statistics-config
data:
kafka.bootstrap.servers: PLAINTEXT://fights-kafka:9092
mp.messaging.connector.smallrye-kafka.apicurio.registry.url: http://apicurio:8080/apis/registry/v2
quarkus.opentelemetry.tracer.exporter.otlp.endpoint: http://otel-collector:4317
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: fights-kafka
application: fights-service
app.kubernetes.io/part-of: fights-service
app.openshift.io/runtime: amq
system: quarkus-super-heroes
name: fights-kafka
spec:
replicas: 1
selector:
matchLabels:
name: fights-kafka
template:
metadata:
labels:
application: fights-service
name: fights-kafka
system: quarkus-super-heroes
spec:
containers:
- command:
- sh
- -c
- "export CLUSTER_ID=$(bin/kafka-storage.sh random-uuid) && bin/kafka-storage.sh format -t ${CLUSTER_ID} -c config/kraft/server.properties && bin/kafka-server-start.sh config/kraft/server.properties --override advertised.listeners=${KAFKA_ADVERTISED_LISTENERS}"
env:
- name: LOG_DIR
value: /tmp/logs
- name: KAFKA_ADVERTISED_LISTENERS
value: PLAINTEXT://fights-kafka:9092
image: quay.io/strimzi/kafka:0.28.0-kafka-3.1.0
name: fights-kafka
ports:
- containerPort: 9092
resources:
limits:
memory: 768Mi
requests:
memory: 128Mi
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: /metrics
prometheus.io/port: "8080"
prometheus.io/scheme: http
labels:
app: apicurio
application: fights-service
system: quarkus-super-heroes
app.kubernetes.io/part-of: fights-service
app.kubernetes.io/name: apicurio
app.kubernetes.io/version: 2.2.3.Final
app.openshift.io/runtime: apicurio
name: apicurio
spec:
replicas: 1
selector:
matchLabels:
name: apicurio
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: /metrics
prometheus.io/port: "8080"
prometheus.io/scheme: http
labels:
application: fights-service
name: apicurio
system: quarkus-super-heroes
spec:
containers:
- env:
- name: REGISTRY_AUTH_ANONYMOUS_READ_ACCESS_ENABLED
value: "true"
image: quay.io/apicurio/apicurio-registry-mem:2.2.3.Final
livenessProbe:
failureThreshold: 3
httpGet:
path: /health/live
port: 8080
scheme: HTTP
initialDelaySeconds: 0
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 10
name: apicurio
ports:
- containerPort: 8080
name: http
protocol: TCP
readinessProbe:
failureThreshold: 3
httpGet:
path: /health/ready
port: 8080
scheme: HTTP
initialDelaySeconds: 0
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 10
resources:
limits:
memory: 768Mi
requests:
memory: 128Mi
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
apiVersion: v1
kind: Secret
metadata:
labels:
app: event-statistics
application: event-stats
system: quarkus-super-heroes
name: event-statistics-config-creds
type: Opaque
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
---
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
annotations:
app.openshift.io/connects-to: "fights-kafka,apicurio,otel-collector"
app.openshift.io/vcs-ref: main
app.openshift.io/vcs-url: https://github.com/quarkusio/quarkus-super-heroes
app.quarkus.io/commit-id: e6b908a2aad15d5f15e203fc2a7e40dd28e85bab
app.quarkus.io/build-timestamp: 2023-02-20 - 20:52:21 +0000
prometheus.io/scrape: "true"
prometheus.io/path: /q/metrics
prometheus.io/port: "8085"
prometheus.io/scheme: http
labels:
app: event-statistics
app.openshift.io/runtime: quarkus
application: event-stats
system: quarkus-super-heroes
app.kubernetes.io/name: event-statistics
app.kubernetes.io/part-of: event-stats
app.kubernetes.io/version: java11-latest
name: event-statistics
spec:
template:
spec:
containers:
- envFrom:
- configMapRef:
name: event-statistics-config
- secretRef:
name: event-statistics-config-creds
image: {{ .Values.app.image }}
imagePullPolicy: Always
livenessProbe:
failureThreshold: {{ .Values.app.livenessProbe.failureThreshold }}
httpGet:
path: {{ .Values.app.livenessProbe.httpGet.path }}
port: {{ .Values.app.livenessProbe.httpGet.port }}
scheme: {{ .Values.app.livenessProbe.httpGet.scheme }}
initialDelaySeconds: {{ .Values.app.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.app.livenessProbe.periodSeconds }}
successThreshold: {{ .Values.app.livenessProbe.successThreshold }}
timeoutSeconds: {{ .Values.app.livenessProbe.timeoutSeconds }}
name: event-statistics
ports:
- containerPort: 8085
name: http1
protocol: TCP
readinessProbe:
failureThreshold: {{ .Values.app.readinessProbe.failureThreshold }}
httpGet:
path: {{ .Values.app.readinessProbe.httpGet.path }}
port: {{ .Values.app.readinessProbe.httpGet.port }}
scheme: {{ .Values.app.readinessProbe.httpGet.scheme }}
initialDelaySeconds: {{ .Values.app.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.app.readinessProbe.periodSeconds }}
successThreshold: {{ .Values.app.readinessProbe.successThreshold }}
timeoutSeconds: {{ .Values.app.readinessProbe.timeoutSeconds }}
resources:
limits:
memory: 768Mi
requests:
memory: 256Mi
---
apiVersion: v1
kind: Service
metadata:
labels:
name: fights-kafka
application: fights-service
system: quarkus-super-heroes
name: fights-kafka
spec:
ports:
- port: 9092
protocol: TCP
targetPort: 9092
selector:
name: fights-kafka
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: /metrics
prometheus.io/port: "8080"
prometheus.io/scheme: http
labels:
name: apicurio
application: fights-service
system: quarkus-super-heroes
name: apicurio
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
name: apicurio
type: ClusterIP
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
app:
serviceType: ClusterIP
livenessProbe:
failureThreshold: 3
periodSeconds: 10
timeoutSeconds: 10
successThreshold: 1
initialDelaySeconds: 5
httpGet:
path: /q/health/live
scheme: HTTP
port: ":START:{{ .Values.app.livenessProbe.httpGet.port }}:END:"
image: event-statistics:java11-latest
readinessProbe:
failureThreshold: 3
timeoutSeconds: 10
periodSeconds: 10
successThreshold: 1
initialDelaySeconds: 5
httpGet:
path: /q/health/ready
scheme: HTTP
port: ":START:{{ .Values.app.readinessProbe.httpGet.port }}:END:"
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
name: event-statistics-java11-latest-kubernetes
version: 1.0.0
apiVersion: v2
Loading