Provided by: podman_3.4.4+ds1-1ubuntu1.22.04.3_amd64 bug

NAME

       podman-play-kube - Create containers, pods or volumes based on Kubernetes YAML

SYNOPSIS

       podman play kube [options] file.yml|-

DESCRIPTION

       podman  play  kube  will  read  in  a  structured  file  of  Kubernetes  YAML.  It will then recreate the
       containers, pods or volumes described in the YAML.  Containers within a pod are then started and  the  ID
       of  the new Pod or the name of the new Volume is output. If the yaml file is specified as "-" then podman
       play kube will read the YAML file from stdin.  Using the --down command line option, it is  also  capable
       of  tearing down the pods created by a previous run of podman play kube.  Ideally the input file would be
       one created by Podman (see podman-generate-kube(1)).  This would guarantee a smooth import  and  expected
       results.

       Currently, the supported Kubernetes kinds are: - Pod - Deployment - PersistentVolumeClaim - ConfigMap

       Kubernetes Pods or Deployments

       Only  two  volume  types are supported by play kube, the hostPath and persistentVolumeClaim volume types.
       For the hostPath volume type, only the   default  (empty),  DirectoryOrCreate,  Directory,  FileOrCreate,
       File,  and  Socket  subtypes  are  supported.  The CharDevice and BlockDevice subtypes are not supported.
       Podman interprets the value of hostPath path as a file path when it contains at least one forward  slash,
       otherwise  Podman treats the value as the name of a named volume. When using a persistentVolumeClaim, the
       value for claimName is the name for the Podman named volume.

       Note: When playing a kube YAML with init containers, the init container will be created  with  init  type
       value always.

       Note: hostPath volume types created by play kube will be given an SELinux private label (Z)

       Note: If the :latest tag is used, Podman will attempt to pull the image from a registry. If the image was
       built locally with Podman or Buildah, it will have localhost as the domain, in that case, Podman will use
       the image from the local store even if it has the :latest tag.

       Kubernetes PersistentVolumeClaims

       A  Kubernetes PersistentVolumeClaim represents a Podman named volume. Only the PersistentVolumeClaim name
       is required by Podman to create a volume. Kubernetes annotations can be used to make use of the available
       options for Podman volumes.

              • volume.podman.io/driver

              • volume.podman.io/device

              • volume.podman.io/type

              • volume.podman.io/uid

              • volume.podman.io/gid

              • volume.podman.io/mount-options

       Play kube is capable of building images on the fly given the correct directory layout and Containerfiles.
       This option is not available for remote clients yet. Consider the following excerpt from a YAML file:

              apiVersion: v1
              kind: Pod
              metadata:
              spec:
                containers:
                - command:
                  - top
                  - name: container
                    value: podman
                  image: foobar

       If there is a directory named foobar in the current working directory with a file named Containerfile  or
       Dockerfile,  Podman  play  kube will build that image and name it foobar.  An example directory structure
       for this example would look like:

              |- mykubefiles
                  |- myplayfile.yaml
                  |- foobar
                       |- Containerfile

       The build will consider foobar to be the context directory for the build. If there is an image  in  local
       storage called foobar, the image will not be built unless the --build flag is used.

       Kubernetes ConfigMap

       Kubernetes ConfigMap can be referred as a source of environment variables in Pods or Deployments.

       For example ConfigMap defined in following YAML:

              apiVersion: v1
              kind: ConfigMap
              metadata:
                name: foo
              data:
                  FOO: bar

       can be referred in a Pod in following way:

              apiVersion: v1
              kind: Pod
              metadata:
              spec:
                containers:
                - command:
                  - top
                  name: container-1
                  image: foobar
                  envFrom:
                    - configMapRef:
                    name: foo
                    optional: false

       and as a result environment variable FOO will be set to bar for container container-1.

