阿里云容器服务中CentOS内核问题

意外收到阿里云容器服务的溪恒的回复和详细说明,感谢,并附录在文章末尾。

想试用一下阿里云的容器服务,结果要求内核是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)'

4 评论

  1. 不好意思,因为评论一直没成功,所以提交了几次,后来一下子刷出来3条,帮忙删掉下面多余的评论吧,抱歉~

  2. 您好,我是阿里云容器服务的溪恒
    关于内核的要求是这样的,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)’

    1. 感谢吖,可能当时处理我工单的工程师不太熟悉容器的问题。

      其实关于ECS对内核升级限制的顾虑,以及overlay和3.18内核的问题我都理解,只是容器服务文档在这个地方的描述推荐使用CentOS,而我的CentOS是很久以前装的,导致我以为ECS已经升级了默认CentOS的内核=。=

      我会把你的回复转载到正文中~

    2. 请问一下,上面脚本里,倒数第二个命令执行效果如下,请问怎么回事?
      [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 ~]#

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据