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: {}