ESXi Host and vCenter Server 6.0 to 6.5 update to solve kernel BUG at drivers/net/vmxnet3/vmxnet3_drv.c:1322

Постановка задачи.

Опишу вначале суть проблемы.

Виртуальная машинка под управлением Oracle Linux 6.8 стала самопроизвольно перезагружаться (кернел паник) с ошибкой в логе падения /var/crash/127.0.0.1-yyyy-mm-dd-hh:mm:ss/vmcore-dmesg.txt:

[67476.761292] kernel BUG at drivers/net/vmxnet3/vmxnet3_drv.c:1322!
[67476.761314] invalid opcode: 0000 [#1] SMP

Поиск навёл на статью KB Vmware, в которой говорится, что в версии ESXi 6.5 U1 этот баг с драйвером виртуальной карточки типа vmxnet3 был устранён. Как вариант для решения этого бага поможет замена виртуальных карточек с VMXNET3 на E1000, но мне нужен был железный вариант, поэтому нависла угроза апгрейда 🙂

На тот момент хозяйство для виртуализации представляло из себя следующее:

  1. Основной хост ESXi 6.0
  2. Бекапный хост ESXi 6.5
  3. VCSA vCenter Server 6.5

После изучения темы апгрейдов сформировался следующий план:

  1. Сначала нужно проапгрейдить vCenter Server 6.5 -> 6.5 U1, это необходимое условие перед обновлением хостов.
  2. Обновить бекапный хост 6.5 -> 6.5 U1
  3. Далее нужно перенести VCSA (виртуальная машина с vCenter Server) с основного хоста на бекапный и обновить основной хост 6.0 -> 6.5 U1

Рассмотрим подробнее каждый шаг.

1. vCenter Server 6.5 -> 6.5 U1

Для начала необходимо сделать снапшот и/или бекап VCSA, просто на всякий случай. Также у VSCA должен быть доступ в Интернет, иначе обновляться придётся с диска CD-ROM.

Есть несколько методов апгрейда:

  • через esxcli на самом хосте (ssh)
  • на Windows машине с помощью PowerCLI
  • с помощью появившейся, если не ошибаюсь, в 6.5 версии веб-утилиты VAMI – VMware vSphere Appliance Management.

Руководствуясь принципом KISS обновлять будем через VAMI.

Для доступа к ней, необходимо в браузере зайти на https://your_vsca_ip_or_domain:5480. Обратите внимание, что credentials в данном случае не такие, как для управления инфраструктурой – нужно использовать пользователя и пароль к ОС VSCA. Обычно это root и пароль, который вы указывали при начальной настройке VSCA.

В появившемся окне делаем действия в порядке, как на скриншоте:

Т. е. Выбираем слева вкладку Update, нажимаем Check Update, откроется список, в котором выбираем Check Repository. Дожидаемся окончания проверки. Нажимаем Install Updates, Install Updates. После этого принимаем Лиц. соглашение и скрестив пальцы ждем окончания процесса обновления. По окончании, нажимаем Ок, идём на вкладку Summary, жмем Reboot и подтверждаем перезагрузку:vCenter Appliance загружается и инициализируется довольно долго, минут 5, может быть 10. Поэтому не переживайте, если ОС уже загрузилась, но в браузере выдает ошибки при попытке зайти в интерфейс управления инфраструктурой – подождите.

2. Обновление бекапного хоста ESXi 6.5 -> 6.5 U1

Этот процесс довольно простой, т. к. версия релиза такая же, как и у нужного нам апдейта.

Заходим на флеш-версию интерфейса: https://your_vsca_ip_or_domain/vsphere-client/?csp

Идем в Host and Clusters:

Важно: останавливаем (выключаем, не пауза) все виртуальные машины на хосте перед обновлением!

Выбираем нужный нам хост мышкой и идём на вкладку Update Manager.

Здесь необходимо вначале прикрепить baseline к хосту, для этого нажимаем вначале Scan for Updates, ставим все галочки и Ok. Внизу появится прогресс процесса проверки обновлений, дожидаемся окончания.

Теперь нажимаем Attach Baseline и выбираем Critical Host Patches и Non-Critical Host Patches. Названия говорят сами за себя. Подтверждаем. Можно для верности сделать еще раз Scan for Updates.

Теперь выбираем Stage Patches на вкладке Update Manager.

Выбираем baseline’ы, далее выбираем наш хост и патчи, которые хотим установить.

Собственно для установки патчей нажимаем Remediate на вкладке Update Manager.

Выбираем снова нужные baseline. Затем хост, затем патчи, в Advanced Options можно запланировать апдейт, я ничего не менял и на шаге 5 также всё оставил по дефолту. Соглашаемся и ждем окончания обновления.

3. Обновление основного хоста ESXi 6.0 -> 6.5 U1

VSCA в моём случае находилось на основном хосте и чтобы не рубить ветку, на которой сижу, я решил перенести VSCA на бекапный хост. Воспользовался для этого репликацией в Nakivo Backup & Replication. Рассказ об этой софтине – отдельная тема. В общем, потушил я VSCA на основном хосте и запустил на бекапном.

С этим апдейтом всё оказалось несколько сложнее, т к версия релиза установленного ESXi и патча не совпадают. Тут простым пропатчиванием уже не отделаешься. Нужно апгрейдить. А для апгрейда необходим установочный образ гипервизора, который берем с сайта vmware.

Моя задача еще осложнилась тем, что на сервере установлена карточка Solarflare, драйверов для которой по-умолчанию нет в установочном образе, но они есть в виде VIB и offline bundle на сайте производителя. И эти отсутствующие драйвера необходимо добавить в имейдж.

Для добавления драйверов в установочный образ vmware нам понадобится Windows машина. Ранее использовалась утилита ESXi-Customizer с удобный интерфейсом добавления бандлов, но она уже не поддерживается c 2015 года и для подготовки образа для установки вручную с сд-диска на сервер эта утилита еще подходит, но вот для vCenter – нет, он не принимает образ, созданный ESXi-Customizer. Поэтому будем мучаться с консолью PowerCLI.

Выполняем следующие шаги:

  1. Скачиваем и устанавливаем PowerCLI.
  2. Скачиваем offline bundle драйвер для нужного нам железа. Для Solarflare он находится здесь.
  3. Скачиваем Offline bundle установочного образа vmware с сайта vmware. В моём примере мне нужен был HP customized образ, с драйверами для HP серверов. Внимательно – скачиваем .zip, не .iso!
  4. Создаем отдельную папку (для удобства и копируем туда оффлайн бандлы драйвера и установочного образа. В моем примере буду использовать папку E:\vmware\test.

    Заходим в свойства .zip файлов и нажимаем Unblock – так мы сможем оперировать ими в PowerCLI, запущенной не под Администратором.
  5. Запускаем PowerCLI консоль из Пуск, дожидаемся инициализации.
  6. Добавляем установочный образ, указав путь к нему командой:
     PowerCLI C:\> Add-EsxSoftwareDepot -DepotUrl E:\vmware\test\update-from-esxi6.5-6.5_update01.zip

    Вы увидите похожий результат:

    Depot Url
     ---------
     zip:E:\vmware\test\update-from-esxi6.5-6.5_update01.zip?index.xml
  7. Проверяем, что образ добавлен, должен быть в списке:
    PowerCLI C:\> Get-EsxImageProfile
    
    Name Vendor Last Modified Acceptance Level
    ---- ------ ------------- ----------------
    ESXi-6.5.0-20170701001s-no-... VMware, Inc. 7/7/2017 5:3... PartnerSupported
    ESXi-6.5.0-20170702001-no-t... VMware, Inc. 7/7/2017 5:3... PartnerSupported
    ESXi-6.5.0-20170701001s-sta... VMware, Inc. 7/7/2017 5:3... PartnerSupported
    ESXi-6.5.0-20170702001-stan... VMware, Inc. 7/7/2017 5:3... PartnerSupported
  8. Образ read-only, поэтому для начала нам его необходимо клонировать. Нужно получить имя командой:
    PowerCLI C:\> Get-EsxImageProfile | Select Name
    
    Name
    ----
    ESXi-6.5.0-20170701001s-no-tools
    ESXi-6.5.0-20170702001-no-tools
    ESXi-6.5.0-20170701001s-standard
    ESXi-6.5.0-20170702001-standard
  9. На этом шаге необходимо определиться с тем, какой имейдж клонировать (лучше standard, параметр -CloneProfile), а также с именем нового имейджа (параметр -Name) и названием вендора (параметр -Vendor). Мой пример:
    PowerCLI C:\> New-EsxImageProfile -CloneProfile ESXi-6.5.0-20170702001-standard -Name Test_ESXi_6.5_with_SFC -Vendor TestCorporation
    
    Name Vendor Last Modified Acceptance Level
    ---- ------ ------------- ----------------
    Test_ESXi_6.5_with_SFC TestCorporation 7/7/2017 5:3... PartnerSupported
  10. Для проверки посмотрим еще раз список имейджев, отметив в нём наличие нашего нового:
    PowerCLI C:\> Get-EsxImageProfile | Select Name,Vendor
    
    Name Vendor
    ---- ------
    ESXi-6.5.0-20170701001s-no-tools VMware, Inc.
    ESXi-6.5.0-20170701001s-standard VMware, Inc.
    ESXi-6.5.0-20170702001-no-tools VMware, Inc.
    Test_ESXi_6.5_with_SFC TestCorporation
    ESXi-6.5.0-20170702001-standard VMware, Inc.
  11. Теперь нужно добавить бандл с нашим драйвером примерно также, как и с образом:
    PowerCLI C:\> Add-EsxSoftwareDepot -DepotUrl 'E:\vmware\test\SF-114406-DH-5_(SF-111982-LS-8)_Solarflare_VMware_ESXi_5.5___6.0___6.5_driver_(Offline_Bundle).zip'
    
    
    Depot Url
    ---------
    zip:E:\vmware\test\SF-114406-DH-5_(SF-111982-LS-8)_Solarflare_VMware_ESXi_5....
  12. Узнаем, сколько пакетов находится в нашем бандле командой:
    PowerCLI C:\> Get-EsxSoftwarePackage -SoftwareDepot 'E:\vmware\test\SF-114406-DH-5_(SF-111982-LS-8)_Solarflare_VMware_ESXi_5.5___6.0___6.5_driver_(Offline_Bundl
    e).zip'
    
    Name Version Vendor Creation Date
    ---- ------- ------ ------------
    net-sfc 4.10.4.1000-1OEM.550.0.0.13... Solarflare 1/20/2017...
  13. Теперь мы можем добавить пакет к нашему образу, используя полученное только что имя в параметре -SoftwarePackage:
    PowerCLI C:\> Add-EsxSoftwarePackage -SoftwarePackage net-sfc -ImageProfile Test_ESXi_6.5_with_SFC
    
    Name Vendor Last Modified Acceptance Level
    ---- ------ ------------- ----------------
    Test_ESXi_6.5_with_SFC TestCorporation 2/2/2018 10:... PartnerSupported

    Если у вас несколько пакетов, повторите команду для всех пакетов.

    Если драйвер скачан не из официального ресурса или любительская сборка, то может выбить ошибку вида:

    add-esxsoftwarepackage : VIB VFrontDe_bootbank_net51-r8169_6.011.00-2vft.510.0.0.799733’s acceptance level is
    community, which is not compliant with the ImageProfile acceptance level partner
    At line:1 char:1

    Нужно поменять acceptance level командой:

    PowerCLI C:\> Set-EsxImageProfile -Name new6.5realtek -AcceptanceLevel community

  14. Проверим, есть ли наш пакет в образе, для этого определим переменную и вызовем свойство viblist двумя командами, как показано ниже:
    PowerCLI C:\> $ip = Get-EsxImageProfile -Name Test_ESXi_6.5_with_SFC
    PowerCLI C:\> $ip.viblist
    
    Name Version Vendor Creation Date
    ---- ------- ------ ------------
    ne1000 0.8.0-16vmw.650.1.26.5969303 VMW 7/7/2017 ...
    vmkplexer-vmkplexer 6.5.0-0.0.4564106 VMW 10/27/201...
    sata-ata-piix 2.12-10vmw.650.0.0.4564106 VMW 10/27/201...
    net-usbnet 1.0-3vmw.650.0.0.4564106 VMW 10/27/201...
    i40en 1.3.1-5vmw.650.1.26.5969303 VMW 7/7/2017 ...
    ...
    net-sfc 4.10.4.1000-1OEM.550.0.0.13... Solarflare 1/20/2017...
    ...
  15. Будет длинный список, в котором должен быть наш пакет или несколько, если добавляли не один. Можно упростить поиск путем выборки по вендору, как показано ниже:
    PowerCLI C:\> $ip.viblist | Where-Object {$_.vendor -like "Solarflare*"}
    
    Name Version Vendor Creation
     Date
    ---- ------- ------ ------------
    net-sfc 4.10.4.1000-1OEM.550.0.0.13... Solarflare 1/20/2017...
  16. Теперь нужно экспортировать наш образ собственно в файл .iso для установки/апдейта ESXi хоста. Указываем имя образа и путь к .iso файлу:
    PowerCLI C:\> Export-EsxImageProfile -ImageProfile Test_ESXi_6.5_with_SFC -FilePath E:\vmware\test\ESXi_HPE_6.5_with_SFC.iso -ExportToIso

    Ждем окончания операции и проверяем, что файл создался на диске:

Всё, образ есть, теперь его можно добавить в vCenter. Возвращаемся в веб-морду vCenter и на вкладке Update Manager, где мы устанавливали патчи нажимаем Go to Admin View.

Здесь у меня уже добавлен образ, но вам следует его добавить нажав вначале ESXi Images:

А затем Import ESXi Image, выбрать созданный нами ранее образ и загрузить его:

Идем на вкладку Hosts Baselines и нажимаем + New Baseline, выбираем тип Host Upgrade и вводим имя и описание:

Далее выбираем загруженный нами образ ESXi:

И завершаем процедуру. По окончании, наш новый baseline должен появится в списке в группе Custom на вкладке Hosts Baselines.

Возвращаемся в Update Manager хоста, который хотим апгрейдить и выбираем Attach Baseline, как делали ранее с патчами, только на этот раз выбираем наш новосозданный baseline в группе Upgrade Baselines:

И повторяем процедуру как в пункте 2: Check for Updates, Stage Patches, Remediate. Только вместо патчей выбираем наш апгрейд.

Когда апгрейд закончится и хост снова появится в инвентаре vCenter Server, можете установить патчи на него описанным в пункте 2 способом, чтобы хост был последней версии.

Вроде бы всё, ничего не забыл. Надеюсь кому-то поможет эта статья или может быть мне самому, если будет похожая задача.

Источники:

  1. https://tinkertry.com/easy-upgrade-to-vcsa-65u1
  2. http://blog.myvmx.com/2016/04/custom-esxi-image-iso-using-powercli.html
  3. https://www.v-front.de/p/esxi-customizer.html
  4. http://www.vmwarearena.com/how-to-upgrade-esxi-6-0-to-esxi-6-5-using-vmware-update-manager/
  5. http://pubs.vmware.com/vsphere-51/index.jsp?topic=%2Fcom.vmware.powercli.cmdletref.doc%2FNew-EsxImageProfile.html
  6. https://www.virten.net/vmware/vmware-esxi-image-profiles/#esxi6.7