💻

Ubuntu22.04でCentOS7をLXCコンテナで動かす
August 21, 2023February 19, 2024
#Develop#Ubuntu#CentOS#LXC

LXC のホストを Ubuntu22.0 にアップグレードしたら CentOS7 のコンテナが起動できなくなったので原因を調べた。

前提条件

  • HOST OS: Ubuntu 22.04
  • HOST Kernel: 5.15.0-79-generic
  • Container OS: CentOS 7
  • lxc-start —version: 5.0.0~git2209-g5a7b9ce67

エラー内容

Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted
systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Detected virtualization lxc.
Detected architecture x86-64.

Welcome to CentOS Linux 7 (Core)!

Set hostname to <vmc7>.
Cannot determine cgroup we are running in: No such file or directory
Failed to allocate manager object: No such file or directory
[!!!!!!] Failed to allocate manager object, freezing.

ホストの dmesg に下記が出力される。

cgroup2: Unknown parameter 'mode'

lxc-attachはできるが systemd が動かない状態。

原因

Ubuntu22.04 は cgroup v2 のみが動いていることが原因でコンテナである CentOS7 は cgroup v1 の path で要求しようとしていることの様だった。
cgroup v2 のみが動いている環境が原因なので Ubuntu21 も同様の問題が生じると思われる。

lxc-checkconfigで cgroup の動作状況を確認できる。
cgroup v1 のマウントポイントが空であることが確認できる。

--- Control groups ---
Cgroups: enabled
Cgroup namespace: enabled
Cgroup v1 mount points:
Cgroup v2 mount points:
/sys/fs/cgroup
Cgroup v1 systemd controller: missing
Cgroup v1 freezer controller: missing
Cgroup ns_cgroup: required
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

解決方法

動いている cgroup のバージョンを cgroup v2 から cgroup v1 に切り替える。
切り替えには grub のブートオプションの設定とホストサーバーの再起動が必要となる。

sudo vim /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=0
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
#GRUB_CMDLINE_LINUX_DEFAULT="" ##コメントアウト
GRUB_CMDLINE_LINUX_DEFAULT="systemd.unified_cgroup_hierarchy=false" ##追記
GRUB_CMDLINE_LINUX=""
sudo update-grub

このあとホストサーバーを再起動する。

起動後のlxc-checkconfigが下記。 cgroup v1 が動作していることが分かる。

--- Control groups ---
Cgroups: enabled
Cgroup namespace: enabled
Cgroup v1 mount points:
/sys/fs/cgroup/systemd
/sys/fs/cgroup/cpuset
/sys/fs/cgroup/net_cls,net_prio
/sys/fs/cgroup/hugetlb
/sys/fs/cgroup/misc
/sys/fs/cgroup/memory
/sys/fs/cgroup/freezer
/sys/fs/cgroup/perf_event
/sys/fs/cgroup/cpu,cpuacct
/sys/fs/cgroup/pids
/sys/fs/cgroup/blkio
/sys/fs/cgroup/devices
/sys/fs/cgroup/rdma
Cgroup v2 mount points:
/sys/fs/cgroup/unified
Cgroup v1 clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

これで LXC コンテナが正常に起動できる。

まとめ

Ubuntu22.04 で CentOS7 の LXC コンテナが起動しない問題を回避した。
なお、systemd を用いない CentOS6 のコンテナは cgroup v2 で正常に動作しており特定に時間がかかった。
cgroup の問題なので docker などもおそらく影響を受ける問題だと思う。
検索したところ Kubernetes などコンテナ全般で起きているようだった。

参考

Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted · Issue #4072 · lxc/lxc

Required information Distribution: Gentoo Distribution version: n/a lxc-start --version: 4.0.11 lxc-checkconfig: LXC version 4.0.11 Kernel configuration not found at /proc/config.gz; searching... K...

GitHub

Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted · Issue #4072 · lxc/lxc

おしまい



CentOS6でPHP7.4をビルドする
August 16, 2023February 19, 2024

PHP のアップデートは、多くの Web アプリケーション、特に WordPress での要件となっています。 しかし、CentOS6 のような古い OS を使用している場合、標準の手段ではアップデートが難しい場合があります。 この記事では、そんな課題を解決するための具体的な手順を提供します。 警告 PHP7.4 は…

Continue reading...
sakakinox

Written by sakakinox
Server enginier

Copyright © sakakinox.net 2021-2024.