スタッフダイアリー

EC2で稼働中のCentOS 7を新しいインスタンス M5/C5 で起動させる準備をする

システム課 黒田です。

間もなくAWS東京リージョンでも使えるようになるであろう、
新しいインスタンスタイプ M5/C5 を、稼働中のCentOS7で
起動が出来るように準備します。

※アジアパシフィック (シドニー)ではもう使える 2018/2/20 現在
https://aws.amazon.com/jp/about-aws/whats-new/2018/02/amazon-ec2-m5-instances-are-now-available-in-additional-regions/
https://aws.amazon.com/jp/about-aws/whats-new/2018/02/amazon-ec2-c5-instances-are-now-available-in-additional-regions/

※アジア太平洋(シンガポール)、アジア太平洋(ソウル)でも使えるように 2018/3/19現在… 東京は…
https://aws.amazon.com/jp/about-aws/whats-new/2018/03/amazon-ec2-m5-instances-are-now-available-in-additional-regions/

※遂に東京に! 2018/4/10現在
M5
https://aws.amazon.com/jp/about-aws/whats-new/2018/04/amazon-ec2-m5-instances-are-now-available-in-tokyo-and-sao-paulo-regions/
C5
https://aws.amazon.com/jp/about-aws/whats-new/2018/04/amazon-ec2-c5-instances-are-now-available-in-seoul-and-tokyo-regions/

まず、M5/C5 インスタンスを起動するために必須な条件は下記となります。
1.ENA および NVMe 用のドライバを含む HVM AMI が必要
2.AMIまたはEC2のENAの有効化

1の条件を満たすためにはCentOS7.4にアップデートする事が必要です。
リリースノートで対応を謳っています。
https://wiki.centos.org/Manuals/ReleaseNotes/CentOS7
・ Amazon ENA drivers have been added to the kernel. For more information about ENA go to this page.
・ NVMe Over Fabric is now supported in the NVM-Express kernel driver.

後述しますが、ELRepo リポジトリから最新安定板カーネルのインストールをして
1の条件を満たした場合は、M5/C5 インスタンスで起動する事は出来ませんでした。
手元の検証では全滅、但し7.4にアップデート後にカーネルアップデートはOKです。

7.4にアップデートする時に気をつける点として、
素直に「yum update」でアップデートする事です。
下記2つでは起動しませんでした。

# yum update kernel*
# yum update kernel* centos*
あとは、アップデート前に「yum clean all」も忘れずに。

2の手順は公式にあるので、掻い摘んで。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/enhanced-networking-ena.html#test-enhanced-networking-ena

・対象インスタンスを停止
・AWS CLIを用いてENAの属性を有効化する(ローカルや別マシンから実行)
# aws ec2 modify-instance-attribute --instance-id instance_id --ena-support

・有効化を確認、Trueが返ってくればOK
# aws ec2 describe-instances --instance-ids instance_id --query 'Reservations[].Instances[].EnaSupport'
True

以上で準備は完了ですが、念のため起動確認するなら
対象インスタンスのAMI(※これも後述しますが、再起動有りで取得したもの)を
米国東部リージョンにコピーして M5/C5 で起動させてみて下さい。
検証はすべて米国東部リージョンで行いました。

さて、ここからは検証時に得た知見など、誰かの目に止まって
役に立てばいいなという情報を載せていきます。


CentOS7 の各バージョンからのアップデートと起動検証

■最新AWS Marketplace 公式CentOS 7 (x86_64) - with Updates HVM 1801_01
 リリース:CentOS Linux release 7.4.1708 (Core)
 カーネルバージョン:3.10.0-693.11.6.el7.x86_64
 起動条件:ENAを有効化

■CentOS 7.2
 リリース:CentOS Linux release 7.2.1511 (Core)
 カーネルバージョン:3.10.0-327.28.2.el7.x86_64
 起動条件:yum update, ENAを有効化

■CentOS 7.3
 リリース:CentOS Linux release 7.3.1611 (Core)
 カーネルバージョン:3.10.0-514.16.1.el7.x86_64
 起動条件:yum update, ENAを有効化

■CentOS7.4
 リリース:CentOS Linux release 7.4.1708 (Core)
 カーネルバージョン:3.10.0-693.5.2.el7.x86_64
 起動条件:ENAを有効化

例外.CentOS7.2 からアップデートした CentOS7.4
 リリース:CentOS Linux release 7.4.1708 (Core)
 カーネルバージョン:3.10.0-693.11.6.el7.x86_64
 起動条件:ENAを有効化しても起動せず、yum updateしても起動せず

Marketplaceと同一バージョンだが起動が出来なかった。
原因として考えられるのがAMIを稼働中のサーバから『再起動無し』で作成した事。
再起動有り、又は停止状態から取得したAMIでは起動出来ました。


『CentOS7.4にアップデート』した後に最新安定板カーネルのインストールする

※CentOS7.4 未満でELRepoの最新安定板カーネルにアップデートしてしまった場合、
 カーネルを元のバージョンにダウングレードしてから7.4にアップデートしたりと色々試しましたが、
 M5/C5インスタンスで起動させる事は出来ませんでした。方法はあると思いますが。。



システムログでは上記まで表示されるがSSHログインは出来ず
[random crng init done]でググって調べても解決までは至らず。。

『CentOS7.4にアップデート』した後に最新安定板カーネルをインストールする手順
・ELRepo リポジトリインストール
# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
正常なら何も表示されない
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

・最新安定板カーネルのインストール
# yum --enablerepo=elrepo-kernel install kernel-ml

・確認
# rpm -qa | grep "^kernel" | sort
kernel-ml-4.15.2-1.el7.elrepo.x86_64

デフォルトのカーネルを変更・指定する
※CentOS7 から ブートローダ がGRUBからGRUB2になっている
https://qiita.com/kjtanaka/items/9b5c18f399642a0679e9

・現在のデフォルトを調べる
# grub2-editenv list

・カーネルのリストを表示する
# awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (4.15.2-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-693.17.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-693.2.2.el7.x86_64) 7 (Core)

・デフォルト起動をインストールしたカーネル「0」に変更する
# grub2-set-default 0
# grub2-editenv list
saved_entry=0

・再起動してカーネルを確認
#reboot
#uname -r
4.15.2-1.el7.elrepo.x86_64

kernel-headers, kernel-tools, kernel-tools-libs なども -ml に入れ替える
・ml以外のカーネルを削除する
# yum remove kernel

・swapで入れ替える
# yum swap --enablerepo=elrepo-kernel kernel-headers -- kernel-ml-headers
# yum swap --enablerepo=elrepo-kernel kernel-tools-libs kernel-tools -- kernel-ml-tools-libs kernel-ml-tools

・再起動してカーネルを確認
# reboot
$ rpm -qa kernel\* | sort
kernel-ml-4.15.3-1.el7.elrepo.x86_64
kernel-ml-headers-4.15.3-1.el7.elrepo.x86_64
kernel-ml-tools-4.15.3-1.el7.elrepo.x86_64
kernel-ml-tools-libs-4.15.3-1.el7.elrepo.x86_64

・今後もmlを使うなら
ml : mainline stable
# vim /etc/yum.repos.d/elrepo.repo
[elrepo-kernel]
~
enabled=0

enabled=1

以上です。

次回はAmazon Elasticsearch ServiceとFluentdあたりを書くと思います。