diff --git a/.chloggen/add_missing_k8s_attributes.yaml b/.chloggen/add_missing_k8s_attributes.yaml
new file mode 100644
index 0000000000..7afd9a4a32
--- /dev/null
+++ b/.chloggen/add_missing_k8s_attributes.yaml
@@ -0,0 +1,22 @@
+# Use this changelog template to create an entry for release notes.
+#
+# If your change doesn't affect end users you should instead start
+# your pull request title with [chore] or use the "Skip Changelog" label.
+
+# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
+change_type: enhancement
+
+# The name of the area of concern in the attributes-registry, (e.g. http, cloud, db)
+component: k8s
+
+# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
+note: Adds `k8s.pod.ip`, `k8s.pod.hostname` and `k8s.pod.start_time` attributes
+
+# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
+# The values here must be integers.
+issues: [3171]
+
+# (Optional) One or more lines of additional information to render under the primary note.
+# These lines will be padded with 2 spaces and then inserted directly into the document.
+# Use pipe (|) for multiline entries.
+subtext:
diff --git a/docs/registry/attributes/k8s.md b/docs/registry/attributes/k8s.md
index d0731419f0..ac30cf3c6b 100644
--- a/docs/registry/attributes/k8s.md
+++ b/docs/registry/attributes/k8s.md
@@ -55,22 +55,25 @@ Kubernetes resource attributes.
| `k8s.node.name` |  | string | The name of the Node. | `node-1` |
| `k8s.node.uid` |  | string | The UID of the Node. | `1eb3a0c6-0477-4080-a9cb-0cb7db65c6a2` |
| `k8s.pod.annotation.` |  | string | The annotation placed on the Pod, the `` being the annotation name, the value being the annotation value. [21] | `true`; `x64`; `` |
-| `k8s.pod.label.` |  | string | The label placed on the Pod, the `` being the label name, the value being the label value. [22] | `my-app`; `x64`; `` |
+| `k8s.pod.hostname` |  | string | Specifies the hostname of the Pod. [22] | `collector-gateway` |
+| `k8s.pod.ip` |  | string | IP address allocated to the Pod. [23] | `172.18.0.2` |
+| `k8s.pod.label.` |  | string | The label placed on the Pod, the `` being the label name, the value being the label value. [24] | `my-app`; `x64`; `` |
| `k8s.pod.name` |  | string | The name of the Pod. | `opentelemetry-pod-autoconf` |
+| `k8s.pod.start_time` |  | string | The start timestamp of the Pod. [25] | `2025-12-04T08:41:03Z` |
| `k8s.pod.status.phase` |  | string | The phase for the pod. Corresponds to the `phase` field of the: [K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podstatus-v1-core) | `Pending`; `Running` |
| `k8s.pod.status.reason` |  | string | The reason for the pod state. Corresponds to the `reason` field of the: [K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podstatus-v1-core) | `Evicted`; `NodeAffinity` |
| `k8s.pod.uid` |  | string | The UID of the Pod. | `275ecb36-5aa8-4c2a-9c47-d8bb681b9aff` |
-| `k8s.replicaset.annotation.` |  | string | The annotation placed on the ReplicaSet, the `` being the annotation name, the value being the annotation value, even if the value is empty. [23] | `0`; `` |
-| `k8s.replicaset.label.` |  | string | The label placed on the ReplicaSet, the `` being the label name, the value being the label value, even if the value is empty. [24] | `guestbook`; `` |
+| `k8s.replicaset.annotation.` |  | string | The annotation placed on the ReplicaSet, the `` being the annotation name, the value being the annotation value, even if the value is empty. [26] | `0`; `` |
+| `k8s.replicaset.label.` |  | string | The label placed on the ReplicaSet, the `` being the label name, the value being the label value, even if the value is empty. [27] | `guestbook`; `` |
| `k8s.replicaset.name` |  | string | The name of the ReplicaSet. | `opentelemetry` |
| `k8s.replicaset.uid` |  | string | The UID of the ReplicaSet. | `275ecb36-5aa8-4c2a-9c47-d8bb681b9aff` |
| `k8s.replicationcontroller.name` |  | string | The name of the replication controller. | `opentelemetry` |
| `k8s.replicationcontroller.uid` |  | string | The UID of the replication controller. | `275ecb36-5aa8-4c2a-9c47-d8bb681b9aff` |
| `k8s.resourcequota.name` |  | string | The name of the resource quota. | `opentelemetry` |
-| `k8s.resourcequota.resource_name` |  | string | The name of the K8s resource a resource quota defines. [25] | `count/replicationcontrollers` |
+| `k8s.resourcequota.resource_name` |  | string | The name of the K8s resource a resource quota defines. [28] | `count/replicationcontrollers` |
| `k8s.resourcequota.uid` |  | string | The UID of the resource quota. | `275ecb36-5aa8-4c2a-9c47-d8bb681b9aff` |
-| `k8s.statefulset.annotation.` |  | string | The annotation placed on the StatefulSet, the `` being the annotation name, the value being the annotation value, even if the value is empty. [26] | `1`; `` |
-| `k8s.statefulset.label.` |  | string | The label placed on the StatefulSet, the `` being the label name, the value being the label value, even if the value is empty. [27] | `guestbook`; `` |
+| `k8s.statefulset.annotation.` |  | string | The annotation placed on the StatefulSet, the `` being the annotation name, the value being the annotation value, even if the value is empty. [29] | `1`; `` |
+| `k8s.statefulset.label.` |  | string | The label placed on the StatefulSet, the `` being the label name, the value being the label value, even if the value is empty. [30] | `guestbook`; `` |
| `k8s.statefulset.name` |  | string | The name of the StatefulSet. | `opentelemetry` |
| `k8s.statefulset.uid` |  | string | The UID of the StatefulSet. | `275ecb36-5aa8-4c2a-9c47-d8bb681b9aff` |
| `k8s.storageclass.name` |  | string | The name of K8s [StorageClass](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.30/#storageclass-v1-storage-k8s-io) object. | `gold.storageclass.storage.k8s.io` |
@@ -217,7 +220,17 @@ When this occurs, the exact value as reported by the Kubernetes API SHOULD be us
- An annotation `data` with empty string value SHOULD be recorded as
the `k8s.pod.annotation.data` attribute with value `""`.
-**[22] `k8s.pod.label.`:** Examples:
+**[22] `k8s.pod.hostname`:** The K8s Pod spec has an optional hostname field, which can be used to specify a hostname.
+Refer to [K8s docs](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-hostname-and-subdomain-field)
+for more information about this field.
+
+This attribute aligns with the `hostname` field of the
+[K8s PodSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podspec-v1-core).
+
+**[23] `k8s.pod.ip`:** This attribute aligns with the `podIP` field of the
+[K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podstatus-v1-core).
+
+**[24] `k8s.pod.label.`:** Examples:
- A label `app` with value `my-app` SHOULD be recorded as
the `k8s.pod.label.app` attribute with value `"my-app"`.
@@ -226,30 +239,37 @@ When this occurs, the exact value as reported by the Kubernetes API SHOULD be us
- A label `data` with empty string value SHOULD be recorded as
the `k8s.pod.label.data` attribute with value `""`.
-**[23] `k8s.replicaset.annotation.`:** Examples:
+**[25] `k8s.pod.start_time`:** Date and time at which the object was acknowledged by the Kubelet.
+This is before the Kubelet pulled the container image(s) for the pod.
+
+This attribute aligns with the `startTime` field of the
+[K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podstatus-v1-core),
+in ISO 8601 (RFC 3339 compatible) format.
+
+**[26] `k8s.replicaset.annotation.`:** Examples:
- A label `replicas` with value `0` SHOULD be recorded
as the `k8s.replicaset.annotation.replicas` attribute with value `"0"`.
- A label `data` with empty string value SHOULD be recorded as
the `k8s.replicaset.annotation.data` attribute with value `""`.
-**[24] `k8s.replicaset.label.`:** Examples:
+**[27] `k8s.replicaset.label.`:** Examples:
- A label `app` with value `guestbook` SHOULD be recorded
as the `k8s.replicaset.label.app` attribute with value `"guestbook"`.
- A label `injected` with empty string value SHOULD be recorded as
the `k8s.replicaset.label.injected` attribute with value `""`.
-**[25] `k8s.resourcequota.resource_name`:** The value for this attribute can be either the full `count/[.]` string (e.g., count/deployments.apps, count/pods), or, for certain core Kubernetes resources, just the resource name (e.g., pods, services, configmaps). Both forms are supported by Kubernetes for object count quotas. See [Kubernetes Resource Quotas documentation](https://kubernetes.io/docs/concepts/policy/resource-quotas/#quota-on-object-count) for more details.
+**[28] `k8s.resourcequota.resource_name`:** The value for this attribute can be either the full `count/[.]` string (e.g., count/deployments.apps, count/pods), or, for certain core Kubernetes resources, just the resource name (e.g., pods, services, configmaps). Both forms are supported by Kubernetes for object count quotas. See [Kubernetes Resource Quotas documentation](https://kubernetes.io/docs/concepts/policy/resource-quotas/#quota-on-object-count) for more details.
-**[26] `k8s.statefulset.annotation.`:** Examples:
+**[29] `k8s.statefulset.annotation.`:** Examples:
- A label `replicas` with value `1` SHOULD be recorded
as the `k8s.statefulset.annotation.replicas` attribute with value `"1"`.
- A label `data` with empty string value SHOULD be recorded as
the `k8s.statefulset.annotation.data` attribute with value `""`.
-**[27] `k8s.statefulset.label.`:** Examples:
+**[30] `k8s.statefulset.label.`:** Examples:
- A label `replicas` with value `0` SHOULD be recorded
as the `k8s.statefulset.label.app` attribute with value `"guestbook"`.
diff --git a/docs/registry/entities/k8s.md b/docs/registry/entities/k8s.md
index 4fb5f34743..496441f035 100644
--- a/docs/registry/entities/k8s.md
+++ b/docs/registry/entities/k8s.md
@@ -289,7 +289,10 @@ conflict.
| Identity | [`k8s.pod.uid`](/docs/registry/attributes/k8s.md) |  | `Recommended` | string | The UID of the Pod. | `275ecb36-5aa8-4c2a-9c47-d8bb681b9aff` |
| Description | [`k8s.pod.name`](/docs/registry/attributes/k8s.md) |  | `Recommended` | string | The name of the Pod. | `opentelemetry-pod-autoconf` |
| Description | [`k8s.pod.annotation.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The annotation placed on the Pod, the `` being the annotation name, the value being the annotation value. [17] | `true`; `x64`; `` |
-| Description | [`k8s.pod.label.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The label placed on the Pod, the `` being the label name, the value being the label value. [18] | `my-app`; `x64`; `` |
+| Description | [`k8s.pod.hostname`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | Specifies the hostname of the Pod. [18] | `collector-gateway` |
+| Description | [`k8s.pod.ip`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | IP address allocated to the Pod. [19] | `172.18.0.2` |
+| Description | [`k8s.pod.label.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The label placed on the Pod, the `` being the label name, the value being the label value. [20] | `my-app`; `x64`; `` |
+| Description | [`k8s.pod.start_time`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The start timestamp of the Pod. [21] | `2025-12-04T08:41:03Z` |
**[17] `k8s.pod.annotation.`:** Examples:
@@ -300,7 +303,17 @@ conflict.
- An annotation `data` with empty string value SHOULD be recorded as
the `k8s.pod.annotation.data` attribute with value `""`.
-**[18] `k8s.pod.label.`:** Examples:
+**[18] `k8s.pod.hostname`:** The K8s Pod spec has an optional hostname field, which can be used to specify a hostname.
+Refer to [K8s docs](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-hostname-and-subdomain-field)
+for more information about this field.
+
+This attribute aligns with the `hostname` field of the
+[K8s PodSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podspec-v1-core).
+
+**[19] `k8s.pod.ip`:** This attribute aligns with the `podIP` field of the
+[K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podstatus-v1-core).
+
+**[20] `k8s.pod.label.`:** Examples:
- A label `app` with value `my-app` SHOULD be recorded as
the `k8s.pod.label.app` attribute with value `"my-app"`.
@@ -309,6 +322,13 @@ conflict.
- A label `data` with empty string value SHOULD be recorded as
the `k8s.pod.label.data` attribute with value `""`.
+**[21] `k8s.pod.start_time`:** Date and time at which the object was acknowledged by the Kubelet.
+This is before the Kubelet pulled the container image(s) for the pod.
+
+This attribute aligns with the `startTime` field of the
+[K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podstatus-v1-core),
+in ISO 8601 (RFC 3339 compatible) format.
+
## K8s Replicaset
**Status:** 
@@ -323,17 +343,17 @@ conflict.
| --- | --- | --- | --- | --- | --- | --- |
| Identity | [`k8s.replicaset.uid`](/docs/registry/attributes/k8s.md) |  | `Recommended` | string | The UID of the ReplicaSet. | `275ecb36-5aa8-4c2a-9c47-d8bb681b9aff` |
| Description | [`k8s.replicaset.name`](/docs/registry/attributes/k8s.md) |  | `Recommended` | string | The name of the ReplicaSet. | `opentelemetry` |
-| Description | [`k8s.replicaset.annotation.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The annotation placed on the ReplicaSet, the `` being the annotation name, the value being the annotation value, even if the value is empty. [19] | `0`; `` |
-| Description | [`k8s.replicaset.label.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The label placed on the ReplicaSet, the `` being the label name, the value being the label value, even if the value is empty. [20] | `guestbook`; `` |
+| Description | [`k8s.replicaset.annotation.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The annotation placed on the ReplicaSet, the `` being the annotation name, the value being the annotation value, even if the value is empty. [22] | `0`; `` |
+| Description | [`k8s.replicaset.label.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The label placed on the ReplicaSet, the `` being the label name, the value being the label value, even if the value is empty. [23] | `guestbook`; `` |
-**[19] `k8s.replicaset.annotation.`:** Examples:
+**[22] `k8s.replicaset.annotation.`:** Examples:
- A label `replicas` with value `0` SHOULD be recorded
as the `k8s.replicaset.annotation.replicas` attribute with value `"0"`.
- A label `data` with empty string value SHOULD be recorded as
the `k8s.replicaset.annotation.data` attribute with value `""`.
-**[20] `k8s.replicaset.label.`:** Examples:
+**[23] `k8s.replicaset.label.`:** Examples:
- A label `app` with value `guestbook` SHOULD be recorded
as the `k8s.replicaset.label.app` attribute with value `"guestbook"`.
@@ -384,17 +404,17 @@ conflict.
| --- | --- | --- | --- | --- | --- | --- |
| Identity | [`k8s.statefulset.uid`](/docs/registry/attributes/k8s.md) |  | `Recommended` | string | The UID of the StatefulSet. | `275ecb36-5aa8-4c2a-9c47-d8bb681b9aff` |
| Description | [`k8s.statefulset.name`](/docs/registry/attributes/k8s.md) |  | `Recommended` | string | The name of the StatefulSet. | `opentelemetry` |
-| Description | [`k8s.statefulset.annotation.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The annotation placed on the StatefulSet, the `` being the annotation name, the value being the annotation value, even if the value is empty. [21] | `1`; `` |
-| Description | [`k8s.statefulset.label.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The label placed on the StatefulSet, the `` being the label name, the value being the label value, even if the value is empty. [22] | `guestbook`; `` |
+| Description | [`k8s.statefulset.annotation.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The annotation placed on the StatefulSet, the `` being the annotation name, the value being the annotation value, even if the value is empty. [24] | `1`; `` |
+| Description | [`k8s.statefulset.label.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The label placed on the StatefulSet, the `` being the label name, the value being the label value, even if the value is empty. [25] | `guestbook`; `` |
-**[21] `k8s.statefulset.annotation.`:** Examples:
+**[24] `k8s.statefulset.annotation.`:** Examples:
- A label `replicas` with value `1` SHOULD be recorded
as the `k8s.statefulset.annotation.replicas` attribute with value `"1"`.
- A label `data` with empty string value SHOULD be recorded as
the `k8s.statefulset.annotation.data` attribute with value `""`.
-**[22] `k8s.statefulset.label.`:** Examples:
+**[25] `k8s.statefulset.label.`:** Examples:
- A label `replicas` with value `0` SHOULD be recorded
as the `k8s.statefulset.label.app` attribute with value `"guestbook"`.
diff --git a/docs/resource/k8s/README.md b/docs/resource/k8s/README.md
index e406e7b924..ac433b754e 100644
--- a/docs/resource/k8s/README.md
+++ b/docs/resource/k8s/README.md
@@ -168,7 +168,10 @@ containers on your cluster.
| Identity | [`k8s.pod.uid`](/docs/registry/attributes/k8s.md) |  | `Recommended` | string | The UID of the Pod. | `275ecb36-5aa8-4c2a-9c47-d8bb681b9aff` |
| Description | [`k8s.pod.name`](/docs/registry/attributes/k8s.md) |  | `Recommended` | string | The name of the Pod. | `opentelemetry-pod-autoconf` |
| Description | [`k8s.pod.annotation.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The annotation placed on the Pod, the `` being the annotation name, the value being the annotation value. [1] | `true`; `x64`; `` |
-| Description | [`k8s.pod.label.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The label placed on the Pod, the `` being the label name, the value being the label value. [2] | `my-app`; `x64`; `` |
+| Description | [`k8s.pod.hostname`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | Specifies the hostname of the Pod. [2] | `collector-gateway` |
+| Description | [`k8s.pod.ip`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | IP address allocated to the Pod. [3] | `172.18.0.2` |
+| Description | [`k8s.pod.label.`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The label placed on the Pod, the `` being the label name, the value being the label value. [4] | `my-app`; `x64`; `` |
+| Description | [`k8s.pod.start_time`](/docs/registry/attributes/k8s.md) |  | `Opt-In` | string | The start timestamp of the Pod. [5] | `2025-12-04T08:41:03Z` |
**[1] `k8s.pod.annotation.`:** Examples:
@@ -179,7 +182,17 @@ containers on your cluster.
- An annotation `data` with empty string value SHOULD be recorded as
the `k8s.pod.annotation.data` attribute with value `""`.
-**[2] `k8s.pod.label.`:** Examples:
+**[2] `k8s.pod.hostname`:** The K8s Pod spec has an optional hostname field, which can be used to specify a hostname.
+Refer to [K8s docs](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-hostname-and-subdomain-field)
+for more information about this field.
+
+This attribute aligns with the `hostname` field of the
+[K8s PodSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podspec-v1-core).
+
+**[3] `k8s.pod.ip`:** This attribute aligns with the `podIP` field of the
+[K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podstatus-v1-core).
+
+**[4] `k8s.pod.label.`:** Examples:
- A label `app` with value `my-app` SHOULD be recorded as
the `k8s.pod.label.app` attribute with value `"my-app"`.
@@ -187,6 +200,13 @@ containers on your cluster.
the `k8s.pod.label.mycompany.io/arch` attribute with value `"x64"`.
- A label `data` with empty string value SHOULD be recorded as
the `k8s.pod.label.data` attribute with value `""`.
+
+**[5] `k8s.pod.start_time`:** Date and time at which the object was acknowledged by the Kubelet.
+This is before the Kubelet pulled the container image(s) for the pod.
+
+This attribute aligns with the `startTime` field of the
+[K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podstatus-v1-core),
+in ISO 8601 (RFC 3339 compatible) format.
diff --git a/model/k8s/entities.yaml b/model/k8s/entities.yaml
index c1baeb0c3d..049df527a0 100644
--- a/model/k8s/entities.yaml
+++ b/model/k8s/entities.yaml
@@ -60,6 +60,15 @@ groups:
- ref: k8s.pod.annotation
role: descriptive
requirement_level: opt_in
+ - ref: k8s.pod.ip
+ role: descriptive
+ requirement_level: opt_in
+ - ref: k8s.pod.hostname
+ role: descriptive
+ requirement_level: opt_in
+ - ref: k8s.pod.start_time
+ role: descriptive
+ requirement_level: opt_in
- id: entity.k8s.container
type: entity
diff --git a/model/k8s/registry.yaml b/model/k8s/registry.yaml
index 60bed44e22..ae92fddc79 100644
--- a/model/k8s/registry.yaml
+++ b/model/k8s/registry.yaml
@@ -125,6 +125,41 @@ groups:
brief: >
The name of the Pod.
examples: ['opentelemetry-pod-autoconf']
+ - id: k8s.pod.ip
+ type: string
+ stability: development
+ brief: >
+ IP address allocated to the Pod.
+ examples: [ '172.18.0.2' ]
+ note: |
+ This attribute aligns with the `podIP` field of the
+ [K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podstatus-v1-core).
+ - id: k8s.pod.hostname
+ type: string
+ stability: development
+ brief: >
+ Specifies the hostname of the Pod.
+ note: |
+ The K8s Pod spec has an optional hostname field, which can be used to specify a hostname.
+ Refer to [K8s docs](https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-hostname-and-subdomain-field)
+ for more information about this field.
+
+ This attribute aligns with the `hostname` field of the
+ [K8s PodSpec](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podspec-v1-core).
+ examples: [ 'collector-gateway' ]
+ - id: k8s.pod.start_time
+ type: string
+ stability: development
+ brief: >
+ The start timestamp of the Pod.
+ examples: [ '2025-12-04T08:41:03Z' ]
+ note: |
+ Date and time at which the object was acknowledged by the Kubelet.
+ This is before the Kubelet pulled the container image(s) for the pod.
+
+ This attribute aligns with the `startTime` field of the
+ [K8s PodStatus](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.34/#podstatus-v1-core),
+ in ISO 8601 (RFC 3339 compatible) format.
- id: k8s.pod.label
type: template[string]
stability: development