If you are looking to set up Oracle GoldenGate on a Kubernetes cluster using a Helm chart, you will need to define the configuration in a way that Helm understands. Helm charts are a great way to manage Kubernetes applications because they let you package all the necessary resources and settings together in one place. Here is a simple example of a basic Helm chart structure for deploying Oracle GoldenGate in a Kubernetes environment.
Remember, this example is just a starting point for you to have an idea of how to set it up. You will need to modify and expand it to fit your specific needs for deploying Oracle GoldenGate on Kubernetes. Good luck, and have fun with your setup. Let me know how it goes. I would love to see your implementation!
Helm Chart Structure
goldengate-helm-chart/
├── Chart.yaml
├── values.yaml
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── configmap.yaml
│ ├── secrets.yaml
│ ├── pvc.yaml
1. Chart.yaml
Defines metadata about the Helm chart.
apiVersion: v2
name: goldengate-helm-chart
description: Helm chart for Oracle GoldenGate
type: application
version: 1.0.0
appVersion: 23c
2. values.yaml
Holds default values for the Helm chart.
replicaCount: 1
image:
repository: container-registry.oracle.com/goldengate/goldengate-free
tag: 23ai-latest
pullPolicy: IfNotPresent
resources:
limits:
cpu: "2"
memory: "4Gi"
requests:
cpu: "1"
memory: "2Gi"
service:
type: ClusterIP
port: 443
persistence:
enabled: true
size: 20Gi
storageClass: standard
config:
OGG_HOME: /u01/app/ogg
AdminUsername: oggadmin
AdminPassword: Welcome##123
nodeSelector: {}
tolerations: []
affinity: {}
3. deployment.yaml
Defines the GoldenGate deployment.
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-goldengate
labels:
app: goldengate
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: goldengate
template:
metadata:
labels:
app: goldengate
spec:
containers:
- name: goldengate
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
ports:
- containerPort: {{ .Values.service.port }}
env:
- name: OGG_HOME
value: "{{ .Values.config.OGG_HOME }}"
- name: OGG_ADMIN_USERNAME
value: "{{ .Values.config.AdminUsername }}"
- name: OGG_ADMIN_PASSWORD
value: "{{ .Values.config.AdminPassword }}"
volumeMounts:
- name: ogg-data
mountPath: /u01/app/ogg/data
volumes:
- name: ogg-data
persistentVolumeClaim:
claimName: {{ .Release.Name }}-pvc
4. service.yaml
Creates a Kubernetes service.
apiVersion: v1
kind: Service
metadata:
name: {{ .Release.Name }}-goldengate
labels:
app: goldengate
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
targetPort: {{ .Values.service.port }}
selector:
app: goldengate
5. configmap.yaml
Holds configuration files.
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-config
labels:
app: goldengate
data:
ggserr.log: |
# Custom error logs configuration
LogLevel: Info
other.config: |
# Additional configurations
6. secrets.yaml
Stores sensitive data securely.
apiVersion: v1
kind: Secret
metadata:
name: {{ .Release.Name }}-secrets
type: Opaque
data:
admin-password: {{ .Values.config.AdminPassword | b64enc }}
7. pvc.yaml
Persistent storage for GoldenGate data.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ .Release.Name }}-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.persistence.size }}
storageClassName: {{ .Values.persistence.storageClass }}
Deploying GoldenGate with Helm
- Package the chart:
helm package goldengate-helm-chart - Install the chart:
helm install goldengate ./goldengate-helm-chart - Verify the deployment:
kubectl get pods,svc,pvc -ndefault
Notes
- Customizations: Update environment variables (
OGG_HOME,AdminUsername, etc.) as per your requirements. - Monitoring: Consider adding Telegraf, Prometheus, and Grafana configurations for monitoring. Make sure to visit and understand how GoldenGate can extract metrics with StatsD
- Scaling: Adjust resource requests and limits based on workload.

Leave a comment