Optimizing for Production Workloads Dan Walsh Red Hat @rhatdan - - PowerPoint PPT Presentation

optimizing for production workloads dan walsh red hat
SMART_READER_LITE
LIVE PREVIEW

Optimizing for Production Workloads Dan Walsh Red Hat @rhatdan - - PowerPoint PPT Presentation

Optimizing for Production Workloads Dan Walsh Red Hat @rhatdan Samuel Ortiz @sameo PDF PDF Linux PDF Linux Containers What do you need to run a container Standard Definition of what makes up a container image. OCI Image Bundle


slide-1
SLIDE 1

Optimizing for Production Workloads Dan Walsh Red Hat @rhatdan Samuel Ortiz @sameo

slide-2
SLIDE 2
slide-3
SLIDE 3

PDF

slide-4
SLIDE 4

PDF Linux

slide-5
SLIDE 5

PDF Linux Containers

slide-6
SLIDE 6
slide-7
SLIDE 7

What do you need to run a container

  • Standard Definition of what makes up a container image.

○ OCI Image Bundle Definition

slide-8
SLIDE 8

What do you need to run a container`

  • Standard Definition of what makes up a container image.

○ OCI Image Bundle Definition

  • Mechanism to pull images from a container registry to the host

○ github.com/containers/image

slide-9
SLIDE 9

What do you need to run a container

  • Standard Definition of what a container image is

○ OCI Image Bundle Definition

  • Mechanism to pull images from a container registry to the host

○ github.com/containers/image

  • Ability to explode images onto COW file systems on disk

○ github.com/containers/storage

slide-10
SLIDE 10

What do you need to run a container

  • Standard Definition of what a container image is

○ OCI Image Bundle Definition

  • Mechanism to pull images from a container registry to the host

○ github.com/containers/image

  • Ability to explode images onto COW file systems on disk

○ github.com/containers/storage

  • Standard mechanism for running a container

○ OCI Runtime Spec (1.0) ○ runc default implementation of OCI Runtime Spec (Same tool Docker uses to run containers)

slide-11
SLIDE 11

#nobigfatdaemons

slide-12
SLIDE 12

What does OpenShift/Kubernetes need to run a container?

CRI - Container Runtime Interface

#nobigfatdaemons

slide-13
SLIDE 13

What does Kubernetes need to run a container?

CRI - Container Runtime Interface Kubernetes tells CRI to run Container Image:

#nobigfatdaemons

slide-14
SLIDE 14

What does Kubernetes need to run a container?

CRI - Container Runtime Interface Kubernetes tells CRI to run Container Image:

  • CRI needs to pull image from Container Registry

#nobigfatdaemons

slide-15
SLIDE 15

What does Kubernetes need to run a container?

CRI - Container Runtime Interface Kubernetes tells CRI to run Container Image:

  • CRI needs to pull image from Container Registry
  • CRI Needs to store image on COW File system

#nobigfatdaemons

slide-16
SLIDE 16

What does Kubernetes need to run a container?

CRI - Container Runtime Interface Kubernetes tells CRI to run Container Image:

  • CRI needs to pull image from Container Registry
  • CRI Needs to store image on COW File system
  • CRI Needs to execute OCI Runtime

#nobigfatdaemons

slide-17
SLIDE 17

Introducing CRI-O

CRI-O - OCI-based implementation of Kubernetes Container Runtime Interface

  • Scope tied to kubernetes CRI
  • Only supported user is kubernetes
  • Uses standard components as building blocks

“Nothing more, Nothing Less” #nobigfatdaemons

slide-18
SLIDE 18

#nobigfatdaemons

slide-19
SLIDE 19

#nobigfatdaemons

slide-20
SLIDE 20

#nobigfatdaemons

slide-21
SLIDE 21

S W A R M

#nobigfatdaemons

slide-22
SLIDE 22

S W A R M

#nobigfatdaemons

slide-23
SLIDE 23

M O B Y

#nobigfatdaemons

slide-24
SLIDE 24

M O B Y

#nobigfatdaemons

slide-25
SLIDE 25

M O B Y

#nobigfatdaemons

slide-26
SLIDE 26

#nobigfatdaemons

slide-27
SLIDE 27

Overview of additional components

  • ci-runtime-tools library is used to generate OCI configs for containers

#nobigfatdaemons

slide-28
SLIDE 28

Overview of additional components

  • ci-runtime-tools library is used to generate OCI configs for containers
  • CNI is used for setting up networking

○ Tested with Flannel, Weave and openshift-sdn

#nobigfatdaemons

slide-29
SLIDE 29

Overview of additional components

  • ci-runtime-tools library is used to generate OCI configs for containers
  • CNI is used for setting up networking

○ Tested with Flannel, Weave and openshift-sdn

  • conmon is a utility for:

○ Monitoring ○ Logging ○ Handling tty ○ Serving attach clients ○ Detecting and reporting OOM

#nobigfatdaemons

slide-30
SLIDE 30

Pod architecture (runc)

Infra Container

Pod

(ipc, net, pid namespaces, cgroups) Container A (runc) Container B (runc) conmon conmon conmon #nobigfatdaemons

slide-31
SLIDE 31

Pod architecture (Kata Containers)

Virtual Machine

(ipc, net, pid namespaces, cgroups) Container A (kata-runtime) Container B (kata-runtime) conmon conmon #nobigfatdaemons kata-shim kata-shim

Pod (net namespace, cgroups)

slide-32
SLIDE 32

Architecture

#nobigfatdaemons

slide-33
SLIDE 33

Status

  • All e2e, cri-tools, integration (>500) tests passing.

○ No PRs merged without passing all the tests.

#nobigfatdaemons

slide-34
SLIDE 34

Status

  • All e2e, cri-tools, integration (>500) tests passing.

○ No PRs merged without passing all the tests.

  • 1.0.7 (kube 1.7.x) supported.

○ Currently available as tech preview in Openshift 3.7 on RHEL, Tech Preview

#nobigfatdaemons

slide-35
SLIDE 35

Status

  • All e2e, cri-tools, integration (>500) tests passing.

○ No PRs merged without passing all the tests.

  • 1.0.7 (kube 1.7.x) supported.

○ Currently available as tech preview in Openshift 3.7 on RHEL, Tech Preview

  • 1.8.4 (kube 1.8.x) supported.

○ Available for OpenShift origin 3.8. ○ Running on Openshift Online Now

#nobigfatdaemons

slide-36
SLIDE 36

Status

  • All e2e, cri-tools, integration (>500) tests passing.

○ No PRs merged without passing all the tests.

  • 1.0.7 (kube 1.7.x) supported.

○ Currently available as tech preview in Openshift 3.7 on RHEL, Tech Preview

  • 1.8.4 (kube 1.8.x) supported.

○ Available for OpenShift origin 3.8. ○ Running on Openshift Online Now

  • 1.9.1-1 (kube 1.9.x) released.

○ CRI-O will be fully supported in OpenShift 3.9 along with docker.

#nobigfatdaemons

slide-37
SLIDE 37

Status

  • All e2e, cri-tools, integration (>500) tests passing.

○ No PRs merged without passing all the tests.

  • 1.0.7 (kube 1.7.x) supported.

○ Currently available as tech preview in Openshift 3.7 on RHEL, Tech Preview

  • 1.8.4 (kube 1.8.x) supported.

○ Available for OpenShift origin 3.8. ○ Running on Openshift Online Now

  • 1.9.1-1 (kube 1.9.x) released.

○ CRI-O will be fully supported in OpenShift 3.9 along with docker.

  • Goal for Openshift 3.10 is to fully support CRI-O by default.

#nobigfatdaemons

slide-38
SLIDE 38

Status

  • All e2e, cri-tools, integration (>500) tests passing.

○ No PRs merged without passing all the tests.

  • 1.0.7 (kube 1.7.x) supported.

○ Currently available as tech preview in Openshift 3.7 on RHEL, Tech Preview

  • 1.8.4 (kube 1.8.x) supported.

○ Available for OpenShift origin 3.8. ○ Running on Openshift Online Now

  • 1.9.1-1 (kube 1.9.x) released.

○ CRI-O will be fully supported in OpenShift 3.9 along with docker.

  • Goal for Openshift 3.10 is to fully support CRI-O by default.
  • Maintainers/contributors from Red Hat, Intel, Lyft, SUSE and many others.

#nobigfatdaemons

slide-39
SLIDE 39

Status

CRI-O is now powering nodes on OpenShift Online.

#nobigfatdaemons

slide-40
SLIDE 40

" CRI-O just works for them, so they haven’t had much to say"

#nobigfatdaemons

slide-41
SLIDE 41

Making running containers in production

boring

#nobigfatdaemons

slide-42
SLIDE 42

#nobigfatdaemons

slide-43
SLIDE 43

What else does OpenShift need?

  • Ability to build container images
  • Ability to push container images to container registries

#nobigfatdaemons

slide-44
SLIDE 44

#nobigfatdaemons

slide-45
SLIDE 45

Introducing Buildah

https://github.com/projectatomic/buildah

#nobigfatdaemons

slide-46
SLIDE 46

Coreutils for building containers. Simple interface

#nobigfatdaemons

slide-47
SLIDE 47

Coreutils for building containers. Simple interface # ctr=$(buildah from fedora)

#nobigfatdaemons

slide-48
SLIDE 48

Coreutils for building containers. Simple interface # ctr=$(buildah from fedora) # mnt=$(buildah mount $ctr)

#nobigfatdaemons

slide-49
SLIDE 49

#nobigfatdaemons

slide-50
SLIDE 50

Coreutils for building containers. Simple interface # ctr=$(buildah from fedora) # mnt=$(buildah mount $ctr) # cp -R src $mnt

#nobigfatdaemons

slide-51
SLIDE 51

Coreutils for building containers. Simple interface # ctr=$(buildah from fedora) # mnt=$(buildah mount $ctr) # cp -R src $mnt # dnf install --installroot=$mnt httpd

#nobigfatdaemons

slide-52
SLIDE 52

Coreutils for building containers. Simple interface # ctr=$(buildah from fedora) # mnt=$(buildah mount $ctr) # cp -R src $mnt # dnf install --installroot=$mnt httpd # make install DESTDIR=$mnt

#nobigfatdaemons

slide-53
SLIDE 53

Coreutils for building containers. Simple interface # ctr=$(buildah from fedora) # mnt=$(buildah mount $ctr) # cp -R src $mnt # dnf install --installroot=$mnt httpd # make install DESTDIR=$mnt # buildah config --enrtrypoint=/usr/sbin/test.sh --env foo=bar $ctr

#nobigfatdaemons

slide-54
SLIDE 54

Coreutils for building containers. Simple interface # ctr=$(buildah from fedora) # mnt=$(buildah mount $ctr) # cp -R src $mnt # dnf install --installroot=$mnt httpd # make install DESTDIR=$mnt # buildah config --enrtrypoint=/usr/sbin/test.sh --env foo=bar $ctr # buildah commit $ctr myhttpd

#nobigfatdaemons

slide-55
SLIDE 55

Coreutils for building containers. Simple interface # ctr=$(buildah from fedora) # mnt=$(buildah mount $ctr) # cp -R src $mnt # dnf install --installroot=$mnt httpd # make install DESTDIR=$mnt # buildah config --enrtrypoint=/usr/sbin/test.sh --env foo=bar $ctr # buildah commit $ctr myhttpd # buildah push myhttpd docker://rhatdan/myhttpd

#nobigfatdaemons

slide-56
SLIDE 56

Dan Wait!

#nobigfatdaemons

slide-57
SLIDE 57

Dan Wait! What about Dockerfile?????

#nobigfatdaemons

slide-58
SLIDE 58

Buildah also supports Dockerfile buildah build-using-dockerfile -f Dockerfile .

#nobigfatdaemons

slide-59
SLIDE 59

Buildah also supports Dockerfile buildah build-using-dockerfile -f Dockerfile . Or for those lazy ones: buildah bud -f Dockerfile .

#nobigfatdaemons

slide-60
SLIDE 60

What about other formats for the scripting language?

#nobigfatdaemons

slide-61
SLIDE 61

What about other formats for the scripting language?

BASH

#nobigfatdaemons

slide-62
SLIDE 62

What about other formats for the scripting language?

BASH

We want others to build higher level tools on Buildah.

#nobigfatdaemons

slide-63
SLIDE 63

What about other formats for the scripting language?

BASH

We want others to build higher level tools on Buildah. Working to make OpenShift use Buildah for S2I containers rather then use Docker.

#nobigfatdaemons

slide-64
SLIDE 64

What about other formats for the scripting language?

BASH

We want others to build higher level tools on Buildah. Working to make OpenShift use Buildah for S2I containers rather then use Docker. Want to work with Ansible-containers to use buildah for containers as well.

#nobigfatdaemons

slide-65
SLIDE 65

What else does OpenShift need?

  • Ability to diagnose problems on the host
  • If you don’t use Docker to run the containers, how does an admin discover what is going on in his Container

runtime, without the docker CLI? #nobigfatdaemons

slide-66
SLIDE 66

Introducing podman part of the libpod effort

podman is tool for managing POD/Containers based on the Docker CLI

https://github.com/projectatomic/libpod

#nobigfatdaemons

slide-67
SLIDE 67

Introducing podman

podman is tool for managing POD/Containers based on the Docker CLI # podman ps -a #nobigfatdaemons

https://github.com/projectatomic/libpod

slide-68
SLIDE 68

Introducing podman

podman is tool for managing POD/Containers based on the Docker CLI # podman ps -a # podman run -ti fedora sleep 2000 #nobigfatdaemons

https://github.com/projectatomic/libpod

slide-69
SLIDE 69

Introducing podman

podman is tool for managing POD/Containers based on the Docker CLI # podman ps -a # podman run -ti fedora sleep 2000 # podman exec -ti fedora sh #nobigfatdaemons

https://github.com/projectatomic/libpod

slide-70
SLIDE 70

Introducing podman

podman is tool for managing POD/Containers based on the Docker CLI # podman ps -a # podman run -ti fedora sleep 2000 # podman exec -ti fedora sh # podman images ... #nobigfatdaemons

https://github.com/projectatomic/libpod

slide-71
SLIDE 71

Introducing Skopeo

https://github.com/projectatomic/skopeo

#nobigfatdaemons

slide-72
SLIDE 72

Skopeo

  • $ skopeo inspect docker://docker.io/fedora
  • $ skopeo copy docker://busybox:1-glibc atomic:myns/unsigned:streaming

$ skopeo copy docker://busybox:latest dir:existingemptydirectory $ skopeo copy docker://busybox:latest oci:busybox_ocilayout:latest

  • $ skopeo delete docker://localhost:5000/imagename:latest

#nobigfatdaemons

slide-73
SLIDE 73

Questions

Blog: https://medium.com/cri-o Github:

  • https://github.com/kubernetes-incubater/cri-o
  • https://github.com/projectatomic/buildah
  • https://github.com/projectatomic/skopeo
  • https://github.com/projectatomic/libpod (podman)
  • https://github.com/containers/storage
  • https://github.com/containers/image

IRC: freenode: #cri-o IRC: freenode: #podman Site: https://cri-o.io