意外收到阿里云容器服务的溪恒的回复和详细说明,感谢,并附录在文章末尾。
想试用一下阿里云的容器服务,结果要求内核是3.18+,然后整出一堆事情,都跟内核有关。
我现在使用的几个服务器都是CentOS,没辙,之前升级php7的时候Ubuntu14给我留下的印象实在太渣了,这也促使我后来转投CentOS……
然后这次轮到了CentOS,果然坑是踩不完的,首先查看了自己的操作系统内核是3.10+,显然是不够的,然后阿里云容器的文档又说推荐CentOS或者Ubuntu的操作系统,因为阿里云对这两个系统进行了严格的验证巴拉巴拉,于是乎考虑是那台租了两年多的老服务器操作系统版本太旧了,于是执行了停机操作,并查看能不能升级系统盘,当然,我只是打算看看现在可选的操作系统有没有新的版本,并没有真的升级系统
于是坑出现了,重新启动服务器的时候,服务器无法启动,最后提交工单才解决……
记录原因如下:
因为yum update命令会自动升级内核,而阿里云ECS的文档中要求用户尽可能不要自己升级内核,因为升完内核以后分分钟不可用。
客服工程师最后给了我一样的答案。
特么坑爹啊,不能升级内核,你在提供镜像的时候不能直接就把配置文件提供好吗??
好吧,坑踩完,记录如下:
问题一:yum update的时候不要升级内核
// vi /etc/yum.conf
// 在 [main] 后面加入以下两行代码
exclude=kernel*
exclude=centos-release*
问题二:万一升级了怎么降回来
- 查看系统内部有多少个内核:
cat /boot/grub2/grub.cfg |grep menuentry
- 查看配置使用的内核
grub2-editenv list
- 修改使用的内核(要根据现有的内核的名称填写)
grub2-set-default "CentOS Linux (3.10.0-123.9.3.el7.x86_64) 7 (Core)"
来自阿里云容器服务的溪恒的说明
关于内核的要求是这样的,centos > 3.18 ubuntu > 3.13
所以 ubuntu 14.04 和 centos+升级内核 都是可以的
因为在centos的默认的3.10的内核对docker的overlay存储驱动支持存在一些问题,到3.18的内核overlay存储才比较稳定,ECS不让升级内核是因为担心内核可能不兼容,而容器服务使用的内核经过了我们的兼容性测试,你可以通过这些方法使用:添加节点的时候选择自动添加的方式,这个会自动替换数据盘到我们做的系统,就无需关心升级内核
通过脚本升级elrepo 4.4的内核,这个内核经过了我们的兼容性测试,脚本如下:
yum update -y
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 install -y linux-firmware
yum install -y perl
wget http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/elrepo-kernel-lt/kernel-lt-4.4.6-1.el7.elrepo.x86_64.rpm
wget http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/elrepo-kernel-lt/kernel-lt-devel-4.4.6-1.el7.elrepo.x86_64.rpm
wget http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/elrepo-kernel-lt/kernel-lt-headers-4.4.6-1.el7.elrepo.x86_64.rpm
rpm -i kernel-lt-4.4.6-1.el7.elrepo.x86_64.rpm
yum remove kernel-{firmware,headers,devel} -y
rpm -i kernel-lt-headers-4.4.6-1.el7.elrepo.x86_64.rpm
rpm -i kernel-lt-devel-4.4.6-1.el7.elrepo.x86_64.rpm
rm -f kernel-lt-headers-4.4.6-1.el7.elrepo.x86_64.rpm kernel-lt-devel-4.4.6-1.el7.elrepo.x86_64.rpm kernel-lt-4.4.6-1.el7.elrepo.x86_64.rpm
echo “exclude=kernel*” >> /etc/yum.conf
mkinitrd -f –allow-missing –with=xen-blkfront –preload=xen-blkfront –with=virtio_blk –preload=virtio_blk –with=virtio_pci –preload=virtio_pci –with=virtio_console –preload=virtio_console /boot/initramfs-4.4.6-1.el7.elrepo.x86_64.img 4.4.6-1.el7.elrepo.x86_64
grub2-set-default 'CentOS Linux (4.4.6-1.el7.elrepo.x86_64) 7 (Core)'
不好意思,因为评论一直没成功,所以提交了几次,后来一下子刷出来3条,帮忙删掉下面多余的评论吧,抱歉~
您好,我是阿里云容器服务的溪恒
关于内核的要求是这样的,centos > 3.18 ubuntu > 3.13
所以 ubuntu 14.04 和 centos+升级内核 都是可以的
因为在centos的默认的3.10的内核对docker的overlay存储驱动支持存在一些问题,到3.18的内核overlay存储才比较稳定,ECS不让升级内核是因为担心内核可能不兼容,而容器服务使用的内核经过了我们的兼容性测试,你可以通过这些方法使用:
添加节点的时候选择自动添加的方式,这个会自动替换数据盘到我们做的系统,就无需关心升级内核
通过脚本升级elrepo 4.4的内核,这个内核经过了我们的兼容性测试,脚本如下:
yum update -y
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 install -y linux-firmware
yum install -y perl
wget http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/elrepo-kernel-lt/kernel-lt-4.4.6-1.el7.elrepo.x86_64.rpm
wget http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/elrepo-kernel-lt/kernel-lt-devel-4.4.6-1.el7.elrepo.x86_64.rpm
wget http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/elrepo-kernel-lt/kernel-lt-headers-4.4.6-1.el7.elrepo.x86_64.rpm
rpm -i kernel-lt-4.4.6-1.el7.elrepo.x86_64.rpm
yum remove kernel-{firmware,headers,devel} -y
rpm -i kernel-lt-headers-4.4.6-1.el7.elrepo.x86_64.rpm
rpm -i kernel-lt-devel-4.4.6-1.el7.elrepo.x86_64.rpm
rm -f kernel-lt-headers-4.4.6-1.el7.elrepo.x86_64.rpm kernel-lt-devel-4.4.6-1.el7.elrepo.x86_64.rpm kernel-lt-4.4.6-1.el7.elrepo.x86_64.rpm
echo “exclude=kernel*” >> /etc/yum.conf
mkinitrd -f –allow-missing –with=xen-blkfront –preload=xen-blkfront –with=virtio_blk –preload=virtio_blk –with=virtio_pci –preload=virtio_pci –with=virtio_console –preload=virtio_console /boot/initramfs-4.4.6-1.el7.elrepo.x86_64.img 4.4.6-1.el7.elrepo.x86_64
grub2-set-default ‘CentOS Linux (4.4.6-1.el7.elrepo.x86_64) 7 (Core)’
感谢吖,可能当时处理我工单的工程师不太熟悉容器的问题。
其实关于ECS对内核升级限制的顾虑,以及overlay和3.18内核的问题我都理解,只是容器服务文档在这个地方的描述推荐使用CentOS,而我的CentOS是很久以前装的,导致我以为ECS已经升级了默认CentOS的内核=。=
我会把你的回复转载到正文中~
请问一下,上面脚本里,倒数第二个命令执行效果如下,请问怎么回事?
[root@iZ23n8k549mZ ~]# mkinitrd -f -allow-missing -with=xen-blkfront -preload=xen-blkfront -with=virtio_blk -preload=virtio_blk -with=virtio_pci -preload=virtio_pci -with=virtio_console -preload=virtio_console /boot/initramfs-4.4.6-1.el7.elrepo.x86_64.img 4.4.6-1.el7.elrepo.x86_64
usage: mkinitrd [–version] [–help] [-v] [-f] [–preload ]
[–image-version] [–with=]
[–nocompress]
(ex: mkinitrd /boot/initramfs-4.4.6-1.el7.elrepo.x86_64.img 4.4.6-1.el7.elrepo.x86_64)
不过重启了服务器之后,内核还是顺利到了4.4,但是这样不会有什么隐患吧?
[root@iZ23n8k549mZ ~]# uname -sr
Linux 4.4.6-1.el7.elrepo.x86_64
[root@iZ23n8k549mZ ~]#