# Kubernetes Node Agent on GKE Auto Pilot

[GKE Autopilot](https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-overview) is not officially supported on the [Bindplane Node Agent](/deployment/kubernetes/collector/install.md#node) at this time. This is due to [volume mount restrictions](https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-security) that are in place on auto-pilot clusters.

The Bindplane [Node Agent](/deployment/kubernetes/collector/install.md#node) deployment manifest can be modified to deploy to auto-pilot clusters.

### Modifications

Follow the [Install Kubernetes Agents](/deployment/kubernetes/collector/install.md) documentation. After downloading the YAML manifest, open it in your preferred text editor.

Modify the `volumes` section at `spec.template.spec.volumes` and comment or remove the following\
volume definitions:

* `runlog`
* `dockerlogs`

```yaml
volumes:
  - name: config
    emptyDir: {}
  # - name: runlog
  #   hostPath:
  #     path: /run/log/journal
  - name: varlog
    hostPath:
      path: /var/log
  # - name: dockerlogs
  #   hostPath:
  #     path: /var/lib/docker/containers
  - name: storage
    hostPath:
      path: /var/lib/observiq/otelcol/container
  - name: setup
    configMap:
      name: bindplane-node-agent-setup
```

Modify the `storage` volume to use an `emptyDir` volume type.

```yaml
- name: storage
  emptyDir: {}
  # hostPath:
  #   path: /var/lib/observiq/otelcol/container
```

Modify `opentelemetry-collector` container's `volumeMounts` at `spec.template.spec.containers` and comment or remove the following volume mount definitions:

* `runlog`
* `dockerlogs`

```yaml
volumeMounts:
  - mountPath: /etc/otel/config
    name: config
  # - mountPath: /run/log/journal
  #   name: runlog
  #   readOnly: true
  - mountPath: /var/log
    name: varlog
    readOnly: true
  # - mountPath: /var/lib/docker/containers
  #   name: dockerlogs
  #   readOnly: true
  - mountPath: /etc/otel/storage
    name: storage
```

### Apply

Once the modifications have been made, the YAML manifest can be applied to your clusters.

```bash
kubectl apply -f bindplane-agent.yaml
```

```bash
namespace/bindplane-agent created
serviceaccount/bindplane-agent created
clusterrole.rbac.authorization.k8s.io/bindplane-agent created
clusterrolebinding.rbac.authorization.k8s.io/bindplane-agent created
service/bindplane-node-agent created
service/bindplane-node-agent-headless created
configmap/bindplane-node-agent-setup created
daemonset.apps/bindplane-node-agent created
```

### Frequently Asked Questions

**Q: Will this support Docker-based clusters?**

**A:** No, however, GKE Auto Pilot clusters use the [containerd runtime](https://cloud.google.com/kubernetes-engine/docs/concepts/using-containerd) and do not require the docker volume mounts.

**Q: Is an emptyDir volume safe for configuration persistence**

**A:** The `hostPath` volume is used to ensure the collector's configuration is\
persisted in the unlikely event that the Bindplane Collector pod is updated and\
restarted during a Bindplane control plane outage. GKE Auto Pilot does not\
allow `hostPath` volumes, therefore a temporary volume is used to store the\
configuration pushed by Bindplane to the collector.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.bindplane.com/how-to-guides/cloud-and-platform-integrations/kubernetes/kubernetes-node-agent-on-gke-auto-pilot.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
