Create and Manage Pod with multiple containers using Podman

Test Environment
Fedora 32 installed
Podman installed
What is Podman Pod –
Podman Pod is a concept based Kubernetes Pod. A Pod is basic unit that can be deployed in Kubernetes. Its a group of containers that are launched together provide applicaiton services which are tightly coupled or inter dependent. A Pod can contain a single container or multiple containers related to an application to launch them as differennt services of an application
Benefits of Pod –
– They are grouped together to share the same resources and namespace
– Used to deploy a set of services as a single application
– Easy to manage an entire applicaton as single entity
– Specific services of the application can be exposed
Here in this article we will see how we Create and Manage Pods with multiple containers. We will create a single pod and launch a set of containers within the pod.
These containers with a pod can now be managed as a single entity. We can start or stop the containers within a single pod and check the statistics of the pod with multiple containers as a single entity. We will also generate pod definition in yaml format which can further later be used in Kubernetes Orchestration Platform to launch as an application. If you are interested in watching the video. Here is the youtube video for the below mentioned step by step procedure.
Procedure –
Step1: Create a Pod
Here in this step we will create an empty pod named ‘busypod’. This pod will be used in next step launch containers from within it.
Create a Pod using Podman |
---|
[admin@fed32 ~]$ podman pod create --name busypod |
Step2: Launch Containers within a Pod
Once the empty pod is created in Step1 we will use that to launch multiple busybox containers within it as shown below. For each container that you run within the pod you will be provided with a bash terminal for that container which you can exit to stop that container.
Launch multiple busybox containers within a pod |
---|
[admin@fed32 ~]$ podman run -it --pod busypod --name busy11 busybox [admin@fed32 ~]$ podman run -it --pod busypod --name busy12 busybox [admin@fed32 ~]$ podman run -it --pod busypod --name busy13 busybox |
Step3: Start the Pod to launch all the containers within it
Now, we have a pod with multiple contianers within it in stopped state. We can start all the containers within a pod using the below command.
Start Pod busypod |
---|
[admin@fed32 ~]$ podman pod start busypod |
Step4: Get the statistics of the Pod containers
We can verify the CPU, Memory and IOPS utilization for the pod with the stats commands as shown below.
Get the statistics of the pod busypod |
---|
[admin@fed32 ~]$ podman pod stats busypod POD CID NAME CPU % MEM USAGE/ LIMIT MEM % NET IO BLOCK IO PIDS c558fdab7202 f892485b3b82 busy11 2.64% 1.053MB / 2.047GB 0.05% -- / -- -- / -- 1 c558fdab7202 66165196f025 busy12 2.92% 1.061MB / 2.047GB 0.05% -- / -- -- / -- 1 c558fdab7202 9ce5fd89107a busy13 2.50% 1.049MB / 2.047GB 0.05% -- / -- -- / -- 1 c558fdab7202 c6704d206539 c558fdab7202-infra 2.84% 761.9kB / 2.047GB 0.04% -- / -- -- / -- 1 |
Step5: Stop the Pod to shutdown all the containers within it
Once, we have verified the statistics of the pod we can stop the pod to which will stop all the containers within as shown below.
Stop pod busypod |
---|
[admin@fed32 ~]$ podman pod stop busypod |
Step6: Genereate Kubernetes Pod yaml defninition
As a last step, we can generate pod yaml defnition as shown below which can be used in Kubernetes orchestration engines to launch pod in that environment. This will be really useful if you want to migrate the pods that you created in your local system to a orchestration engine like kubernetes for rollout.
Generate yaml definition for the pod busypod |
---|
[admin@fed32 ~]$ podman generate kube busypod # 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-2.2.0 apiVersion: v1 kind: Pod metadata: creationTimestamp: "2020-12-24T00:41:43Z" labels: app: busypod name: busypod spec: containers: - command: - sh env: - name: PATH value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - name: TERM value: xterm - name: container value: podman - name: HOSTNAME value: busypod image: docker.io/library/busybox:latest name: busy12 resources: {} securityContext: allowPrivilegeEscalation: true capabilities: drop: - CAP_MKNOD - CAP_NET_RAW - CAP_AUDIT_WRITE privileged: false readOnlyRootFilesystem: false seLinuxOptions: {} stdin: true tty: true workingDir: / - command: - sh env: - name: PATH value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - name: TERM value: xterm - name: container value: podman - name: HOSTNAME value: busypod image: docker.io/library/busybox:latest name: busy13 resources: {} securityContext: allowPrivilegeEscalation: true capabilities: drop: - CAP_MKNOD - CAP_NET_RAW - CAP_AUDIT_WRITE privileged: false readOnlyRootFilesystem: false seLinuxOptions: {} stdin: true tty: true workingDir: / - command: - sh env: - name: PATH value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - name: TERM value: xterm - name: container value: podman - name: HOSTNAME value: busypod image: docker.io/library/busybox:latest name: busy11 resources: {} securityContext: allowPrivilegeEscalation: true capabilities: drop: - CAP_MKNOD - CAP_NET_RAW - CAP_AUDIT_WRITE privileged: false readOnlyRootFilesystem: false seLinuxOptions: {} stdin: true tty: true workingDir: / restartPolicy: Never status: {} --- metadata: creationTimestamp: null spec: {} status: loadBalancer: {} |
Hope you enjoyed reading this article. Thank you..
Leave a Reply
You must be logged in to post a comment.