diff --git a/content/en/docs/reference/labels-annotations-taints/_index.md b/content/en/docs/reference/labels-annotations-taints/_index.md index 03397f462f5bb..78ae061da8389 100644 --- a/content/en/docs/reference/labels-annotations-taints/_index.md +++ b/content/en/docs/reference/labels-annotations-taints/_index.md @@ -116,9 +116,20 @@ The Kubelet populates this with `runtime.GOARCH` as defined by Go. This can be h Example: `kubernetes.io/os: "linux"` -Used on: Node +Used on: Node, Pod + +For nodes, the kubelet populates this with `runtime.GOOS` as defined by Go. This can be handy if you are +mixing operating systems in your cluster (for example: mixing Linux and Windows nodes). + +You can also set this label on a Pod. Kubernetes allows you to set any value for this label; +if you use this label, you should nevertheless set it to the Go `runtime.GOOS` string for the operating +system that this Pod actually works with. -The Kubelet populates this with `runtime.GOOS` as defined by Go. This can be handy if you are mixing operating systems in your cluster (for example: mixing Linux and Windows nodes). +When the `kubernetes.io/os` label value for a Pod does not match the label value on a Node, +the kubelet on the node will not admit the Pod. However, this is not taken into account by +the kube-scheduler. Alternatively, the kubelet refuses to run a Pod where you have specified a Pod OS, if +this isn't the same as the operating system for the node where that kubelet is running. Just +look for [Pods OS](/docs/concepts/workloads/pods/#pod-os) for more details. ### kubernetes.io/metadata.name