以前作成しました、Podman用のKubernetes yamlファイルですが。
アップデートを行ったところ、ポッドが起動しなくなってしまいました。
原因はおそらく、Podmanのバージョンアップの影響かと思います。
というわけで、起動しなくなった場合、yamlファイルを生成し直す必要があります。
WordPressやNextcloud等、各種dockerイメージについて、新たにポッドとコンテナを作成し、yamlファイルを生成する手順を記録しておこうと思います。
目次
作成前の準備
稼働しているポッドの確認
sudo podman pod ls
sudo podman ps
# ポッドを全て終了する場合
sudo podman pod stop --all
# ポッドを全て削除する場合
sudo podman pod rm --all
稼働しているポッドとコンテナを確認します。
イメージごと入れ替えるため、全てのポッドを終了し、ポッド本体とポッドに紐づくコンテナを削除しました。
古いイメージの削除
ポッドを作成し直す前に、ダウンロード済みのイメージを削除しました。古いバージョンのイメージが残っていたりしますので、ポッドを作り直す前に掃除する感じです。
sudo podman images
# --allオプションはイメージ全て削除
sudo podman rmi --all
# 個別に削除する場合、コンテナIDを並べて記述
コンテナを作り直す際、イメージは自動的にダウンロードされます。
Podmanポッドとコンテナの作成手順
WordPress
まずはMariadbを使用したWordPressのポッドの作成手順です。
実行用のディレクトリ(wp)を作成、その中にhtml,log,mysqlディレクトリを作成しておきます。
mkdir wp
cd wp
mkdir html mysql log
最初にポッドを作成します。ポート番号はWordPressの80番を、ホスト側は8080番にマップしました。(何となく
ポッド作成後、ポッドに紐づくようにコンテナを作成します。コンテナはMariadbとWordPressになります。注意点が何点かあります。
- データベース名やパスワードは適宜変更して下さい。
- 永続化のため、ボリュームのマウント(-v)オプションを使用しましたが、環境に合わせて変更してください。データをコンテナに格納する場合は-vオプションは不要になり、別途データ用のコンテナを作成する形になります。
# WordPress用ポッド作成
sudo podman pod create --name wp-pod -p 8080:80
# Mariadbコンテナ作成
sudo podman run \
-d --restart=always --pod=wp-pod \
-e MYSQL_ROOT_PASSWORD="myrootpass" \
-e MYSQL_DATABASE="wp" \
-e MYSQL_USER="wordpress" \
-e MYSQL_PASSWORD="w0rdpr3ss" \
-v ./wp/mysql:/var/lib/mysql:Z \
--name=wp-db docker.io/library/mariadb:latest
# WordPressコンテナ作成
sudo podman run \
-d --restart=always --pod=wp-pod \
-e WORDPRESS_DB_NAME="wp" \
-e WORDPRESS_DB_USER="wordpress" \
-e WORDPRESS_DB_PASSWORD="w0rdpr3ss" \
-e WORDPRESS_DB_HOST="127.0.0.1" \
-v ./wp/html:/var/www/html:Z \
-v ./wp/log:/var/log/html:Z \
--name=wp-web docker.io/library/wordpress:latest
Webブラウザで動作を確認します。-vオプションを使用してホスト側のボリュームをマウントした場合、ポッド削除後もデータが永続的に残るかどうか確認します。動作やデータの保存に問題が無ければ、次回からポッドとしてすぐに起動できるように、Kubernetesのyamlファイルを出力しておきます。
sudo podman generate kube wp-pod > wp-pod.yaml
以下、WordPressポッド向けの各種コマンドの覚書です。
# ポッドの停止・削除
sudo podman pod stop wp-pod
sudo podman pod rm wp-pod
# ポッドの起動
sudo podman play kube ./wp-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it wp-web bash
sudo podman exec -it wp-db bash
# playで実行した場合
sudo podman exec -it nc-pod-wp-web bash
sudo podman exec -it nc-pod-wp--db bash
Nextcloud
Nextcloudのポッドは、WordPress同様にMariadbを使用しました。WordPressのweb部分を入れ替えたかたちになります。
mkdir nc
cd nc
mkdir html mysql log
WordPressと重複しないように、ポートは8081にしてみました。
# Nextcloud用ポッド作成
sudo podman pod create --name nc-pod -p 8081:80
# Mariadbコンテナ作成
sudo podman run \
-d --restart=always --pod=nc-pod \
-e MYSQL_ROOT_PASSWORD="myrootpass" \
-e MYSQL_DATABASE="nextcloud" \
-e MYSQL_USER="nextcloud" \
-e MYSQL_PASSWORD="n3xtcl0ud" \
-v ./mysql:/var/lib/mysql:Z \
--name=nc-db docker.io/library/mariadb:latest
# Nextcloudコンテナ作成
sudo podman run \
-d --restart=always --pod=nc-pod \
-e MYSQL_DATABASE="nextcloud" \
-e MYSQL_USER="nextcloud" \
-e MYSQL_PASSWORD="n3xtcl0ud" \
-e MYSQL_HOST="127.0.0.1" \
-v ./html:/var/www/html:Z \
-v ./log:/var/log/html:Z \
--name=nc-web docker.io/library/nextcloud:latest
ブラウザで動作を確認しました。画像ではポート番号8080になっていますが、上述のスクリプトを使用する場合8081に接続して下さい。
問題なければ、yamlファイルを生成します。
sudo podman generate kube nc-pod > nc-pod.yaml
以下、Nextcloudポッド向けの各種コマンドの覚書です。
# ポッドの停止・削除
sudo podman pod stop nc-pod
sudo podman pod rm nc-pod
# ポッドの起動
sudo podman play kube ./nc-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it nc-web bash
sudo podman exec -it nc-db bash
# playで実行した場合
sudo podman exec -it nc-pod-nc-web bash
sudo podman exec -it nc-pod-nc--db bash
Redmine
チケット管理システムのRedmineも同じパターンで起動できそうです。
mkdir redmine
cd redmine
mkdir mysql files
RedmineはTCPポート3000番で動作しています。ホスト側ポートは8082にしてみました。
# Redmine用ポッド作成
sudo podman pod create --name redmine-pod -p 8082:3000
# Mariadbコンテナ作成
sudo podman run \
-d --restart=always --pod=redmine-pod \
-e MYSQL_ROOT_PASSWORD="myrootpass" \
-e MYSQL_DATABASE="redmine" \
-e MYSQL_USER="redmine" \
-e MYSQL_PASSWORD="r3dmin3" \
-v ./mysql:/var/lib/mysql:Z \
--name=redmine-db docker.io/library/mariadb:latest
# Redmineコンテナ作成
sudo podman run \
-d --restart=always --pod=redmine-pod \
-e REDMINE_DB_DATABASE="redmine" \
-e REDMINE_DB_USERNAME="redmine" \
-e REDMINE_DB_PASSWORD="r3dmin3" \
-e REDMINE_DB_MYSQL="127.0.0.1" \
-v ./files:/usr/src/redmine/files:Z \
--name=redmine-web docker.io/library/redmine:latest
管理ユーザの初期パスワードは、admin/adminのようです。
問題なければ、yamlファイルを生成します。
sudo podman generate kube redmine-pod > redmine-pod.yaml
以下、Redmineポッド向けの各種コマンドの覚書です。
# ポッドの停止・削除
sudo podman pod stop redmine-pod
sudo podman pod rm redmine-pod
# ポッドの起動
sudo podman play kube ./redmine-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it redmine-web bash
sudo podman exec -it redmine-db bash
# playで実行した場合
sudo podman exec -it redmine-pod-redmine-web bash
sudo podman exec -it redmine-pod-redmine-db bash
Readymedia (miniDLNA)
DLNAサーバとしてReadymediaを起動してみました。イメージを1つ起動するかたちです。
mkdir readymedia
cd readymedia
# mediaはここでは新たにディレクトリを作成しましたが、コンテンツの置き場所を指定します。
mkdir cache media
8200/tcpと1900/udpをマップしました。/mediaのマウント先は、DLNAで配信するコンテンツを置いたディレクトリを指定します。ここでは./mediaを指定してあります。
# Readymedia用ポッド作成
sudo podman pod create --name readymedia-pod -p 8200:8200/tcp,1900:1900/udp
# Readymediaコンテナ作成
sudo podman run \
-d --restart=always --pod=readymedia-pod \
-e FRIENDLY_NAME="DLNA Server" \
-e TCP_PORT="8200" \
-e SERIAL="987654333" \
-e VIDEO_DIR1="/media" \
-v ./media:/media:Z \
-v ./cache:/cache:Z \
--name=readymedia-web docker.io/ypopovych/readymedia:latest
管理ページにアクセスできましたでしょうか?問題なければ、yamlファイルを生成します。
sudo podman generate kube readymedia-pod > readymedia-pod.yaml
以下、Readymediaポッド向けの各種コマンドの覚書です。
# ポッドの停止・削除
sudo podman pod stop readymedia-pod
sudo podman pod rm readymedia-pod
# ポッドの起動
sudo podman play kube ./readymedia-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it readymedia-web bash
# playで実行した場合
sudo podman exec -it readymedia-pod-readymedia-web bash
Emby
ストリーミングサーバのEmbyもイメージ1つ起動するかたちになります。
mkdir emby
cd emby
# tvshowsはここでは新たにディレクトリを作成しましたが、コンテンツの置き場所を指定します。
mkdir config tvshows
8096/tcpと8920/tcpをマップしました。/tvshowsのマウント先は、embyで配信するコンテンツを置いたディレクトリを指定します。ここでは./tvshowsを指定してあります。
# Emby用ポッド作成
sudo podman pod create --name emby-pod -p 8096:8096/tcp,8920:8920/tcp
# Embyコンテナ作成
sudo podman run \
-d --restart=always --pod=emby-pod \
-e PGID="1000" \
-e PUID="1000" \
-e LANG="ja_JP.UTF-8" \
-e LANGUAGE="ja_JP.UTF-8" \
-e TZ="Asia/Tokyo" \
-v ./config:/config:Z \
-v ./tvshows:/data/tvshows:Z \
--name=emby-web docker.io/linuxserver/emby:latest
# yamlファイル生成
sudo podman generate kube emby-pod > emby-pod.yaml
WebブラウザでTCPポート番号8096にアクセスすると、初期設定画面が表示されます。先程指定した/data/tvshowsは、Embyの設定でライブラリに登録する必要があります。以下ポッドの管理コマンドになります。
# ポッドの停止・削除
sudo podman pod stop emby-pod
sudo podman pod rm emby-pod
# ポッドの起動
sudo podman play kube ./emby-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it emby-web bash
# playで実行した場合
sudo podman exec -it emby-pod-emby-web bash
Mongodb
最後にMongodbとMongo Expressを起動したいと思います。
mkdir mongodb cd mongodb
Mongo ExpressはTCPポート番号8081です。上述の他のサービスと同時に起動する場合、重複しないようにご注意下さい。
# Mongodb用ポッド作成
sudo podman pod create --name mongo-pod -p 27017:27017/tcp,28017:28017/tcp,8081:8081/tcp
# Mongodbコンテナ作成
sudo podman run \
-d --restart=always --pod=mongo-pod \
-e MONGO_INITDB_ROOT_USERNAME="root" \
-e MONGO_INITDB_ROOT_PASSWORD="humongous" \
-v ./db:/data/db:Z \
--name=mongo-db docker.io/library/mongo:latest
# Mongo Expressコンテナ作成
sudo podman run \
-d --restart=always --pod=mongo-pod \
-e ME_CONFIG_MONGODB_SERVER="127.0.0.1" \
-e ME_CONFIG_MONGODB_ADMINUSERNAME="root" \
-e ME_CONFIG_MONGODB_ADMINPASSWORD="humongous" \
--name=mongo-exp docker.io/library/mongo-express:latest
# yamlファイル生成
sudo podman generate kube emby-pod > emby-pod.yaml
このような感じで、Mongo Expressの動作を確認しました。
最後にMongoポッド用のコマンド覚書です。
# ポッドの停止・削除
sudo podman pod stop mongo-pod
sudo podman pod rm mongo-pod
# ポッドの起動
sudo podman play kube ./mongo-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it mongo-db bash
sudo podman exec -it mongo-exp bash
# playで実行した場合
sudo podman exec -it mongo-pod-mongo-db bash
sudo podman exec -it mongo-pod-mongo-exp bash
以上のように、WordPressやNextcloud等、いくつかポッドを作成してみましたが。
生成されたyamlファイルを確認しますと。Podmanのバージョンは2.2.1のようです。(21.1.31現在)
バージョンアップでyamlファイルの仕様が変わって、うまく動作しない場合があるかと思いますが、ポッドとコンテナを作成する手順は、バージョンアップに関わらず同じかと思います。
yamlファイルが起動しなくなったら、ポッドを作り直して、yamlファイルを作り直す、という方法が確実かと思います。
追々、他のイメージについても、起動手順をこの記事に追記したいと思います。