Home » Квадлеты могут заставить меня наконец отказаться от использования docker-compose · Майор Хейден

Квадлеты могут заставить меня наконец отказаться от использования docker-compose · Майор Хейден


у меня есть много написано о контейнерах в этом блоге. Почему я так люблю контейнеры?

  • Они начинают быстро
  • Они делают ваши рабочие нагрузки портативными
  • Они отключают ваш стек приложений от операционной системы, которая работает под ним.
  • Вы можете отправить свое приложение через CI как единый образ контейнера.
  • Вы можете изолировать рабочие нагрузки в сети и ограничить использование их ресурсов, подобно виртуальной машине.

Тем не менее, я все еще зависим от docker-compose. Может ли подман четверки изменить это?

Да, я думаю, что они могут.

Podman представил поддержку квадлетов в версии 4.4, и это более простой способ позволить systemd управлять вашими контейнерами. Раньше существовала возможность заставить podman генерировать файлы модулей systemd, но они были громоздкими и полны параметров командной строки podman внутри файла модуля. Эти файлы модулей было нелегко редактировать или даже анализировать на глаз.

Квадлеты упрощают эту задачу, предоставляя простой файл в стиле ini, который можно легко читать и редактировать. Позже в эту публикацию в блоге будут включены некоторые квадлеты, но вот пример для WordPress:

[Unit]
Description=WordPress Quadlet

[Container]
Image=docker.io/library/wordpress:fpm
ContainerName=wordpress
AutoUpdate=registry
EnvironmentFile=/home/core/.config/containers/containers-environment
Volume=wordpress.volume:/var/www/html
Network=wordpress.network

[Service]
Restart=always
TimeoutStartSec=900

[Install]
WantedBy=caddy.service multi-user.target default.target

Много строк внизу [Container] должен показаться знакомым большинству читателей, которые раньше работали с контейнерами. Однако здесь есть что-то новое.

Проверьте AutoUpdate=registry линия. Это говорит podman о необходимости регулярно обновлять ваш контейнер с помощью вышестоящего реестра контейнеров. я использовал сторожевая башня в прошлом для этого, но для этого требуется привилегированный контейнер, и это еще одна внешняя зависимость.

Также в самом конце вы увидите WantedBy линия. Это отличное место для настройки зависимостей контейнера. В этом примере контейнер, который запускает caddy (веб-сервер) не может запуститься, пока WordPress не заработает.

Нельзя отрицать, что docker-compose — потрясающий инструмент. Вы указываете желаемый результат, указываете ему вызвать контейнеры, и он переводит контейнеры в указанное вами состояние. Он обрабатывает тома, сети и сложную конфигурацию без особых усилий. Файлы YAML также довольно легко читаются.

Однако, как и в случае со сторожевой башней, это еще одна внешняя зависимость.

Read more:  BAYU 2 PRO от KickoffLand :: Kicktraq

Мои развертывания контейнеров часто выполняются во время загрузки экземпляра, и после этого я не вношу слишком много изменений. Я обнаружил, что использую docker-compose для первоначального развертывания, а затем больше им не пользовался.

Почему бы не удалить его полностью и не использовать то, что уже встроено в CoreOS?

Прежде чем мы начнем, нам понадобится несколько вещей:

  • Легко читать бутан конфигурация, которая превращается в крошечный зажигание конфигурация для CoreOS
  • Некоторые четверки
  • Дополнительная конфигурация системы
  • Облачный провайдер с образами CoreOS (с использованием ВУЛТР для этого)

Я упаковал все эти предметы в свой Квадлеты-WordPress репозиторий, чтобы упростить задачу. Начните с просмотра конфиг.бутан файл.

Давайте разберемся здесь. Прежде всего, мы добавляем ключ ssh для значения по умолчанию. core пользователь.

variant: fcos
version: 1.5.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDyoH6gU4lgEiSiwihyD0Rxk/o5xYIfA3stVDgOGM9N0

Далее мы включаем podman-auto-update.timer поэтому мы получаем обновления контейнера автоматически:

storage:
  links:
    - path: /home/core/.config/systemd/user/timers.target.wants/podman-auto-update.timer
      target: /usr/lib/systemd/user/podman-auto-update.timer
      user:
        name: core
      group:
        name: core

