Kubernetes runs applications and services inside containers, and it expects that each node in the cluster already has the respective container runtime installed; this can be done with a provisioning tool like Terraform.
However, it does not dictate any particular container format, as long as it is a format that abides by the Open Container Initiative (OCI)'s runtime specification (https://github.com/opencontainers/runtime-spec). For instance, you can use Docker, rkt (by CoreOS), or runc (by OCI) / CRI-O (by Kubernetes team) as the container format and runtime.