mutate+copy is a no-op if a field does not exist, so you can compress this down to
mutate {
copy => {
"[kubernetes][container][_module][labels]" => "[kubernetes][labels]"
"[kubernetes][container][_module][namespace]" => "[kubernetes][namespace]"
"[kubernetes][container][_module][node]" => "[kubernetes][node]"
"[kubernetes][container][_module][pod]" => "[kubernetes][pod]"
"[kubernetes][pod][_module][labels]" => "[kubernetes][labels]"
"[kubernetes][pod][_module][namespace]" => "[kubernetes][namespace]"
"[kubernetes][pod][_module][node]" => "[kubernetes][node]"
"[kubernetes][node][_module][labels]" => "[kubernetes][labels]"
"[kubernetes][volume][_module][labels]" => "[kubernetes][labels]"
"[kubernetes][volume][_module][namespace]" => "[kubernetes][namespace]"
"[kubernetes][volume][_module][node]" => "[kubernetes][node]"
"[kubernetes][volume][_module][pod]" => "[kubernetes][pod]"
"[kubernetes][system][_module][labels]" => "[kubernetes][labels]"
"[kubernetes][system][_module][node]" => "[kubernetes][node]"
}
}
assuming that only one of the sets of node/labels/pod will be present.