oracular (1) podman-kube-generate.1.gz

Provided by: podman_5.0.3+ds1-5ubuntu1_amd64 bug

NAME

       podman-kube-generate - Generate Kubernetes YAML based on containers, pods or volumes

SYNOPSIS

       podman kube generate [options] container... | pod... | volume...

DESCRIPTION

       podman  kube  generate  generates  Kubernetes  YAML  (v1  specification)  from Podman containers, pods or
       volumes. Regardless of whether the input is for containers or pods, Podman generates the specification as
       a Pod by default. The input may be in the form of one or more containers, pods or volumes names or IDs.

       Podman Containers or Pods

       Volumes appear in the generated YAML according to two different volume types. Bind-mounted volumes become
       hostPath volume types and named volumes become persistentVolumeClaim  volume  types.  Generated  hostPath
       volume types are one of three subtypes depending on the state of the host path: DirectoryOrCreate when no
       file or directory exists at the host, Directory when host path is a directory, or File when host path  is
       a file. The value for claimName for a persistentVolumeClaim is the name of the named volume registered in
       Podman.

       Potential name conflicts between volumes are avoided by using a standard naming scheme  for  each  volume
       type.  The  hostPath  volume types are named according to the path on the host machine, replacing forward
       slashes with hyphens less any leading and trailing forward slashes. The special case  of  the  filesystem
       root,  /,  translates  to  the  name  root. Additionally, the name is suffixed with -host to avoid naming
       conflicts with persistentVolumeClaim volumes. Each persistentVolumeClaim volume type uses the name of its
       associated named volume suffixed with -pvc.

       Note  that  if an init container is created with type once and the pod has been started, it does not show
       up in the generated kube YAML as once type init containers are deleted after they are run. If the pod has
       only  been  created and not started, it is in the generated kube YAML.  Init containers created with type
       always are always generated in the kube YAML as they are never deleted, even after running to completion.

       Note: When using volumes and generating a  Kubernetes  YAML  for  an  unprivileged  and  rootless  podman
       container on an SELinux enabled system,  one of the following options must be completed:
         * Add the "privileged: true" option to the pod spec
         * Add type: spc_t under the securityContext seLinuxOptions in the pod spec
         * Relabel the volume via the CLI command chcon -t container_file_t -R <directory>

       Once  completed,  the  correct  permissions  are  in place to access the volume when the pod/container is
       created in a Kubernetes cluster.

       Note that the generated Kubernetes YAML file can be  used  to  re-run  the  deployment  via  podman-play-
       kube(1).

       Note  that if the pod being generated was created with the --infra-name flag set, then the generated kube
       yaml will have the io.podman.annotations.infra.name set  where  the  value  is  the  name  of  the  infra
       container set by the user.

       Also note that both Deployment and DaemonSet can only have restartPolicy set to Always.

OPTIONS

   --filename, -f=filename
       Output  to the given file instead of STDOUT. If the file already exists, kube generate refuses to replace
       it and returns an error.

   --podman-only
       Add podman-only reserved annotations in generated YAML file (Cannot be used by Kubernetes)

   --replicas, -r=replica count
       The value to set replicas to when generating a Deployment kind.  Note: this can  only  be  set  with  the
       option --type=deployment.

   --service, -s
       Generate  a  Kubernetes  service object in addition to the Pods. Used to generate a Service specification
       for the corresponding Pod output. In  particular,  if  the  object  has  portmap  bindings,  the  service
       specification  includes a NodePort declaration to expose the service. A random port is assigned by Podman
       in the specification.

   --type, -t=pod | deployment | daemonset
       The Kubernetes kind to generate in the YAML file. Currently, the only supported Kubernetes specifications
       are Pod, Deployment and DaemonSet. By default, the Pod specification is generated.

EXAMPLES

       Create Kubernetes Pod YAML for the specified container.

       $ podman kube generate some-mariadb
       # Save the output of this file and use kubectl create -f to import
       # it into Kubernetes.
       #
       # Created with podman-4.8.2

       # NOTE: If you generated this yaml from an unprivileged and rootless podman container on an SELinux
       # enabled system, check the podman generate kube man page for steps to follow to ensure that your pod/container
       # has the right permissions to access the volumes added.
       ---
       apiVersion: v1
       kind: Pod
       metadata:
         creationTimestamp: "2024-01-09T02:24:55Z"
         labels:
           app: some-mariadb-pod
         name: some-mariadb-pod
       spec:
         containers:
         - args:
           - mariadbd
           env:
           - name: MARIADB_ROOT_PASSWORD
             value: x
           image: docker.io/library/mariadb:10.11
           name: some-mariadb
           ports:
           - containerPort: 3306
             hostPort: 34891
           volumeMounts:
           - mountPath: /var/lib/mysql
             name: mariadb_data-pvc
         volumes:
         - name: mariadb_data-pvc
           persistentVolumeClaim:
             claimName: mariadb_data

       Create Kubernetes Deployment YAML with 3 replicas for the specified container.

       $ podman kube generate --type deployment --replicas 3 dep-ct
       r
       # Save the output of this file and use kubectl create -f to import
       # it into Kubernetes.
       #
       # Created with podman-4.5.0-dev
       apiVersion: apps/v1
       kind: Deployment
       metadata:
         creationTimestamp: "2023-03-27T20:45:08Z"
         labels:
           app: dep-ctr-pod
         name: dep-ctr-pod-deployment
       spec:
         replicas: 3
         selector:
           matchLabels:
             app: dep-ctr-pod
         template:
           metadata:
             annotations:
               io.podman.annotations.ulimit: nofile=524288:524288,nproc=127332:127332
             creationTimestamp: "2023-03-27T20:45:08Z"
             labels:
               app: dep-ctr-pod
             name: dep-ctr-pod
           spec:
             containers:
             - command:
               - top
               image: docker.io/library/alpine:latest
               name: dep-ctr

       Create  Kubernetes  Pod YAML for the specified container with the host directory /home/user/my-data bind-
       mounted onto the container path /volume.

       $ podman kube generate my-container-with-bind-mounted-data
       # Save the output of this file and use kubectl create -f to import
       # it into Kubernetes.
       #
       # Created with podman-3.1.0-dev
       apiVersion: v1
       kind: Pod
       metadata:
         creationTimestamp: "2021-03-18T16:26:08Z"
         labels:
           app: my-container-with-bind-mounted-data
         name: my-container-with-bind-mounted-data
       spec:
         containers:
         - command:
           - /bin/sh
           image: docker.io/library/alpine:latest
           name: test-bind-mount
           volumeMounts:
           - mountPath: /volume
             name: home-user-my-data-host
         restartPolicy: Never
         volumes:
         - hostPath:
             path: /home/user/my-data
             type: Directory
           name: home-user-my-data-host

       Create Kubernetes Pod YAML for the specified container with named volume priceless-data mounted onto  the
       container path /volume.

       $ podman kube generate my-container-using-priceless-data
       # Save the output of this file and use kubectl create -f to import
       # it into Kubernetes.
       #
       # Created with podman-3.1.0-dev
       apiVersion: v1
       kind: Pod
       metadata:
         creationTimestamp: "2021-03-18T16:26:08Z"
         labels:
           app: my-container-using-priceless-data
         name: my-container-using-priceless-data
       spec:
         containers:
         - command:
           - /bin/sh
           image: docker.io/library/alpine:latest
           name: test-bind-mount
           volumeMounts:
           - mountPath: /volume
             name: priceless-data-pvc
         restartPolicy: Never
         volumes:
         - name: priceless-data-pvc
           persistentVolumeClaim:
             claimName: priceless-data

       Create Kubernetes Pod YAML for the specified pod and include a service.

       $ sudo podman kube generate -s demoweb
       # Save the output of this file and use kubectl create -f to import
       # it into Kubernetes.
       #
       # Created with podman-0.12.2-dev
       apiVersion: v1
       kind: Pod
       metadata:
         creationTimestamp: 2018-12-18T15:16:06Z
         labels:
           app: demoweb
         name: demoweb-libpod
       spec:
         containers:
         - command:
           - python3
           - /root/code/graph.py
           image: quay.io/baude/demoweb:latest
           name: practicalarchimedes
           tty: true
           workingDir: /root/code
       ---
       apiVersion: v1
       kind: Service
       metadata:
         creationTimestamp: 2018-12-18T15:16:06Z
         labels:
           app: demoweb
         name: demoweb-libpod
       spec:
         ports:
         - name: "8050"
           nodePort: 31269
           port: 8050
           targetPort: 0
         selector:
           app: demoweb
         type: NodePort
       status:
         loadBalancer: {}

SEE ALSO

       podman(1), podman-container(1), podman-pod(1), podman-kube-play(1), podman-kube-down(1)

HISTORY

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

                                                                                         podman-kube-generate(1)