# Installing Agents via Kubernetes

To ensure a smooth and standardized deployment of Connectware agents on your Kubernetes cluster, we recommend that you use the connectware-agent Helm chart. This approach streamlines the installation process and provides a more robust and maintainable solution compared to manual deployment.

## Deploying Agents Using the connectware-agent Helm Chart

The connectware-agent Helm chart simplifies the deployment of Connectware agents on Kubernetes. Here is an overview of the steps:

1. Add the Cybus Helm repository to your local Helm installation.
2. Update your local Helm chart repository.
3. Install the connectware-agent chart via Helm commands.

For detailed instructions on how to install agents via the connectware-agent Helm chart, see the [Installing Connectware Agents using the connectware-agent Helm Chart](/2-1-2/documentation/agents/agents-in-kubernetes/installing-connectware-agents-using-the-connectware-agent-helm-chart.md).

## Deploying Agents Manually

{% hint style="warning" %}
Manual deployment offers more control but requires a deeper understanding of Kubernetes concepts and involves more steps than using the Helm chart.
{% endhint %}

To manually deploy agents on a Kubernetes cluster:

1. Prepare a Kubernetes manifest file with the necessary configuration. Set the same environment variables as in other deployment methods.
2. Create a Kubernetes secret containing your Cybus registry credentials. This is required for pulling Connectware container images from the registry.
3. Deploy the manifest. The example below uses an `emptyDir` volume for agent data, but for production, use a persistent volume for data durability.

* Use the following command to create a secret named `cybus-docker-registry`:

{% code lineNumbers="true" %}

```bash
kubectl create secret docker-registry cybus-docker-registry \
  --docker-server=registry.cybus.io \
  --docker-username=${YOUR_USERNAME} \
  --docker-password=${YOUR_PASSWORD} \
  --docker-email=${YOUR_EMAIL}
```

{% endcode %}

Depending on your setup, use one of the following sets of credentials:

If you have a Cybus Portal account:

* `docker-username`: Your Cybus Portal username
* `docker-password`: Your Cybus Portal password

If you're using a Connectware license key:

* `docker-username`: `license`
* `docker-password`: Your Connectware license key

## Example for Manual Agent Deployment

The following example shows a Kubernetes manifest for deploying a Connectware agent. Update the image tag to match your Connectware version.

{% file src="/files/eO82WkY081rxRe1driWq" %}

{% code lineNumbers="true" %}

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  # The ID for this Kubernetes object
  name: connectware-agent-deployment
  labels:
    # Attach labels for easy group selection
    app: protocol-mapper-agent
spec:
  replicas: 1
  selector:
    matchLabels:
      app: protocol-mapper-agent
  template:
    metadata:
      labels:
        app: protocol-mapper-agent
    spec:
      # Configure volumes used by the agent to store data across restarts
      volumes:
        - name: agent-data-volume
          emptyDir: {}
      containers:
        - name: protocol-mapper-agent
          # Container image. Watch out: Must use identical version tag to current Connectware version!
          image: registry.cybus.io/cybus/protocol-mapper:2.1.0
          env:
            # Make the protocol-mapper runs as an agent
            - name: CYBUS_AGENT_MODE
              value: 'distributed'
              # Set the name of the agent. This must match the agentName used in the commissioning file.
            - name: CYBUS_AGENT_NAME
              value: 'myAgent'
              # The IP address or hostname where the Connectware is running
            - name: CYBUS_HOSTNAME_INGRESS
              value: 'connectware'
          ports:
            # Expose the ports used by the agent.
            - containerPort: 443
          # Configure mount points
          volumeMounts:
            - mountPath: /data
              name: agent-data-volume
          # Configure resource limits
          resources:
            limits:
              cpu: 4000m
              memory: 4Gi
      # Kubernetes secret used to pull the images from the Cybus registry
      imagePullSecrets:
        - name: cybus-docker-registry
```

{% endcode %}


---

# 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.cybus.io/2-1-2/documentation/agents/installing-agents/installing-agents-via-kubernetes.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.
