Pods com Podman

O conceito de pod foi introduzido pelo Kubernetes. Um pod é um grupo de contêineres que operam juntos. O Podman usa um conceito semelhante para gerenciar um grupo de contêineres em um servidor local. Todos os contêineres dentro do pod compartilham o mesmo namespace de rede, então eles podem se comunicar facilmente pelo localhost sem a necessidade de exportar nenhuma porta extra.

[ Hits: 5.476 ]

Por: Daniel Lara Souza em 14/10/2020 | Blog: http://danniel-lara.blogspot.com/


Pod



As pessoas associam Pods em execução ao Kubernetes. E quando eles executam contêineres em seus tempos de execução de desenvolvimento, eles nem mesmo pensam na função que os pods podem desempenhar - mesmo em um tempo de execução localizado.

A maioria das pessoas que vem do mundo Docker de execução de contêineres únicos, não imagina o conceito de execução de pods. Existem vários bons motivos para considerar o uso de pods localmente, além do uso de pods para agrupar naturalmente seus contêineres.

Por exemplo, suponha que você tenha vários contêineres que requerem o uso de um contêiner MariaDB. Mas você prefere não vincular esse banco de dados a uma rede roteável, em sua ponte ou mais longe. Usando um pod, você pode vincular ao localhost endereço do pod e todos os contêineres nesse pod poderão se conectar a ele devido ao espaço de nome de rede compartilhado.

O conceito de pod foi introduzido pelo Kubernetes. Os pods do Podman são semelhantes à definição do Kubernetes.
Linux: Pods com Podman
Cada pod do Podman inclui um contêiner "infra". Este contêiner não faz nada, mas vai dormir. Sua finalidade é manter os namespaces associados ao pod e permitir que o Podman conecte outros contêineres ao pod. Isso permite que você inicie e interrompa os contêineres no POD e o pod permanecerá em execução, onde, como se o contêiner principal controlasse o pod, isso não seria possível.

O infra-contêiner padrão é baseado na k8s.gcr.io/pauseimagem. A menos que você diga explicitamente o contrário, todos os pods terão um contêiner baseado na imagem padrão.

A maioria dos atributos que compõem o Pod são na verdade atribuídos ao contêiner "infra". Ligações de portas, valores cgroup-parent e namespaces de kernel são todos atribuídos ao contêiner "infra". É fundamental entender isso, porque uma vez que o pod é criado, esses atributos são atribuídos ao contêiner "infra" e não podem ser alterados.

Por exemplo, se você criar um pod e mais tarde decidir que deseja adicionar um contêiner que vincule novas portas, o Podman não poderá fazer isso. Você precisaria recriar o pod com as ligações de porta adicionais antes de adicionar o novo contêiner.

No diagrama acima, observe a caixa acima de cada contêiner, conmon, este é o monitor do contêiner. É um pequeno programa C, cujo trabalho é observar o processo primário do contêiner e, se o contêiner morrer, salve o código de saída. Ele também mantém aberto o TTY do contêiner, para que possa ser anexado posteriormente. Isso é o que permite que o Podman seja executado em modo separado (em segundo plano), para que o Podman possa sair, mas o conmon continue a ser executado. Cada contêiner tem sua própria instância de conmon.

Para usar pods com Podman, é fácil:

# podman pod [comando]

Onde podemos criar, reiniciar, excluir, listar.
Linux: Pods com Podman
Também tem a ver mais o que cada comando com podman pod faz:

# podman pod create --help
Linux: Pods com Podman
Bom, agora vamos subir uma aplicação em um pod no Podman, vamos usar algo simples, um banco de dados com MariaDB e um WordPress.

Bora lá, vamos criar o primeiro pod, vamos criar e já deixar uma porta publicada no caso a 8080 para a interna 80:

# podman pod create --name web -p 8080:80

Verificar:

# podman pod ls
Linux: Pods com Podman
Vamos agora rodar o nosso banco de dados em MariaDB já definindo senha, nome do banco:

# podman run \
-d --restart=always --pod=web \
-e MYSQL_ROOT_PASSWORD="centos" \
-e MYSQL_DATABASE="wp" \
-e MYSQL_USER="wordpress" \
-e MYSQL_PASSWORD="w0rdpr3ss" \
--name=dbwp mariadb


Agora vamos rodar o WordPress passando os paramentos de acesso ao banco local:

# podman run \
-d --restart=always --pod=web \
-e WORDPRESS_DB_NAME="wp" \
-e WORDPRESS_DB_USER="wordpress" \
-e WORDPRESS_DB_PASSWORD="w0rdpr3ss" \
-e WORDPRESS_DB_HOST="127.0.0.1" \
--name webwp wordpress


Agora vamos ver se está ok:

