diff --git a/arch-images/kata-oci-create.svg b/arch-images/kata-oci-create.svg new file mode 100644 index 0000000000..5c5a97c528 --- /dev/null +++ b/arch-images/kata-oci-create.svg @@ -0,0 +1,27 @@ +Participant Docker +#Participant "kata-runtime" +#Participant virtcontainers +#Participant shim +#Participant proxy +#Participant hypervisor +#Participant agent +Docker->"kata-runtime": create +"kata-runtime"->virtcontainers: CreateSandbox() +Note left of virtcontainers: Sandbox\nReady +virtcontainers->virtcontainers: createNetwork() +virtcontainers->virtcontainers: Execute PreStart Hooks +virtcontainers->hypervisor: Start VM (inside the netns) +hypervisor-->virtcontainers: VM started +virtcontainers->proxy: Start Proxy +proxy->hypervisor: Connect the VM +virtcontainers->agent: CreateSandbox() +agent-->virtcontainers: Sandbox Created +virtcontainers->agent: CreateContainer() +agent-->virtcontainers: Container Created +virtcontainers->shim: Start Shim +shim->agent: ReadStdout() (blocking call) +shim->agent: ReadStderr() (blocking call) +shim->agent: WaitProcess() (blocking call) +Note left of virtcontainers: Container\nReady +virtcontainers-->"kata-runtime": End of CreateSandbox() +"kata-runtime"-->Docker: End of createDockerDockerkata-runtimekata-runtimevirtcontainersvirtcontainershypervisorhypervisorproxyproxyagentagentshimshimcreateCreateSandbox()SandboxReadycreateNetwork()Execute PreStart HooksStart VM (inside the netns)VM startedStart ProxyConnect the VMCreateSandbox()Sandbox CreatedCreateContainer()Container CreatedStart ShimReadStdout() (blocking call)ReadStderr() (blocking call)WaitProcess() (blocking call)ContainerReadyEnd of CreateSandbox()End of create \ No newline at end of file diff --git a/arch-images/kata-oci-create.txt b/arch-images/kata-oci-create.txt new file mode 100644 index 0000000000..91bfdcbef5 --- /dev/null +++ b/arch-images/kata-oci-create.txt @@ -0,0 +1,31 @@ +Title: Kata Flow +participant Docker +participant Kata Runtime +participant virtcontainers +participant hypervisor +participant agent +participant shim-pod +participant shim-ctr +participant proxy + +#Docker Create! +Docker->Kata Runtime: create +Kata Runtime->virtcontainers: CreateSandbox() +Note left of virtcontainers: Sandbox\nReady +virtcontainers->virtcontainers: createNetwork() +virtcontainers->virtcontainers: Execute PreStart Hooks +virtcontainers->+hypervisor: Start VM (inside the netns) +hypervisor-->-virtcontainers: VM started +virtcontainers->proxy: Start Proxy +proxy->hypervisor: Connect the VM +virtcontainers->+agent: CreateSandbox() +agent-->-virtcontainers: Sandbox Created +virtcontainers->+agent: CreateContainer() +agent-->-virtcontainers: Container Created +virtcontainers->shim-pod: Start Shim +shim->agent: ReadStdout() (blocking call) +shim->agent: ReadStderr() (blocking call) +shim->agent: WaitProcess() (blocking call) +Note left of virtcontainers: Container\nReady +virtcontainers-->Kata Runtime: End of CreateSandbox() +Kata Runtime-->Docker: End of create diff --git a/arch-images/kata-oci-exec.svg b/arch-images/kata-oci-exec.svg new file mode 100644 index 0000000000..1f3a1db88a --- /dev/null +++ b/arch-images/kata-oci-exec.svg @@ -0,0 +1,11 @@ +#Docker Exec +Docker->kata runtime: exec +kata runtime->virtcontainers: EnterContainer() +virtcontainers->agent: exec +agent->virtcontainers: Process started in the container +virtcontainers->shim: start shim +shim->agent: ReadStdout() +shim->agent: ReadStderr() +shim->agent: WaitProcess() +virtcontainers->kata runtime: End of EnterContainer() +kata runtime-->Docker: End of execDockerDockerkata runtimekata runtimevirtcontainersvirtcontainersagentagentshimshimexecEnterContainer()execProcess started in the containerstart shimReadStdout()ReadStderr()WaitProcess()End of EnterContainer()End of exec \ No newline at end of file diff --git a/arch-images/kata-oci-exec.txt b/arch-images/kata-oci-exec.txt new file mode 100644 index 0000000000..cf693f1c16 --- /dev/null +++ b/arch-images/kata-oci-exec.txt @@ -0,0 +1,20 @@ +Title: Docker Exec +participant Docker +participant kata-runtime +participant virtcontainers +participant shim +participant hypervisor +participant agent +participant proxy + +#Docker Exec +Docker->kata-runtime: exec +kata-runtime->virtcontainers: EnterContainer() +virtcontainers->agent: exec +agent->virtcontainers: Process started in the container +virtcontainers->shim: start shim +shim->agent: ReadStdout() +shim->agent: ReadStderr() +shim->agent: WaitProcess() +virtcontainers->kata-runtime: End of EnterContainer() +kata-runtime-->Docker: End of exec diff --git a/arch-images/kata-oci-start.svg b/arch-images/kata-oci-start.svg new file mode 100644 index 0000000000..63a0b105b6 --- /dev/null +++ b/arch-images/kata-oci-start.svg @@ -0,0 +1,9 @@ +Docker->Kata Runtime: start +Kata Runtime->virtcontainers: StartSandbox() +Note left of virtcontainers: Sandbox\nRunning +virtcontainers->agent: StartContainer() +agent-->virtcontainers: Container Started +Note left of virtcontainers: Container-pod\nRunning +virtcontainers->virtcontainers: Execute PostStart Hooks +virtcontainers-->Kata Runtime: End of StartSandbox() +Kata Runtime-->Docker: End of startDockerDockerKata RuntimeKata RuntimevirtcontainersvirtcontainersagentagentstartStartSandbox()SandboxRunningStartContainer()Container StartedContainer-podRunningExecute PostStart HooksEnd of StartSandbox()End of start \ No newline at end of file diff --git a/arch-images/kata-oci-start.txt b/arch-images/kata-oci-start.txt new file mode 100644 index 0000000000..aeaa132714 --- /dev/null +++ b/arch-images/kata-oci-start.txt @@ -0,0 +1,20 @@ +Title: Docker Start +participant Docker +participant Kata Runtime +participant virtcontainers +participant hypervisor +participant agent +participant shim-pod +participant shim-ctr +participant proxy + +#Docker Start +Docker->Kata Runtime: start +Kata Runtime->virtcontainers: StartSandbox() +Note left of virtcontainers: Sandbox\nRunning +virtcontainers->+agent: StartContainer() +agent-->-virtcontainers: Container Started +Note left of virtcontainers: Container-pod\nRunning +virtcontainers->virtcontainers: Execute PostStart Hooks +virtcontainers-->Kata Runtime: End of StartSandbox() +Kata Runtime-->Docker: End of start diff --git a/architecture.md b/architecture.md index 64b0149b41..a51bfeb1d0 100644 --- a/architecture.md +++ b/architecture.md @@ -176,7 +176,7 @@ For example, when `docker run -ti ubuntu date` is run: - The agent will create a new confined context to run the specified command in (`date` in this example). - The agent will then execute the command (`date` in this example) inside this - new context, first setting the root filesystem to the expected Ubuntu* root + new context, first setting the root filesystem to the expected Ubuntu\* root filesystem. ##### Initrd image @@ -286,6 +286,8 @@ container. In Kata Containers, this is handled as follows: Now the `exec`'ed process is running within the VM, sharing `uts`, `pid`, `mnt` and `ipc` namespaces with the container process. +![the picture](arch-images/docker-exec.svg) + #### [`kill`](https://github.com/kata-containers/runtime/blob/master/cli/kill.go) When sending the OCI `kill` command, the container runtime should send a @@ -347,9 +349,6 @@ process representing this container process. 4. Communicate with `kata-agent` (connecting the proxy) to remove the container configuration from the VM. 4. Return container status. -![CRIO workflow](arch-images/kata-crio-uml.png) - - ## Proxy Communication with the VM can be achieved by either `virtio-serial` or, if the host