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

  1. Package the chart: helm package goldengate-helm-chart
  2. Install the chart: helm install goldengate ./goldengate-helm-chart
  3. Verify the deployment: kubectl get pods,svc,pvc -n default

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Designed with WordPress