Python Version Management
If you are using Agent v6, Datadog recommends that you upgrade to Agent v7. Agent v7 only includes support for Python 3.
However, there may be a case where you wish to continue using Agent v6 while updating to Python 3. Starting with Datadog Agent v6.14.0, Agent v6 integrates both Python 2 and Python 3 runtimes. This means that Agent Checks can be run either with Python 2 or Python 3, depending on the Agent configuration.
Use Python 3 with Datadog Agent v6
By default, the Agent v6 uses the Python 2 runtime. Below are instructions for how to configure Agent v6 to use the Python 3 runtime:
This configuration is not supported for the Azure VM Extension.
Host Agent
Set the python_version configuration option in your datadog.yaml configuration file:
Restart the Agent.
Alternatively, specify which Python runtime you want to use by setting the DD_PYTHON_VERSION environment variable to 2 or 3. Environment variables take precedence over configuration options in datadog.yaml. For example, by setting the DD_PYTHON_VERSION environment variable, the python_version option in datadog.yaml is ignored.
This is an Agent-wide configuration option. All Python checks launched by an Agent use the same Python runtime.
Container Agent
Datadog provides Agent container images for Python 2 and Python 3.
- Image tags starting with
6., like 6.34.0 or 6.34.0-jmx, are images containing the Python 2 runtime. - Image tags starting with
7., like 7.34.0 or 7.34.0-jmx, are images containing the Python 3 runtime.
To switch from Python 2 to Python 3, update the image tag used to deploy the Agent.
By default, the Datadog Helm chart uses the Agent 7 image that embeds the Python 3 runtime.
To keep the Datadog Agent updated, edit your datadog-values.yaml to remove any information under the agent.image and the clusterChecksRunner.image sections.
To use a specific container registry, set it with agent.image.repository and clusterChecksRunner.image.repository. Ensure that agents.image.tag and clusterChecksRunner.image.tag are undefined.
When the image repository is unset, the Helm chart derives it from datadog.site, cluster type, and registryMigrationMode.
agent:
image:
repository: public.ecr.aws/datadog/agent
clusterChecksRunner:
image:
repository: public.ecr.aws/datadog/agent
To set the Agent to a specific version, set agents.image.tag and clusterChecksRunner.image.tag. All image tags starting with 7.* embed the Python 3 runtime.
agent:
image:
tag: 7.34.0
clusterChecksRunner:
image:
tag: 7.34.0
You can use both options at the same time.
agent:
image:
repository: public.ecr.aws/datadog/agent
tag: 7.34.0
clusterChecksRunner:
image:
repository: public.ecr.aws/datadog/agent
tag: 7.34.0
By default, the Datadog Operator uses an agent:7.*.* image that embeds the Python 3 runtime.
If the image information is not specified in the DatadogAgent resource, the Operator deploys a Python 3 Datadog Agent image.
If you have previously pinned the image version:
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
override:
clusterChecksRunner:
image:
tag: 6.33.0
nodeAgent:
image:
tag: 6.33.0
or you are using image.name:
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
global:
credentials:
apiKey: <DATADOG_API_KEY>
appKey: <DATADOG_APP_KEY>
override:
# ...
nodeAgent:
image:
name: gcr.io/datadoghq/agent:6.33.0
# ...
clusterChecksRunner:
image:
name: gcr.io/datadoghq/agent:6.33.0
Use spec.global.registry if you need to change the registry selected from your Datadog site, cluster type, and registryMigrationMode.
Then, pin the Agent 7 image tag in spec.override.nodeAgent.image.tag.
If you have enabled cluster check runners deployment, also pin the Agent 7 image tag in spec.override.clusterChecksRunner.image.tag.
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
# ...
global:
registry: public.ecr.aws/datadog
override:
# ...
nodeAgent:
image:
tag: 7.33.0
# ...
clusterChecksRunner:
image:
tag: 7.33.0
Note: Datadog recommends that you do not set the *.image.tag. Instead, let the Datadog Operator keep the Agent image tag up-to-date with an Agent 7 image.
If you need to use an Agent JMX image, you can set it without specifying the Agent *.image.tag:
apiVersion: datadoghq.com/v2alpha1
metadata:
name: datadog
spec:
# ...
global:
registry: public.ecr.aws/datadog
override:
# ...
nodeAgent:
image:
jmxEnabled: true
clusterChecksRunner:
image:
jmxEnabled: true
In your DaemonSet manifest, update the image tag in each container definition:
- Each
spec.template.spec.containers[*].image value - Each
spec.template.spec.initContainers[*].image value
For example, if your previous image value was gcr.io/datadoghq/agent:6.33.0, update it to registry.datadoghq.com/agent:7.33.0.
Before:
apiVersion: apps/v1
spec:
template:
spec:
containers:
- name: agent
image: gcr.io/datadoghq/agent:6.33.0
# ...
After:
apiVersion: apps/v1
spec:
template:
spec:
containers:
- name: agent
image: registry.datadoghq.com/agent:7.33.0
# ...
Use the extra_config field to set the python_version field to 3:
default_attributes(
'datadog' => {
'extra_config' => {
'python_version' => '3'
}
}
)
Use the agent_extra_config field to set the python_versionfield to 3:
class { "datadog_agent":
agent_extra_options => {
python_version => 3,
},
}
Set the python_version to 3 inside of your datadog_config:
datadog_config:
python_version: 3
Further Reading
Additional helpful documentation, links, and articles: