Créer un pod et l'exporter dans un fichier de définition Kubernetes

Attention : Contrairement à l’exécution de containers de manière standard sans droits root sur Podman, la création et le management de pods nécessitent des droits root (sudo) à l'heure actuelle.

  • Commençons par créer un pod vide :
$ sudo podman pod create --name demo

Vous pouvez aussi créer un pod lors de la première exécution d'un container avec le mot clé "new" dans le flag "--pod" :

$ sudo podman run -dt --pod new:demo -p 8080:80 --name nginx-demo docker.io/library/nginx
  • Listons les pods disponibles :
$ sudo podman pod list

POD ID         NAME   STATUS    CREATED          # OF CONTAINERS   INFRA ID
b57d1832894f   demo   Running   1 minutes ago   1                 2ce0af493a0c

La présence d'un container au sein de ce pod "vide" est normal, pour chaque pod Podman, un container appelé "infra" est crée. Ce conteneur ne fait rien (sleep). Son but est de contenir les namespaces associés au pod et de permettre à Podman de connecter d'autres conteneurs à ce pod. Cela vous permet de démarrer et d'arrêter les conteneurs à l'intérieur du pod tout permettant à ce pod de rester en fonctionnement, alors que si le conteneur primaire contrôlait le pod, cela ne serait pas possible, le pod serait à l'arrêt.

  • Attacher un nouveau container à ce pod :
$ sudo podman run -dt --pod demo --name nginx-demo docker.io/library/nginx
$ sudo podman pod ps

POD ID         NAME   STATUS    CREATED          # OF CONTAINERS   INFRA ID
b57d1832894f   demo   Running   16 minutes ago   2                 2ce0af493a0c
$ sudo podman ps -a --pod

CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS            PORTS  NAMES               POD
302dc5040c15  docker.io/library/nginx:latest  nginx -g daemon o...  2 seconds ago   Up 2 seconds ago         nginx-demo          b57d1832894f
2ce0af493a0c  k8s.gcr.io/pause:3.1                                  15 minutes ago  Up 5 minutes ago         b57d1832894f-infra  b57d1832894f
  • A partir de ce pod en état de fonctionnement, vous pouvez exporter une fichier de définition Kubernetes. Vous pouvez ainsi déployer votre pod créé avec Podman sur votre cluster Kubernetes.
$ sudo podman generate kube demo > demo.yml
# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-1.3.1
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2019-05-27T14:15:37Z"
  labels:
    app: demo
  name: demo
spec:
  containers:
  - command:
    - nginx
    - -g
    - daemon off;
    env:
    - name: PATH
      value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    - name: TERM
      value: xterm
    - name: HOSTNAME
    - name: container
      value: podman
    - name: NGINX_VERSION
      value: 1.15.12-1~stretch
    - name: NJS_VERSION
      value: 1.15.12.0.3.1-1~stretch
    image: docker.io/library/nginx:latest
    name: nginx-demo
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
    tty: true
    workingDir: /
status: {}