Дальше будет длинный files раздел:

  files:
    # Ensure the `core` user can keep processes running after they're logged out.
    - path: /var/lib/systemd/linger/core
      mode: 0644
    
    # Allow caddy to listen on 80 and 443.
    # Allow it to ask for bigger network buffers, too.
    - path: /etc/sysctl.d/90-caddy.conf
      contents:
        inline: |
          net.ipv4.ip_unprivileged_port_start = 80
          net.core.rmem_max=2500000
          net.core.wmem_max=2500000          

    # Set up an an environment file that containers can read to configure themselves.
    - path: /home/core/.config/containers/containers-environment
      contents:
        inline: |
          MYSQL_DATABASE=wordpress
          MYSQL_USER=wordpress
          MYSQL_ROOT_PASSWORD=mariadb-needs-a-secure-password
          MYSQL_PASSWORD=wordpress-needs-a-secure-password
          WORDPRESS_DB_HOST=mariadb
          WORDPRESS_DB_USER=wordpress
          WORDPRESS_DB_PASSWORD=wordpress-needs-a-secure-password
          WORDPRESS_DB_NAME=wordpress          
      mode: 0644

    # Deploy the caddy configuration file from the repository.
    - path: /home/core/.config/caddy/Caddyfile
      contents:
        local: caddy/Caddyfile
      mode: 0644
      user:
        name: core
      group:
        name: core

    # Add some named volumes for caddy and wordpress.
    - path: /home/core/.config/containers/systemd/caddy-config.volume
      contents:
        inline: |
          [Volume]          
      user:
        name: core
      group:
        name: core
    - path: /home/core/.config/containers/systemd/caddy-data.volume
      contents:
        inline: |
          [Volume]          
      user:
        name: core
      group:
        name: core
    - path: /home/core/.config/containers/systemd/wordpress.volume
      contents:
        inline: |
          [Volume]          
      user:
        name: core
      group:
        name: core

    # Create a network for all the containers to use and enable the
    # DNS plugin. This allows containers to find each other using
    # the container names.
    - path: /home/core/.config/containers/systemd/wordpress.network
      contents:
        inline: |
          [Network]
          DisableDNS=false
          Internal=false          
      user:
        name: core
      group:
        name: core

    # Add the wordpress container.
    - path: /home/core/.config/containers/systemd/wordpress.container
      contents:
        local: quadlets/wordpress.container
      mode: 0644
      user:
        name: core
      group:
        name: core

    # Add the MariaDB container.
    - path: /home/core/.config/containers/systemd/mariadb.container
      contents:
        local: quadlets/mariadb.container
      mode: 0644
      user:
        name: core
      group:
        name: core

    # Add the caddy container.
    - path: /home/core/.config/containers/systemd/caddy.container
      contents:
        local: quadlets/caddy.container
      mode: 0644
      user:
        name: core
      group:
        name: core

Каддифайл также находится в репозитории и будет развернут в конфигурации с бутаном, показанной выше.

Read more:  Джекман: ​​«Тигры» не в силах победить «Лейнстер» — RTE.ie

Мы можем подробно рассмотреть каждую четверку. Прежде всего, это MariaDB. Мы сообщаем systemd, что контейнер WordPress захочет запустить этот контейнер первым.

[Unit]
Description=MariaDB Quadlet

[Container]
Image=docker.io/library/mariadb:11
ContainerName=mariadb
AutoUpdate=registry
EnvironmentFile=/home/core/.config/containers/containers-environment
Volume=mariadb.volume:/var/lib/mysql
Network=wordpress.network

[Service]
Restart=always
TimeoutStartSec=900

[Install]
WantedBy=wordpress.service multi-user.target default.target

Квадлет WordPress во многом аналогичен квадлету MariaDB, но мы сообщаем systemd, что caddy захочет, чтобы WordPress запускался первым.

[Unit]
Description=WordPress Quadlet

[Container]
Image=docker.io/library/wordpress:fpm
ContainerName=wordpress
AutoUpdate=registry
EnvironmentFile=/home/core/.config/containers/containers-environment
Volume=wordpress.volume:/var/www/html
Network=wordpress.network

[Service]
Restart=always
TimeoutStartSec=900

[Install]
WantedBy=caddy.service multi-user.target default.target

Наконец, квадлет Caddy содержит четыре тома и несколько опубликованных портов. Эти порты будут опубликованы на узле контейнера. Кроме того, вы заметите, что здесь также смонтирован том WordPress. Это связано с тем, что Caddy может обслуживать статические файлы. намного быстрее чем WordPress.

[Unit]
Description=Caddy Quadlet

