作業ログ源泉垂れ流し

しがないIT技術者の作業ログを垂れ流す

Fedora CoreOSのインストール練習 4 〜podの自動起動〜

前回作ったKubernetesマニフェストで作ったpodをIgnitionで自動起動するように、Fedora CoreOSインストールしてみる。

まずは、Butane config wp-pod.buを用意する。

variant: fcos
version: 1.3.0
passwd:
  users:
    - name: core
      ssh_authorized_keys:
        - (ssh公開鍵)
systemd:
  units:
    - name: wp-pod.service
      enabled: true
      contents: |
        [Unit]
        Description=Play WordPress pod
        After=network-online.target
        Wants=network-online.target
        [Service]
        Type=oneshot
        RemainAfterExit=yes
        ExecStartPre=-/bin/podman pod kill wp-pod
        ExecStartPre=-/bin/podman pod rm wp-pod
        ExecStartPre=/bin/podman build -t pod-wordpress:latest /var/home/wp-pod
        ExecStart=/bin/podman play kube /var/home/wp-pod/wp-pod.yaml
        ExecStop=/bin/podman pod stop wp-pod
        [Install]
        WantedBy=multi-user.target
storage:
  files:
    - path: /var/home/wp-pod/Dockerfile
      contents:
        inline: |
          FROM docker.io/library/wordpress:latest
          ENV WORDPRESS_DB_NAME='wp' WORDPRESS_DB_HOST='127.0.0.1' WORDPRESS_DB_USER='wordpress' WORDPRESS_DB_PASSWORD='wordpress-password'
    - path: /var/home/wp-pod/wp-pod.yaml
      contents:
        inline: |
          apiVersion: v1
          kind: Pod
          metadata:
            labels:
              app: wp-pod
            name: wp-pod
          spec:
            containers:
            - name: web
              image: localhost/pod-wordpress:latest
              ports:
              - containerPort: 80
                hostPort: 80
                protocol: TCP
              securityContext:
                allowPrivilegeEscalation: true
                capabilities:
                  drop:
                  - CAP_MKNOD
                  - CAP_NET_RAW
                  - CAP_AUDIT_WRITE
                privileged: false
                readOnlyRootFilesystem: false
                seLinuxOptions: {}
            - name: db
              image: docker.io/library/mariadb:latest
              env:
              - name: MYSQL_ROOT_PASSWORD
                value: mysql-root-password
              - name: MYSQL_DATABASE
                value: wp
              - name: MYSQL_USER
                value: wordpress
              - name: MYSQL_PASSWORD
                value: wordpress-password
              securityContext:
                allowPrivilegeEscalation: true
                capabilities:
                  drop:
                  - CAP_MKNOD
                  - CAP_NET_RAW
                  - CAP_AUDIT_WRITE
                privileged: false
                readOnlyRootFilesystem: false
                seLinuxOptions: {}
              volumeMounts:
              - mountPath: /var/lib/mysql
                name: wp-mysql-pvc
            restartPolicy: Always
            volumes:
            - name: wp-mysql-pvc
              persistentVolumeClaim:
                claimName: wp-mysql

pod自動起動させるsystemdサービスwp-pod.serviceを定義している。
podman play kubeはpodが起動するとコマンドが終了するので、 Type=oneshotRemainAfterExit=yesを指定する。
ExecStartPreで独自コンテナイメージをビルドさせている。

Butane config wp-pod.buをIgnition config wp-pod.ignに変換する。

host$ docker run -i --rm quay.io/coreos/butane:release < wp-pod.bu > wp-pod.ign

生成されたwp-pod.ignを使ってFedora CoreOSをインストールする。

インストールが終了したらログインして、podが起動するまで少し待ってから、podの起動を確認してみる。

$ systemctl status wp-pod.service
● wp-pod.service - Play WordPress pod
     Loaded: loaded (/etc/systemd/system/wp-pod.service; enabled; vendor preset>
     Active: active (exited) since Wed 2021-06-16 08:08:23 UTC; 6s ago
    Process: 1944 ExecStartPre=/bin/podman pod kill wp-pod (code=exited, status>
    Process: 2000 ExecStartPre=/bin/podman pod rm wp-pod (code=exited, status=1>
    Process: 2026 ExecStartPre=/bin/podman build -t pod-wordpress:latest /var/h>
    Process: 2210 ExecStart=/bin/podman play kube /var/home/wp-pod/wp-pod.yaml >
   Main PID: 2210 (code=exited, status=0/SUCCESS)
      Tasks: 6 (limit: 2280)
     Memory: 1.0G
     CGroup: /system.slice/wp-pod.service
             ├─2429 /usr/bin/conmon --api-version 1 -c a0017f7e8221da59cd409527>
             ├─2435 /usr/bin/conmon --api-version 1 -c 4d71c1b65740a07e2b8fca3f>
             └─2463 /usr/bin/conmon --api-version 1 -c 7b4edae69fe2dbbace2b2ab2>

Jun 16 08:08:23 localhost podman[2210]: 2021-06-16 08:08:23.270676058 +0000 UTC>
Jun 16 08:08:23 localhost podman[2210]: 2021-06-16 08:08:23.460813506 +0000 UTC>
Jun 16 08:08:23 localhost podman[2210]: 2021-06-16 08:08:23.466814111 +0000 UTC>
Jun 16 08:08:23 localhost podman[2210]: 2021-06-16 08:08:23.466855117 +0000 UTC>
Jun 16 08:08:23 localhost podman[2210]: Pod:
Jun 16 08:08:23 localhost podman[2210]: 2b836abed04bc8069f5186b64b01b19d3cc2bee>
Jun 16 08:08:23 localhost podman[2210]: Containers:
Jun 16 08:08:23 localhost podman[2210]: 7b4edae69fe2dbbace2b2ab2c44dd01b3d50ab9>
$ sudo podman pod ps
POD ID        NAME    STATUS   CREATED         INFRA ID      # OF CONTAINERS
2b836abed04b  wp-pod  Running  36 seconds ago  a0017f7e8221  3
$ sudo podman ps
CONTAINER ID  IMAGE                             COMMAND               CREATED         STATUS             PORTS               NAMES
a0017f7e8221  k8s.gcr.io/pause:3.5                                    39 seconds ago  Up 23 seconds ago  0.0.0.0:80->80/tcp  2b836abed04b-infra
7b4edae69fe2  localhost/pod-wordpress:latest    apache2-foregroun...  39 seconds ago  Up 23 seconds ago  0.0.0.0:80->80/tcp  wp-pod-web
4d71c1b65740  docker.io/library/mariadb:latest  mysqld                23 seconds ago  Up 23 seconds ago  0.0.0.0:80->80/tcp  wp-pod-db

無事wp-podが起動している。
ブラウザでもWordPressが起動していることを確認。

いちおうサービス停止も確認しておく。

$ sudo systemctl stop wp-pod.service
$ sudo podman pod ps
POD ID        NAME    STATUS  CREATED        INFRA ID      # OF CONTAINERS
2b836abed04b  wp-pod  Exited  3 minutes ago  a0017f7e8221  3
$ sudo podman ps
CONTAINER ID  IMAGE   COMMAND  CREATED  STATUS  PORTS   NAMES

Kubernetesマニフェストを使ってPodmanでpodを自動起動するようにFedora CoreOSを構成できた!