CentOS 6で3.10カーネルを使ってみる

Linux

No warning, No life.

・・・違う。逆だ。逆だよ。warningの無い人生を。というわけで、CentOS 6でdockerを動かすと出るwarningを解消できないかと、kernelバージョンアップをしてみました。

docker on CentOS 6

CentOS 6でdockerを動かすと、とあるバージョンから/var/log/dockerにwarningが出るようになりました。

level=warning msg="You are running linux kernel version 2.6.32-573.el6.x86_64, which might be unstable running docker. Please upgrade your kernel to 3.10.0."

kernelが古くてunstableだよ、と。そんなわけで、最新dockerではCentOS 6を含むEL6系はサポートされていない、ということになっています。

これを回避するにはkernelバージョンアップすれば良いのですが、基本、ディストリビューションで提供されるカーネルのバージョンは固定されており、3.10まで上げるなんてことは現実的には困難です。もちろんsourceからbuildするなんてことも出来なくはないですが、なかなかに手間がかかる(※そういえばGentoo使ってたころはkernel buildなんて日常茶飯事でしたが、最近やってないなぁ、と思った)。

ホストをCentOS 7やCoreOSにしてしまえば良いのですが、CentOS 7はfirewalldとの組み合わせの上手い形がまだちょっとピンと来ていないこと、CoreOSはちょっと凝ったことをするには環境がシンプル過ぎるということで、まぁ放置していたわけですが・・・

ちょいと調べごとをしていて、Apache MesosのDocumentにこんな記載があったのを発見しました。CentOS 6でのインストール手順です。

# Install a recent kernel for full support of process isolation.
$ sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
$ sudo rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
$ sudo yum --enablerepo=elrepo-kernel install -y kernel-lt

おお、新しいkernel配布しているレポジトリがある。

ELRepo : kernel-lt
という訳で、これを試してみることにしました。

CentOS 6のkernelを3.10.xにする

手順に従って、elrepoを登録し、kernel-ltをインストール。ここまでは上記コマンド通りです。あとは、grub.confでtargetを変えて、起動すれば、何も無かったように、新しいkernelで動き出します。

ただ、これだけじゃ足りなくて、cgroupの設定を追加してあげないと、次のwarningが解決できません。

level=warning msg="Your kernel does not support swap memory limit."

cgroup(libcgroup)は普通は入っていると思いますので、grub.confのkernelのオプションに以下を追加。

cgroup_enable=memory swapaccount=1

次はmessagesにwarningが出てきます。

kernel: cgroup: docker (1660) created nested cgroup for controller "memory" which has incomplete hierarchy support. Nested cgroups may change behavior in the future.
kernel: cgroup: "memory" requires setting use_hierarchy to 1 on the root.

memoryのcgroup設定を追加すると、これは消えます。要再起動。

/etc/cgconfig.conf

group . {
        memory { memory.use_hierarchy = 1; }
}

その後も、以下のwarningが出ますが、これは解消できず。ただ、将来的にはちゃんと動くよ、ってことなので、多分今の環境ではこれが限界か、あるいはcgroup側の対応待ちということかと思います。

cgroup: docker (1660) created nested cgroup for controller "blkio" which has incomplete hierarchy support. Nested cgroups may change behavior in the future.

という訳で、なんとか「3.10.99-1.el6.elrepo.x86_64」で動く、CentOS 6のdockerホスト環境ができあがりました。warningゼロとは行きませんが、解決できるものは解決できたと思います。

更新しても目立った変化は無し

じゃぁ、性能上がった?とか、気になるところですが、とりあえずちょっとログで応答時間見た感触では、やっぱり遅くなった気がする(苦笑)。再起動でキャッシュ全部リフレッシュされたんで仕方ないところもあり、ちょいと様子見です。

機能的な不具合も今のところ無さそうです。

いずれにせよ、CentOS 6でも3.10系カーネルが動く環境が、比較的容易に構成できたので満足です。ひとつ悩みの種は解決しましたが、やっぱりベストなホストOSって難しい。

コメント

タイトルとURLをコピーしました