トラブルシューティング
このページでは、Platform as VM デプロイのよくある問題を一覧にまとめています。記載のない問題に直面した場合は、次の一般的な進め方を使用します。
kubectl get pods -Aを実行して、失敗している Pod を特定します。kubectl logs <pod> -n <namespace> --tail 200を実行して、その出力を確認します。kubectl describe pod <pod> -n <namespace>を実行して、末尾の最近のイベントを確認します。
インストーラーの失敗
このセクションでは、インストーラーの実行中に発生するエラーと停止について説明します。
「This playbook is only for RedHat-family systems」
インストーラーがサポートするのは RHEL 系 9.x(RHEL 9、AlmaLinux 9、Rocky Linux 9)のみです。Ubuntu、Debian、SUSE はサポートされていません。サポート対象の OS で VM をプロビジョニングし直してください。要件 を参照してください。
このチェックは OS のファミリーのみを検査し、バージョンは確認しません。RHEL 系 8 や 10 では通常どおり開始され、後の工程で分かりにくい形で失敗する可能性があります。これらのバージョンは未検証かつサポート対象外です。
「Minimum 32 GB RAM required」/「Minimum 4 CPU cores required」
VM のスペックが不足しています。継続する前に VM をリサイズしてください。回避策はありません。
RAM のチェックには、厳密な 32 GB よりわずかに低い値まで許容する余裕が設けられています。ハイパーバイザーやクラウドプロバイダーが公称値より少ない値を報告するためです。32 GB として提供された VM はチェックを通過します。16 GB の VM は通過しません。
sudo パスワードプロンプトで「Authentication failure」
入力したパスワードが誤っているか、ユーザーに sudo 権限がありません。次のコマンドで確認します。
sudo -v
失敗する場合は、VM をプロビジョニングした担当者に sudo 権限の付与を依頼してください。
インストーラーが「Wait for K3s to be ready」で応答しなくなるのはなぜですか?
K3s のダウンロード中、または API サーバーの起動が遅いだけのことが多いです。5 分待っても K3s の準備が完了しない場合は、別の SSH セッションを開いて確認します。
sudo systemctl status k3s
sudo journalctl -u k3s --no-pager --since "5 minutes ago"
最も多い原因は、VM から get.k3s.io への送信 HTTPS アクセスができないことです。プロキシまたはファイアウォールを修正し、インストーラーをもう一度実行してください。
インストーラーが「Helm install」で失敗するのはなぜですか?
インストーラーの出力中の Helm エラーメッセージを確認します。典型的な原因は次のとおりです。
- タイムアウト: チャートの Pod が時間内に Ready 状態にならない。
kubectl get pods -n openlm-infrastructureを実行し、失敗している Pod のイベントを確認します。 - ImagePullBackOff: VM がコンテナイメージレジストリに到達できない。
public.ecr.awsとdocker.ioへの送信 HTTPS を確認してください。 - ディスク容量不足:
df -hを実行し、/var/lib/rancher/k3sの領域を空けます。
根本原因を修正してから、./entrypoint.sh をもう一度実行します。playbook は各手順を再確認し、すでに完了している作業はスキップするため、再実行しても安全です。
インストール後の問題
このセクションでは、インストーラーの完了後に発生する問題について説明します。
Pod が Pending のままになるのはなぜですか?
次のコマンドを実行します。
kubectl describe pod <pod> -n openlm | tail -20
Events セクションを確認します。典型的な原因は次のとおりです。
- メモリまたは CPU 不足: VM がオーバーサブスクライブされている。VM をリサイズするか、重要度の低いサービスをスケールダウンしてください。
- PVC が Pending のまま:
kubectl get pvc -n openlm-infrastructure。PVC がPendingの場合、ストレージクラスがプロビジョニングできません。kube-system内でlocal-path-provisionerが稼働していることを確認してください。 - ディスク不足: ノードがディスク圧迫状態にあり、スケジューラは新しい Pod を配置しません。
df -hを確認し、VM のディスク容量を空けるにはどうすればよいですか? を参照してください。 - ノードアフィニティを満たせない:
config.yamlでaffinity_label_main_workloadまたはaffinity_label_reporting_workloadを設定している場合、単一 VM デプロイには存在しないノードラベルを Pod が要求します。両方のフィールドを空にして、インストーラーをもう一度実行してください。
Pod が ImagePullBackOff のままになるのはなぜですか?
次のコマンドを実行します。
kubectl describe pod <pod> -n openlm | grep -i image
そこに表示されるイメージタグが public.ecr.aws/r3q3q2f4/ 上に存在することを確認します。タグが正しいように見える場合、原因はネットワークの問題です。次のコマンドを実行します。
curl -I https://public.ecr.aws/r3q3q2f4/olm-server/manifests/latest 2>&1 | head -5
ここで TLS エラーやタイムアウトが返る場合、VM はレジストリに到達できていません。プロキシまたはファイアウォールを修正してください。
タグ自体が誤っている、または見覚えのないタグであれば、デプロイパッケージが破損している可能性があります。OpenLM からもう一度ダウンロードしてください。
Pod が CrashLoopBackOff のままになるのはなぜですか?
次のコマンドを実行します。
kubectl logs <pod> -n openlm --previous --tail 100
--previous フラグが重要です。直前にクラッシュしたコンテナのログを表示し、新しい(空の)コンテナのログは表示しません。よくあるパターン:
- データベース接続失敗: サービスがデータベースに到達できない。
mariadb-0、postgres-postgresql-0、mongodb-0が Running であること、passwords.yamlのパスワードがデータベース初期化時のものと一致していることを確認してください。 - Kafka トピックがない: サービスが必要なトピックを参照しているのに作成されていない。トピック作成スクリプトをもう一度実行してください(Kafka トピックがないのはなぜですか? を参照)。
- スキーマの不整合: データベーススキーマが古い。
AllDbUpgradeAPIサービスが起動時にスキーマを移行します。Running 状態であることを確認し、ログを確認してください。
OpenLM Platform の URL が 404 または Bad Gateway を返すのはなぜですか?
次のコマンドを実行します。
# Is Traefik routing the request?
kubectl logs -n kube-system -l app.kubernetes.io/name=traefik --tail 50
# Does the ingress exist?
kubectl get ingress -n openlm | grep <path-prefix>
想定する Ingress が存在しない場合、OpenLM Platform の Helm リリースが完全にインストールされていません。./entrypoint.sh をもう一度実行してください。
ブラウザに証明書エラーが表示されるのはなぜですか?
ブラウザに次のいずれかのエラーが表示されます。
NET::ERR_CERT_AUTHORITY_INVALID: 証明書が自己署名、またはブラウザが信頼していない CA から発行されている。本番外の構成では想定どおりです。NET::ERR_CERT_COMMON_NAME_INVALID: 証明書が使用中の FQDN を含んでいない。正しい名前で証明書を再発行し、インストーラーをもう一度実行してください。インストーラーは証明書ファイルを再読み込みし、Kubernetes Secret を更新します。- "certificate has expired": 直前のエラーと同じく、証明書を再発行してインストーラーをもう一度実行します。インストーラーは常に、Kubernetes Secret 上の証明書を現在のファイル内容で上書きします。
証明書と鍵が一致しているか確認するには、次のコマンドを実行します。
openssl x509 -noout -modulus -in /etc/openlm/certs/tls.crt | md5sum
openssl rsa -noout -modulus -in /etc/openlm/certs/tls.key | md5sum
2 つの出力は同一でなければなりません。
DNS の問題
このセクションでは、クラスタ内外の名前解決の問題について説明します。
OpenLM Platform のドメインで「host not found」と出てサービスがクラッシュするのはなぜですか?
- 症状: OpenLM Platform に対してコールバックするサービス(例: トークンを発行する identity サービス)が
host not foundで失敗します。 - 原因: クラスタの内部 DNS が
openlm_system_domainを解決できません。VM が、その FQDN が公開されていないネットワークに置かれている場合に発生しがちです。
修正するには、config.yaml に CoreDNS の hosts エントリを設定し、インストーラーをもう一度実行します。
add_coredns_hosts_entry: true
coredns_hosts_entry_ip: "<vm-ip-address>"
<vm-ip-address> を、VM の IP アドレスに置き換えます。
完全なパターンについては DNS のないエアギャップネットワーク を参照してください。
エンドユーザーが OpenLM Platform に到達できないのはなぜですか?
VM 上ではなくユーザーのマシンで dig <openlm_system_domain> +short を実行します。VM の IP に解決されない場合は、DNS A レコードを修正してください。解決はされているのに接続が確立しない場合は、外部ファイアウォールを確認してください。ユーザーのネットワークから 443 番ポートを通す必要があります。
データベースの問題
このセクションでは、パスワードのリセットと、同梱データベースへの接続について説明します。
PostgreSQL または MariaDB のパスワードをリセットするにはどうすればよいですか?
同梱データベースのパスワードはインストール時に一度だけ設定されます。その後、passwords.yaml は真の値の出所ではなくなります。パスワードをリセットするには、使用しているデータベース用のコマンドを実行します。
PostgreSQL
kubectl exec -n openlm-infrastructure -it postgres-postgresql-0 -- \
psql -U postgres -c "ALTER USER postgres WITH PASSWORD '<new-password>';"
MariaDB
kubectl exec -n openlm-infrastructure -it mariadb-0 -- \
mysql -uroot -p'<old-password>' -e \
"ALTER USER 'root'@'%' IDENTIFIED BY '<new-password>'; FLUSH PRIVILEGES;"
コマンド内の <new-password> を新しいパスワードに、<old-password> を現在のパスワードに置き換えます。
その後 passwords.yaml を更新し、OpenLM Platform サービスが新しいパスワードを使用するようインストーラーをもう一度実行します。
同梱データベースに直接接続するにはどうすればよいですか?
使用しているデータベース用のコマンドを実行します。
# PostgreSQL
kubectl port-forward -n openlm-infrastructure svc/postgres-postgresql 5432:5432
# MariaDB
kubectl port-forward -n openlm-infrastructure svc/mariadb 3306:3306
# MongoDB
kubectl port-forward -n openlm-infrastructure svc/mongodb 27017:27017
その後、別のターミナルから psql、mysql、mongosh を localhost に向けて実行します。
Kafka の問題
このセクションでは、不足しているトピックと、その確認方法について説明します。
Kafka トピックがないのはなぜですか?
サービスのログに topic does not exist や Unknown topic or partition が出る場合は、トピック作成スクリプトをもう一度実行します。
kubectl cp installation_files/kafka_topics/full_topic_list_create.sh \
openlm-infrastructure/kafka-controller-0:/tmp/create-topics.sh
kubectl exec -n openlm-infrastructure kafka-controller-0 -- \
bash /tmp/create-topics.sh
このスクリプトは安全に再実行できます。既に存在するトピックはスキップします。
既存の Kafka トピックを一覧表示するにはどうすればよいですか?
次のコマンドを実行します。
kubectl exec -n openlm-infrastructure kafka-controller-0 -- \
/opt/bitnami/kafka/bin/kafka-topics.sh \
--bootstrap-server localhost:9092 --list
単一の Kafka トピックを調べるにはどうすればよいですか?
トピックのパーティション数、レプリケーションファクター、設定を確認するには次を実行します。
kubectl exec -n openlm-infrastructure kafka-controller-0 -- \
/opt/bitnami/kafka/bin/kafka-topics.sh \
--bootstrap-server localhost:9092 --describe --topic <topic-name>
VM のディスク容量を空けるにはどうすればよいですか?
K3s、コンテナイメージ、データベースデータはすべて VM のプライマリディスクに置かれます。Pod が Eviction 警告とともに失敗し始めたら、ディスク使用量を確認します。
df -h
sudo du -sh /var/lib/rancher/k3s/*
sudo du -sh /var/lib/rancher/k3s/storage/* # persistent volume data
/var/lib/rancher/k3s が満杯であれば、最も単純な対策はディスクを拡張することです。コンテナイメージの掃除は一時的な回避策にすぎません。Pod が再スケジュールまたはアップグレードされた時点でイメージが再度取得されるためです。イメージを掃除するには、次のコマンドを実行します。
sudo k3s crictl images # list
sudo k3s crictl rmi --prune # remove unused
/var/lib/rancher/k3s/storage/ 配下は絶対に削除しないでください。そこはデータベースを含む、稼働中の永続ボリュームのデータです。
サポートを受ける
OpenLM サポートに連絡する際は、次の情報を添えてください。
kubectl get pods -Aの出力。helm list -Aの出力。- 失敗している Pod のログ:
kubectl logs <pod> -n <namespace> --tail 500。 - Pod が起動していない場合は
kubectl describe pod <pod> -n <namespace>の出力。 config.yaml(パスワードは伏せ字にする)と、デプロイパッケージのバージョン。
ドキュメントチームは、大規模言語モデルを使ってこのページを下書きすることがあります。公開前に、テクニカルライターがすべてのページをレビューし、製品と照らし合わせて検証します。最終的な判断は人間が行います。