# podman ps -a --pod
Linux: Pods com Podman
Acesso via browser na porta 8080:
Linux: Pods com Podman
Pronto!
Linux: Pods com Podman
Bom, como falado no inicio, os pods do Podman são semelhantes à definição do Kubernetes e com isso posso gerar um arquivo YAML, o meu pod e exporta para um ambiente rodando Kubernetes.

Execute o comando:

# podman generate kube web >> web.yaml

E ao visualizar o conteúdo:

# cat web.yaml
# 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.6.4
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2020-09-30T00:26:23Z"
  labels:
    app: web
  name: web
spec:
  containers:
  - command:
    - mysqld
    env:
    - name: PATH
      value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    - name: TERM
      value: xterm
    - name: HOSTNAME
      value: web
    - name: container
      value: podman
    - name: GOSU_VERSION
      value: "1.12"
    - name: MARIADB_MAJOR
      value: "10.5"
    - name: MYSQL_DATABASE
      value: wp
    - name: MYSQL_USER
      value: wordpress
    - name: GPG_KEYS
      value: 177F4010FE56CA3336300305F1656F24C74CD1D8
    - name: MARIADB_VERSION
      value: 1:10.5.5+maria~focal
    - name: MYSQL_ROOT_PASSWORD
      value: centos
    - name: MYSQL_PASSWORD
      value: w0rdpr3ss
    image: docker.io/library/mariadb:latest
    name: dbwp
    ports:
    - containerPort: 80
      hostPort: 8080
      protocol: TCP
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
    workingDir: /
  - command:
    - apache2-foreground
    env:
    - name: PATH
      value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    - name: TERM
      value: xterm
    - name: HOSTNAME
      value: web
    - name: container
      value: podman
    - name: PHP_ASC_URL
      value: https://www.php.net/distributions/php-7.4.10.tar.xz.asc
    - name: WORDPRESS_DB_USER
      value: wordpress
    - name: PHP_INI_DIR
      value: /usr/local/etc/php
    - name: APACHE_ENVVARS
      value: /etc/apache2/envvars
    - name: PHP_LDFLAGS
      value: -Wl,-O1 -pie
    - name: GPG_KEYS
      value: 42670A7FE4D0441C8E4632349E4FDC074A4EF02D 5A52880781F755608BF815FC910DEB46F53EA312
    - name: PHP_MD5
    - name: APACHE_CONFDIR
      value: /etc/apache2
    - name: PHP_EXTRA_CONFIGURE_ARGS
      value: --with-apxs2 --disable-cgi
    - name: PHP_CPPFLAGS
      value: -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
    - name: PHP_SHA256
      value: c2d90b00b14284588a787b100dee54c2400e7db995b457864d66f00ad64fb010
    - name: WORDPRESS_SHA1
      value: d3316a4ffff2a12cf92fde8bfdd1ff8691e41931
    - name: WORDPRESS_DB_NAME
      value: wp
    - name: WORDPRESS_DB_PASSWORD
      value: w0rdpr3ss
    - name: WORDPRESS_DB_HOST
      value: 127.0.0.1
    - name: PHP_EXTRA_BUILD_DEPS
      value: apache2-dev
    - name: PHP_VERSION
      value: 7.4.10
    - name: PHP_URL
      value: https://www.php.net/distributions/php-7.4.10.tar.xz
    - name: WORDPRESS_VERSION
      value: 5.5.1
    - name: PHPIZE_DEPS
      value: "autoconf \t\tdpkg-dev \t\tfile \t\tg++ \t\tgcc \t\tlibc-dev \t\tmake
        \t\tpkg-config \t\tre2c"
    - name: PHP_CFLAGS
      value: -fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
    image: docker.io/library/wordpress:latest
    name: webwp
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
    workingDir: /var/www/html
status: {}


Também podemos subir em outra máquina com o Podman só copiar o arquivos ".yaml" e rodar o comando:

# podman play kube ./web.yaml

Espero que ajude.

Guia de Referência


   

Páginas do artigo
   1. Pod
Outros artigos deste autor

Virtualização com Proxmox VE

Configurando Docker Swarm no Rocky Linux

CloudStack no CentOS7 com KVM

Subindo um Cluster Kubernetes no CentOS 8

ISPConfig 3 no CentOS 6.4 64 bits

Leitura recomendada

Docker Swarm no CentOS 8

Configurando Docker Swarm no Rocky Linux

Introdução e Utilização do Docker

Kubespray - Kubernetes Multi Master

Usando Docker para encapsular qualquer aplicação no GNU/Linux

  
Comentários
[1] Comentário enviado por maurixnovatrento em 15/10/2020 - 13:23h

Muito Bom.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]




Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts