Deploy to a GKE Autopilot cluster

Serverless clusters often require custom configuration for the observe agent to work. In the case of GKE Autopilot, there are certain constraints:

  1. Only var/log is allowed as a hostPath for Host Path Volumes, source. This works for collecting pod logs, but the hostmetrics receiver would require some extra mounts outside of this folder. Hence, the hostmetrics receiver is disabled in the config below, and mounts required for its functioning are removed.
  2. There are limitations on the kinds of node affinity selector one can have, see here. observeinc.com/unschedulableis not allowed, and hence they must be removed.

Add the following to your values.yaml file:

# Remove observeinc.com/unschedulable affinity rule for all components
# clean up some unneeded volumes and volumeMounts

node:
  enabled: true
  metrics:
    enabled: false
  forwarder:
    enabled: true
    mode: deployment


cluster-events:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/os
                operator: NotIn
                values: [windows]

cluster-metrics:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/os
                operator: NotIn
                values: [windows]

prometheus-scraper:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/os
                operator: NotIn
                values: [windows]

node-logs-metrics:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/os
                operator: NotIn
                values: [windows]
  extraVolumes:
    - name: "observe-agent-deployment-config"
      configMap:
        name: "observe-agent"
        items:
          - key: "relay"
            path: "observe-agent.yaml"
        defaultMode: 420
    - name: varlogpods
      hostPath:
        path: /var/log/pods
  extraVolumeMounts:
    - name: observe-agent-deployment-config
      mountPath: /observe-agent-conf
    - name: varlogpods
      mountPath: /var/log/pods
      readOnly: true

monitor:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/os
                operator: NotIn
                values: [windows]

forwarder:
  mode: deployment
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/os
                operator: NotIn
                values: [windows]

gateway:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
          - matchExpressions:
              - key: kubernetes.io/os
                operator: NotIn
                values: [windows]

After deploying, your data should be flowing in.