Пришвидшення застосування MachineConfigs за допомогою параметру maxUnavailable

1. Загальний опис

Під час оновлення, Machine Config Operator (MCO) ізолює всі вузли в межах MachineConfigPool (MCP) до зазначеної кількості вузлів, які можуть бути недоступними maxUnavailable (якщо зазначено), за замовчуванням - 1. Ізоляція вузла призводить до видалення всіх подів на вузлі та позначення вузла як такого, що не може бути Scheduled. Після ізолювання вузла, Machine Config Daemon (MCD) застосовує нову конфігурацію машини, яка може, наприклад, включати оновлення операційної системи (OS) або застосування аргументів для запуску ядра (OS).

Ця інструкція описує кроки пришвидшення застосування MachineConfigs засобами Openshift та Стратегію по ручному видаленню pods після застосування/видалення/опрацювання MachineConfigs.

Інструкція буде корисна для адміністраторів платформи Openshift, які мають права доступу на кластері cluster-admin.

2. Виконання

  1. Налаштування параметра maxUnavailable для вибраного MachineConfigPool

    Для налаштування параметра maxUnavailable слід перейти в Administrator → Compute → MachineConfigPools → worker → YAML, та додати або замінити значення .spec.maxUnavailable на значення понад 1, за замовчуванням - 1.

  2. Стратегія по ручному видаленню pods після застосування/видалення/опрацювання MachineConfigs.

    Після того, як було застосовано/видалено/оновлено MachineConfigs для Worker Nodes, переходять в статус Not Schedulable та всі поди намагаються видалитись з цих Node. Для певних сервісів, такі як Ceph, Istio, Kafka, Redis, існують PodDisruptionBudget (PDB) конфігурація якого не дає просто так видалитись цим pods, залишаючи, як мінімум одну, що працює pod, для працездатності сервісу.

    Для опрацювання реєстрових Nodes, можна безпосередньо видалити такі pods, як istio-ingressgateway, rfr-redis-sentinel, rfs-redis-sentinel та kafka-cluster. Таким чином можна прискорити застосування/видалення/опрацювання MachineConfigs.

    Для опрацювання Logging та Ceph Nodes, треба зачекати приблизно 10 хвилин після застосування/видалення/опрацювання MachineConfigs, якщо у Nodes, статус не зміниться з жовтого на зелений, треба зайти в YAML самої Node та подивитись на анотацію machineconfiguration.openshift.io/state, якщо вона буде Working, значить якісь з pods "застрягли" та треба допомогти їм з видаленням. Для цього треба брати по одній Nodes з кожної категорії із Logging та Ceph Nodes та видаляти "застряглі" поди (ceph, istiod, istio-ingressgateway) і дочекатись поки ці ноди по одній не будуть в "зеленому" статусі Ready. Після того треба повторити ті самі дії для наступних Nodes.

    Для опрацювання Master Nodes бажано не оновлювати їх з maxUnavailable > 1!