OPTIONS

   --authfile=path
       Path  of  the authentication file. Default is ${XDG_RUNTIME_DIR}/containers/auth.json, which is set using
       podman login.  If the authorization state is not found there, $HOME/.docker/config.json is checked, which
       is set using docker login.

       Note: You can also override the default path of the authentication file by setting the REGISTRY_AUTH_FILE
       environment variable. export REGISTRY_AUTH_FILE=path

   --build
       Build images even if they are found in the local storage.

   --cert-dir=path
       Use  certificates  at  path  (*.crt,   *.cert,   *.key)   to   connect   to   the   registry.   (Default:
       /etc/containers/certs.d) Please refer to containers-certs.d(5) for details. (This option is not available
       with the remote Podman client)

   --configmap=path
       Use  Kubernetes  configmap  YAML  at  path to provide a source for environment variable values within the
       containers of the pod.

       Note: The --configmap option can be used multiple times or a comma-separated list of paths can be used to
       pass multiple Kubernetes configmap YAMLs.

   --creds
       The [username[:password]] to use to authenticate with the registry if required.  If one  or  both  values
       are  not  supplied,  a  command  line  prompt  will appear and the value can be entered.  The password is
       entered without echo.

   --down
       Tears down the pods that were created by a previous run of play kube.  The  pods  are  stopped  and  then
       removed.  Any volumes created are left intact.

   --ip=IP address
       Assign  a static ip address to the pod. This option can be specified several times when play kube creates
       more than one pod.

   --log-driver=driver
       Set logging driver for all created containers.

   --mac-address=MAC address
       Assign a static mac address to the pod. This option can be specified several times when play kube creates
       more than one pod.

   --network=mode, --net
       Change the network mode of the pod. The host and bridge network mode should be  configured  in  the  yaml
       file.  Valid mode values are:

              • none:  Create  a network namespace for the container but do not configure network interfaces for
                it, thus the container has no network connectivity.

              • container:id: Reuse another container's network stack.

              • network: Connect to a user-defined network, multiple networks should be comma-separated.

              • ns:path: Path to a network namespace to join.

              • private: Create a new namespace for the container. This will use the bridge  mode  for  rootfull
                containers and slirp4netns for rootless ones.

              • slirp4netns[:OPTIONS,...]:  use  slirp4netns(1)  to  create  a  user  network stack. This is the
                default for rootless containers. It is possible to specify these additional options:

                • allow_host_loopback=true|false: Allow the slirp4netns to reach the host loopback IP (10.0.2.2,
                  which is added to /etc/hosts as host.containers.internal for  your  convenience).  Default  is
                  false.

                • mtu=MTU: Specify the MTU to use for this network. (Default is 65520).

                • cidr=CIDR: Specify ip range to use for this network. (Default is 10.0.2.0/24).

                • enable_ipv6=true|false: Enable IPv6. Default is false. (Required for outbound_addr6).

                • outbound_addr=INTERFACE:  Specify  the  outbound  interface slirp should bind to (ipv4 traffic
                  only).

                • outbound_addr=IPv4: Specify the outbound ipv4 address slirp should bind to.

                • outbound_addr6=INTERFACE: Specify the outbound interface slirp should bind  to  (ipv6  traffic
                  only).

                • outbound_addr6=IPv6: Specify the outbound ipv6 address slirp should bind to.

                • port_handler=rootlesskit:  Use  rootlesskit  for  port forwarding. Default.  Note: Rootlesskit
                  changes the source IP address of incoming packets to a IP address  in  the  container  network
                  namespace,  usually  10.0.2.100. If your application requires the real source IP address, e.g.
                  web server logs, use the slirp4netns port handler. The rootlesskit port handler is  also  used
                  for rootless containers when connected to user-defined networks.

                • port_handler=slirp4netns:  Use  the slirp4netns port forwarding, it is slower than rootlesskit
                  but preserves the correct source IP address. This port handler cannot be used for user-defined
                  networks.

   --quiet, -q
       Suppress output information when pulling images

   --seccomp-profile-root=path
       Directory path for seccomp profiles (default: "/var/lib/kubelet/seccomp"). (This option is not  available
       with the remote Podman client)

   --start=true|false
       Start the pod after creating it, set to false to only create it.

   --tls-verify=true|false
       Require  HTTPS  and  verify certificates when contacting registries (default: true). If explicitly set to
       true, then TLS verification will be used. If set to false, then TLS verification will not be used. If not
       specified, TLS verification will be used unless the target registry is listed as an insecure registry  in
       registries.conf.

   --help, -h
       Print usage statement

EXAMPLES

       Recreate the pod and containers as described in a file called demo.yml

              $ podman play kube demo.yml
              52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

       Recreate the pod and containers as described in a file demo.yml sent to stdin

              $ cat demo.yml | podman play kube -
              52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

       Teardown the pod and containers as described in a file demo.yml

              $  podman play kube --down demo.yml
              Pods stopped:
              52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6
              Pods removed:
              52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

       Provide  configmap-foo.yml  and  configmap-bar.yml  as  sources  for  environment  variables  within  the
       containers.

              $ podman play kube demo.yml --configmap configmap-foo.yml,configmap-bar.yml
              52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

              $ podman play kube demo.yml --configmap configmap-foo.yml --configmap configmap-bar.yml
              52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

       CNI network(s) can be specified as comma-separated list using --network

              $ podman play kube demo.yml --network cni1,cni2
              52182811df2b1e73f36476003a66ec872101ea59034ac0d4d3a7b40903b955a6

       Please take into account that CNI networks must be created first using podman-network-create(1).

SEE ALSO

       podman(1), podman-container(1), podman-pod(1), podman-generate-kube(1),  podman-play(1),  podman-network-
       create(1), containers-certs.d(5)

HISTORY

       December 2018, Originally compiled by Brent Baude (bbaude at redhat dot com)

                                                                                           podman-play-kube(1)()