[Container]
Image=docker.io/library/caddy:latest
ContainerName=caddy
AutoUpdate=registry
EnvironmentFile=/home/core/.config/containers/containers-environment
Volume=caddy-data.volume:/data
Volume=caddy-config.volume:/config
Volume=/home/core/.config/caddy/Caddyfile:/etc/caddy/Caddyfile:Z
Volume=wordpress.volume:/var/www/html
PublishPort=80:80
PublishPort=443:443
Network=wordpress.network

[Service]
Restart=always
TimeoutStartSec=900

[Install]
WantedBy=multi-user.target default.target

Есть запустить скрипт который отправляет эту конфигурацию в VULTR и запускает экземпляр CoreOS:

#!/bin/bash
# This command starts up a CoreOS instance on Vultr using the vultr-cli
vultr-cli instance create 
    --os 391 
    --plan vhp-1c-1gb-amd 
    --region dfw 
    --notify true 
    --ipv6 true 
    -u "$(butane --files-dir . config.butane)" 
    -l "coreos-$(date "+%s")"

Чтобы запустить экземпляр, получите Ключ API ВУЛТР первый. Затем установите vultr-cli и бутан:

$ sudo dnf -y install butane vultr-cli

После запуска проверьте, что делают ваши контейнеры:

[core@vultr ~]$ podman ps
CONTAINER ID  IMAGE                            COMMAND               CREATED         STATUS         PORTS                                     NAMES
afa2d6501593  docker.io/library/caddy:latest   caddy run --confi...  54 seconds ago  Up 53 seconds  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp  caddy
460426f39e6c  docker.io/library/mariadb:11     mariadbd              35 seconds ago  Up 35 seconds                                            mariadb
92ece6538d5a  docker.io/library/wordpress:fpm  php-fpm               28 seconds ago  Up 29 seconds                                            wordpress

У нас должна быть возможность общаться с WordPress через Caddy через порт 80:

[core@vultr ~]$ curl -si http://localhost/wp-admin/install.php | head -n 25
HTTP/1.1 200 OK
Cache-Control: no-cache, must-revalidate, max-age=0
Content-Type: text/html; charset=utf-8
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Server: Caddy
X-Powered-By: PHP/8.0.30
Date: Mon, 25 Sep 2023 21:43:40 GMT
Transfer-Encoding: chunked




	
	
	
	WordPress › Installation
	







Потрясающий! 🎉

Контейнеры будут автоматически обновляться по расписанию, и вы можете проверить таймер:

[core@vultr ~]$ systemctl status --user podman-auto-update.timer
● podman-auto-update.timer - Podman auto-update timer
     Loaded: loaded (/usr/lib/systemd/user/podman-auto-update.timer; enabled; preset: disabled)
     Active: active (waiting) since Mon 2023-09-25 21:41:31 UTC; 3min 14s ago
    Trigger: Tue 2023-09-26 00:04:46 UTC; 2h 20min left
   Triggers: ● podman-auto-update.service

Sep 25 21:41:31 vultr.guest systemd[1786]: Started podman-auto-update.timer - Podman auto-update timer.

Квадлеты — это обычные системные модули:

[core@vultr ~]$ systemctl list-units --user | grep -i Quadlet
  caddy.service                                                                       loaded active running Caddy Quadlet
  mariadb.service                                                                     loaded active running MariaDB Quadlet
  wordpress.service                                                                   loaded active running WordPress Quadlet

Например, вы можете внести изменения в файл конфигурации caddy и легко перезапустить его:

[core@vultr ~]$ systemctl restart --user caddy
[core@vultr ~]$ systemctl status --user caddy
● caddy.service - Caddy Quadlet
     Loaded: loaded (/var/home/core/.config/containers/systemd/caddy.container; generated)
    Drop-In: /usr/lib/systemd/user/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Mon 2023-09-25 21:46:28 UTC; 5s ago
   Main PID: 2652 (conmon)
      Tasks: 18 (limit: 1023)
     Memory: 15.1M
        CPU: 207ms

Если вам нужно изменить конфигурацию квадлета, просто откройте файл конфигурации в вашем любимом редакторе в разделе ~/.config/containers/systemdперезагрузите systemd и перезапустите контейнер:

$ vi ~/.config/containers/systemd/caddy.container

--- make your edits and save the quadlet configuration ---

$ systemctl daemon-reload --user
$ systemctl restart --user caddy

Наслаждаться!

2023-09-26 05:39:19


1695710759
#Квадлеты #могут #заставить #меня #наконец #отказаться #от #использования #dockercompose #Майор #Хейден

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.