Архив рубрики: Публикации

Основные новые функции в Fedora 34

Первой установкой Fedora была Fedora 19, кодовое имя «Schrödinger’s Cat», названное в честь квантово-механического мысленного эксперимента с котом Шредингера. В то время версии Fedora выпускались с числовой версией и кодовым именем до того, как было отменено соглашение об именах: «Какой облом!».

Тем не менее, с тех пор мы ни разу не оглядывались назад, а перенесся в 2021 год, и Fedora 34 уже на подходе. Мы в восторге от последней версии Fedora 34, ее последних функций, обновленных наборов инструментов и GNOME 40.

В новой Fedora 34 появятся новые номера, вызывающие волнение; Gnome 40, Ruby 3.0, OpenSSL3.0 и многие новые числа и функции, освещенные в этой статье.

 

Дата выпуска Fedora 34

Бета-версия Fedora 34 доступна для загрузки, что означает, что следующим шагом Fedora Project станет выпуск Fedora Linux 34. Выпуск Fedora Linux 34 запланирован на конец апреля. Неофициальная дата выпуска — 20 апреля 2021 года. Эта дата не может наступить раньше для энтузиастов Fedora или для тех, кто хотел бы протестировать или перейти на Fedora.

 

Представляем новые функции Fedora 34

Окружение рабочего стола — GNOME 40

Fedora Linux 34 Workstation включает GNOME 40, новейшую версию среды рабочего стола GNOME. Fedora 34 — первый официальный дистрибутив Linux, предлагающий GNOME 40 по умолчанию с новой установкой.

Так что нового в GNOME 40 на Fedora 34? Макеты изменились с вертикальной на горизонтальную, но большинство функций верхней панели остались без изменений. Он имеет черточку внизу, а рабочие области расположены в виде горизонтальной полосы. Вы можете легко переключаться между рабочими областями и запускать приложения. Fedora 34 предлагает лучший пользовательский интерфейс, перетаскивая его, когда эскизы рабочей области появляются над измельчением приложения.

Интересный факт:

С этого момента GNOME меняет свое соглашение об именах и схемах для новых выпусков. Четные числа, используемые в серии GNOME 3.x, например 3.34, 3.36, 3.38, будут заменены схемой основных чисел. GNOME 40, GNOME 41, GNOME 42 и т. д. Станут новыми схемами. Намного проще!

 

Ключевые изменения в GNOME 40

Метки с многострочными значками

При наведении указателя мыши на сетку оболочки GNOME вы увидите многострочные метки значков с полным текстом имени приложения.

Горизонтальная прокрутка для сетки приложения

Сетка приложений в версиях GNOME до 40 прокручивается по вертикали, но в Fedora Linux 34 есть сетка приложений, которая прокручивается по горизонтали с индикаторами страниц внизу. Вы можете легко искать и запускать установленные приложения в вашей системе. Новая функция хорошо сочетается с сенсорными устройствами и может показаться странной с прокруткой колесика мыши.

Улучшения приложения для файлов

Приложение для работы с файлами может оказаться самым большим бенефициаром в новом выпуске GNOME 40. К новым функциям можно отнести:

  • Простой, чистый и лучший диалог предпочтений.
  • Теперь вы можете отсортировать файлы по дате их создания.
  • Текущие файловые операции позволяют лучше и точнее оценивать время.
  • Вы можете запускать исполняемые текстовые файлы прямо из приложения «Файлы».

Календарь GNOME

В приложении-календаре есть 15-минутное напоминание.

 

Окружение рабочего стола — KDE Plasma 5.21

Если вы предпочитаете KDE в качестве среды рабочего стола, Fedora Linux 34 включает в себя KDE Plasma 5.21, который использует готовый сервер отображения Wayland. Он использует Systemd при запуске, что сокращает время запуска. Сервер отображения имеет ускоренную трехмерную графику, поддержку безголового дисплея и графические процессоры NVIDIA. Архитектура aarch64 поставляется с Fedora KDE Plasma Desktop Spin и доступна для установки.

LXQt 0,16

Проект Fedora обновил базу LXQt до последней версии в Fedora 34.

Xfce 4.16

Xfce — это легкая среда рабочего стола, доступная для дистрибутивов Linux. Последняя среда рабочего стола Xfce, Xfce 4.16, использует GTK3, имеет новые значки и множество новых функций, доступных в Fedora Linux 34.

 

PipeWire для PulseAudio

В Fedora Linux 34 в качестве звукового демона по умолчанию используется PipeWire для управления и микширования аудиопотоков. Вы получите большую гибкость и лучшее качество звука с PipeWire. PipeWire был интегрирован в Fedora Linux 34 для создания единой звуковой инфраструктуры для работы с контейнерами, профессионального микширования и использования на рабочем столе. В целом, PipeWire более безопасен и предлагает лучшее качество звука в Fedora 34, чем со звуковым демоном PulseAudio, который использовался по умолчанию в предыдущих выпусках Fedora. Я надеюсь, что мы увидим конец многих проблем, с которыми пользователи Fedora столкнулись с PulseAudio.

 

Представляем прозрачное сжатие BTRFS

BTRFS была файловой системой по умолчанию для рабочих станций Fedora со времен Fedora Linux 33, но команда проекта Fedora сделала лучше в Fedora 34. Fedora 34 добавила прозрачное сжатие в BTRFS, сэкономив больше дискового пространства и увеличив срок службы твердотельных накопителей. Команда проекта Fedora закладывает основу для будущего улучшения сжатия, но с Fedora 34 мы уже можем наблюдать улучшение производительности чтения и записи. Будущее выглядит безоблачным, и функции могут стать лучше с новыми выпусками Fedora.

 

i3 тайловый оконный менеджер

Тайловый оконный менеджер i3 для x11 обеспечивает скорость и переносимость в Fedora 34. Тайловые оконные менеджеры могут устрашать неопытных пользователей, поскольку они полностью отличаются от KDE и GNOME, которые управляются с помощью меню. Официальный оконный менеджер i3, доступный в Fedora 34, быстр и полностью настроен. Диспетчер окон i3 отличается небольшим объемом памяти и памяти, что может быть привлекательно для существующих и новых пользователей Fedora.

 

Systemd-oomd

Systemd-oomd обеспечивает лучший пользовательский опыт в ситуациях нехватки памяти. Systemd-oomd по умолчанию доступен в некоторых спинах Fedora. В Fedora 34 в качестве демона по умолчанию для всех спинов и вариантов используется System-oomd. System-oomd позволит Fedora 34 быстро выйти из ситуаций, связанных с нехваткой ресурсов. System-oomd использует информацию о сбоях в работе Linux для принятия решений, которые помогут восстановить систему после проблем с зависанием раньше, чем позже.

 

Новые возможности для разработчиков программного обеспечения

Fedora считается лучшей операционной системой для разработки программного обеспечения, которая у нас есть, если вы спросите любого разработчика программного обеспечения. Fedora Linux 34 включает в себя почти все инструменты разработки, которые вам когда-либо понадобятся в репозиториях, а весь набор инструментов и пакеты Fedora Linux 34 были обновлены.

Ящик для инструментов

Fedora 34 имеет набор инструментов, который дает разработчикам лучший опыт разработки и отладки контейнерных приложений. Разработчики могут безопасно устанавливать инструменты разработки, запускать различные конфигурации, опробовать свои приложения, сохраняя при этом стабильность своей операционной системы Fedora. Вы можете легко настроить контейнеры RHEL в наборе инструментов и разрабатывать приложения в RHEL.

Пакеты и инструментальные средства

  • Ruby 3.0. Ruby 3.0 включает новые функции, такие как RBS, Ractor и планировщик, что упрощает и ускоряет разработку приложений в Fedora 34.

  • Binutils 2.35. Fedora 34 включает более новую версию Binutils 2.35, которая была перебазирована с Binutils 2.34, и поставляется с поддержкой DWARF-5 и множеством исправлений ошибок для улучшения взаимодействия с пользователем.
  • Golang 1.16. Новый пакет Golang обеспечивает надежную среду разработки для проектов, написанных на Fedora 34.
  • IBus 1.5.24
  • LLVM 12
  • BIND 9.16
  • MariaDB 10.5
  • Ruby on Rails 6.1
  • OpenSSL3.0
  • GCC 11
  • glibc 2.33

 

Лучшее будущее!

Fedora 34 обеспечивает более удобное взаимодействие с пользователем, особенно с GNOME 40. Fedora Linux 34 — это устаревший дистрибутив общего назначения, а новые наборы инструментов и обновления идеально подходят для разработки. Fedora 34 приносит свободу, друзей, функции и является первым крупным дистрибутивом Linux, предлагающим GNOME 40 «из коробки».



2021-06-19T12:12:11
Fedora

Основные обязанности инженера DevOps

Изучение основных обязанностей инженера DevOps

В обязанности инженера — программиста уже достаточно хорошо известна. Но необходимо изучить, как меняются сценарии в случае DevOps Engineer:

 

Планирование развертывания программного обеспечения

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

 

Управляющий код

Управление кодом — важный аспект для любого программного обеспечения, работающего в производственной среде. Регулярный аудит кода очень помогает свести к минимуму ошибки, которые могут возникнуть в производственной среде. Инженеры DevOps заботятся о тонкой настройке уже существующего кода, созданного с момента создания программного обеспечения альфа-уровня, а также пост-продакшн.

 

Документация процедуры развертывания

Даже отличное программное обеспечение было бы бесполезным, если бы к нему не было четкой и краткой документации. Инженеры-программисты документируют, как создавать программное обеспечение, а также развертывать его. Но инженеры DevOps сосредоточены исключительно на документировании процедуры развертывания.

Чем старее программное обеспечение из-за его использования в производственной среде, тем важнее тщательно проверять процесс его развертывания. Следовательно, документация — это постоянный процесс, который так же важен, как и исправления кода. Лучшая документация = Меньшие ошибки. Вы знали:


Тестирование только стабильных версий ПО

В отличие от инженеров-программистов, роли DevOps сосредоточены только на стабильных выпусках, поскольку только эти версии важны для развертывания в среде производственного уровня. Программное обеспечение, которое завершило свой первый ADLC ( жизненный цикл разработки приложений ), должно быть тщательно протестировано на предмет его потенциала в качестве стабильной производственной версии, и об этом позаботится специальный инженер DevOps.

 

Отчеты об ошибках с критическим исправлением (при необходимости)

Эта часть представляет собой комбинацию документирования и исправления ошибок. Когда стабильная версия работает в производственной среде, все ошибки, обнаруженные во время этого процесса, должны быть тщательно исправлены для следующего стабильного выпуска программного обеспечения.

В целом, ответственность за исправление ошибок лежит на разработчиках. Но в случае необходимости инженеры DevOps также могут вмешаться и сотрудничать для исправления критических по своей природе ошибок. Таким образом, можно аккуратно ускорить исправление ошибок критического уровня.

Кроме того, документирование предотвращения или временных обходных путей (до тех пор, пока они не будут исправлены) ошибок, может быть чрезвычайно полезным для эффективности и надежности программного обеспечения. Это напрямую влияет на функциональность, удобство использования и безопасность.

 

Развертывание стабильных выпусков в производственных средах

После подтверждения надежности и эффективности программного обеспечения на основе тщательного тестирования, о котором говорилось выше, оно, наконец, развертывается в производственной среде с помощью пошаговых руководств, которые ранее были задокументированы инженером DevOps. Значение документации лучше всего понимается только при развертывании программного обеспечения в производственной среде.

 

Сопровождение и мониторинг развертываний

Программное обеспечение, запущенное на производстве, требует постоянного обслуживания и мониторинга. Инженер DevOps следит за актуальностью программного обеспечения и платформ, на которых оно развернуто. Именно на этом этапе можно записывать поведение на производственном уровне для повышения удобства обслуживания в будущем. Это включает в себя ошибки производственного уровня, необходимость новых функций, а также улучшения пользовательского интерфейса и безопасности.

 

Перепланировка дизайна на основе поведения на уровне производства

Планирование развертывания программного обеспечения — это непрерывный процесс, который начинается с предварительного плана и концепции развертывания инструмента для достижения поставленной цели. После выхода первого стабильного выпуска этот план подвергается тщательному пересмотру после каждого нового стабильного выпуска. Изменения в процедуре развертывания программного обеспечения основаны на обратной связи, полученной на каждой из фаз жизненного цикла разработки приложения и жизненного цикла разработки системы.

Итак, это был обзор понимания важности роли DevOps Engineer. Их разнообразные обязанности явно выделяют их и подчеркивают их потребность в обеспечении непрерывного улучшения программного обеспечения до тех пор, пока оно не достигнет конца срока службы. Большое спасибо всем преданным DevOps-инженерам!

Надеюсь, вы нашли эту статью полезной. Если у вас есть другие мысли, которыми вы можете поделиться в виде отзывов или предложений, сделайте это в разделе комментариев ниже.



2021-06-18T13:33:06
Программирование

Как установить Android-приложения с вашего ПК

Возможно, вам знаком этот сценарий: вы просматривали Интернет и наткнулись на интересное приложение, которое вызвало ваше любопытство. Вместо того, чтобы просто вставать и искать свой телефон, открывать Google Play Store, вручную искать приложение и нажимать кнопку «Установить», вы можете просто установить приложение Android прямо со своего компьютера. В этом посте мы покажем вам, как вы можете установить новое приложение на свой телефон Android, не прибегая к нему рук.

Перед началом работы

Прежде чем вы сможете выполнить этот подвиг, вам необходимо убедиться, что вы вошли в одну и ту же учетную запись Google на своем ПК и телефоне Android. Вы должны выровнять их заранее. Если вы не знаете, как переключаться между учетными записями Google на Android , ознакомьтесь с нашей предыдущей статьей, в которой описано, как это легко сделать.

Кроме того, это применимо только к приложениям в Play Store.

Когда вы нашли приложение, была ли на веб-странице прямая ссылка? Если это так, нажмите на него и перейдите прямо в Google Play Store в браузере вашего устройства.

Если на веб-сайте упоминается только название приложения, вам придется открыть новую вкладку в своем браузере, перейти на страницу Google Play Store и использовать панель поиска вверху, чтобы найти приложение.

Вы можете отфильтровать результаты, чтобы просматривать только приложения, выбрав эту категорию в меню слева. Когда вы найдете приложение, которое хотите установить на свой Android, щелкните его, чтобы перейти на страницу приложения.

Приступая к делу

Оказавшись на странице приложения, изучите детали. Проверьте, совместимо ли приложение с вашим устройством (ами). Если это так, вы должны увидеть «Это приложение доступно для всех ваших устройств».

Затем найдите зеленую кнопку «Установить» и нажмите на нее. Если вы использовали свою учетную запись Google для входа на несколько устройств, вам будет предложено выбрать, на какой из этих телефонов вы хотите установить новое приложение. Снова нажмите «Установить».

Вам будет предложено ввести пароль вашей учетной записи Google. Затем вам нужно будет выбрать свои предпочтения относительно того, когда вы хотите, чтобы аутентификация требовалась.

Независимо от вашего выбора, вам всегда придется аутентифицировать себя с помощью пароля, когда дело доходит до установки Android-приложения с другого устройства.

Как только вы подтвердите свой выбор, на экране появится всплывающее окно, информирующее вас о том, что «приложение скоро будет установлено на ваше устройство».

Нажмите OK, и вы должны увидеть зеленую кнопку «Установлено» на странице приложения в Play Store.

Затем вы можете пойти и проверить свой телефон. Вы должны увидеть приложение, ожидающее вас там. Теперь все, что осталось сделать, это нажать на него, чтобы запустить.

Заключение

Что замечательно в этом методе, так это то, что вы можете установить одно и то же приложение на несколько устройств без необходимости собирать их все в одном месте и выполнять одни и те же повторяющиеся шаги несколько раз. Вернитесь на страницу приложения в магазине Google Play в своем браузере и нажмите кнопку «Установлено». Выберите следующее устройство, на которое вы хотите установить приложение, и так далее.



2021-06-17T11:20:56
Вопросы читателей

Как усечь таблицу в MySQL

На этом этапе вам может потребоваться очистить таблицу и все хранящиеся в ней данные, сохранив структуру таблицы. В таком сценарии предложение усечения MySQL является очень эффективным запросом.

В этой статье показано, как использовать оператор TRUNCATE в MySQL для удаления всех данных в таблице базы данных.

Оператор TRUNCATE является частью операторов языка определения данных. Однако его функции аналогичны оператору DELETE, что делает его частью языка манипулирования данными.

Чтобы использовать оператор TRUNCATE, у вас должны быть привилегии DROP в базе данных.

 

Особенности Truncate

Ниже приведены некоторые характерные особенности оператора TRUNCATE, которые отличают его от оператора DELETE:

  1. Операцию усечения нельзя откатить, поскольку она выполняет неявную фиксацию.
  2. Он работает, удаляя таблицу и воссоздавая ее, сохраняя ее структуру, но не данные.
  3. Truncate поддерживает поврежденные таблицы, удаляя все данные и восстанавливая пустую таблицу.
  4. Он не вызывает никаких триггеров удаления.
  5. Сохраняет разбиение таблицы
  6. Оператор TRUNCATE не возвращает никакой информации о затронутых строках — это означает, что возвращаемое значение равно 0.

 

Основное использование

Общий синтаксис использования оператора TRUNCATE:

TRUNCATE TABLE tbl_name;

Примечание
Вы можете пропустить ключевое слово TABLE, и оператор TRUNCATE будет работать аналогично. Однако лучше добавить ключевое слово TABLE, чтобы избежать путаницы с функцией Truncate.

 

Пример использования

Давайте посмотрим на пример использования оператора TRUNCATE.

В этом примере мы будем использовать таблицу сотрудников, представленную в ресурсе ниже:

https://dev.mysql.com/doc/index-other.html

 

Сначала выберите несколько значений из таблицы, чтобы убедиться, что она не пуста:

SELECT * FROM employees LIMIT 10;

 

Теперь, когда мы подтвердили, что таблица заполнена данными, давайте попробуем усечь таблицу следующим образом:

SET FOREIGN_KEY_CHECKS = FALSE;



TRUNCATE TABLE employees;

Сначала мы устанавливаем для переменной FOREIGN_KEY_CHECK значение False, потому что оператор TRUNCATE не работает, если таблица содержит ограничения из других таблиц.

После того, как мы удалили возможность проверки ограничений из других таблиц, мы вызываем оператор TRUNCATE для удаления данных.

Вы можете подтвердить, щелкнув выбрать:

SELECT * FROM employees;

 

Примечание
ВНИМАНИЕ ! Не удаляйте проверку ограничений в таблицах реальной базы данных.

 

Заключение

В этой статье вы узнали, как использовать оператор TRUNCATE в MySQL для удаления данных из таблицы. Надеемся, этот урок был вам полезен.



2021-06-16T13:48:30
База данных MySQL

Как удалить проигрыватель Windows Media из Windows 10

Многие устаревшие программы и функции по-прежнему присутствуют в Windows 10. Одна из них — классический Windows Media Player , аудио/видеоплеер, который мы все когда-то использовали в прошлом.

В большинстве случаев Windows больше не использует проигрыватель Windows Media, поскольку существует множество альтернативных вариантов. Более того, прошло много времени с тех пор, как Microsoft в последний раз обновляла проигрыватель Windows Media. Кроме того, Windows Media Player вряд ли получит какие-либо обновления в будущем, поскольку недавно представленные приложения Groove Music и Movies & TV по умолчанию используются для аудио и видео соответственно.

Если вы один из тех пользователей, которые больше не используют Windows Media Player, вы можете избавиться от него, полностью удалив его из Windows 10.

В этом руководстве вы узнаете, как безопасно удалить Windows Media Player из Windows 10.

Шаг 1. Откройте настройки Windows 10. Перейдите на страницу Приложения > Приложения и функции .

Шаг 2: Щелкните ссылку Дополнительные функции.

Шаг 3: В списке установленных функций вы можете увидеть запись Windows Media Player . Нажмите на запись, чтобы открыть скрытую кнопку «Удалить».

Шаг 4: Нажмите кнопку «Удалить», чтобы удалить проигрыватель Windows Media из установленной Windows 10.

Установите Windows Media Player еще раз в Windows 10

Шаг 1. Перейдите в «Настройки» > «Приложения» > «Приложения и функции».

Шаг 2: Щелкните ссылку Дополнительные функции.

Шаг 3: Нажмите на опцию Добавить функцию.

Шаг 4. На открывшейся странице используйте поле поиска для поиска проигрывателя Windows Media.

Шаг 5: Выберите запись Windows Media Player и нажмите кнопку «Установить». Вот и все! Media Player будет установлен через несколько секунд.

Отключите Windows Media Player, не удаляя его

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

Шаг 1. Введите appwiz.cpl в поле поиска «Пуск»/на панели задач и нажмите клавишу «Ввод», чтобы открыть окно «Программы и компоненты».

Шаг 2. На левой панели щелкните ссылку «Включение или отключение компонентов Windows».

Шаг 3. В появившемся диалоговом окне функций Windows снимите флажок «Функции мультимедиа» и нажмите кнопку «ОК», чтобы отключить проигрыватель Windows Media.



2021-06-16T10:41:21
Вопросы читателей

Установка и настройка кластера Kubernetes на Ubuntu Server

Есть различные готовые реализации кластера Kubernetes, например:




  • Minikube — готовый кластер, который разворачивается на один компьютер. Хороший способ познакомиться с Kubernetes.
  • Kubespray — набор Ansible ролей.
  • Готовые кластеры в облаке, например AWS, Google Cloud, Yandex Cloud и так далее.




Использовать одну из готовых реализаций — быстрый и надежный способ развертывания системы оркестрации контейнеров Docker. Однако, мы рассмотрим ручное создание кластера Kubernetes из 3-х нод — один мастер (управление) и две рабочие ноды (запуск контейнеров).




Подготовка системы




Данные действия выполняем на всех узлах будущего кластера. Это необходимо, чтобы удовлетворить программные системные требования для нашего кластера.




Настройка системы




1. Задаем имена узлам. Для этого выполняем команды на соответствующих серверах:




hostnamectl set-hostname k8s-master1.dmosk.local




hostnamectl set-hostname k8s-worker1.dmosk.local




hostnamectl set-hostname k8s-worker2.dmosk.local




* в данном примере мы зададим имя k8s-master1 для мастера и, соответственно, k8s-worker1 и k8s-worker2 — для первого и второго рабочих нод. Каждая команда выполняется на своем сервере.




Необходимо, чтобы наши серверы были доступны по заданным именам. Для этого необходимо на сервере DNS добавить соответствующие А-записи. Или на каждом сервере открываем hosts:




vi /etc/hosts




И добавляем записи на подобие: 




192.168.0.15     k8s-master1.dmosk.local k8s-master1

192.168.0.20     k8s-worker1.dmosk.local k8s-worker1

192.168.0.25     k8s-worker2.dmosk.local k8s-worker2




* где, 192.168.0.15, 192.168.0.20, 192.168.0.25 — IP-адреса наших серверов, k8s-master1, k8s-worker1, k8s-worker2 — имена серверов, dmosk.local — наш внутренний домен.




2. Устанавливаем необходимые компоненты — дополнительные пакеты и утилиты. Для начала, обновим список пакетов и саму систему:




apt-get update && apt-get upgrade




Выполняем установку пакетов:




apt-get install curl apt-transport-https git iptables-persistent




* где:




  • git — утилита для работы с GIT. Понадобиться для загрузки файлов из репозитория git.
  • curl — утилита для отправки GET, POST и других запросов на http-сервер. Понадобиться для загрузки ключа репозитория Kubernetes.
  • apt-transport-https — позволяет получить доступ к APT-репозиториям по протоколу https.
  • iptables-persistent — утилита для сохранения правил, созданных в iptables (не обязательна, но повышает удобство).




В процессе установки iptables-persistent может запросить подтверждение сохранить правила брандмауэра — отказываемся.




3. Отключаем файл подкачки. С ним Kubernetes не запустится.




Выполняем команду для разового отключения:




swapoff -a




Чтобы swap не появился после перезагрузки сервера, открываем на редактирование файл:




vi /etc/fstab




И комментируем строку: 




#/swap.img      none    swap    sw      0       0




4. Загружаем дополнительные модули ядра.




vi /etc/modules-load.d/k8s.conf




br_netfilter

overlay




* модуль br_netfilter расширяет возможности netfilter (подробнее); overlay необходим для Docker.




Загрузим модули в ядро:




modprobe br_netfilter




modprobe overlay




Проверяем, что данные модули работают:




lsmod | egrep "br_netfilter|overlay"




Мы должны увидеть что-то на подобие:




overlay               114688  10

br_netfilter           28672  0

bridge                176128  1 br_netfilter




5. Изменим параметры ядра.




Создаем конфигурационный файл:




vi /etc/sysctl.d/k8s.conf 




net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1




net.bridge.bridge-nf-call-iptables контролирует возможность обработки трафика через bridge в netfilter. В нашем примере мы разрешаем данную обработку для IPv4 и IPv6.




Применяем параметры командой:




sysctl --system




Брандмауэр




Для мастер-ноды и рабочей создаем разные наборы правил.




По умолчанию, в Ubuntu брандмауэр настроен на разрешение любого трафика. Если мы настраиваем наш кластер в тестовой среде, настройка брандмауэра не обязательна.




1. На мастер-ноде (Control-plane)




Выполняем команду:




iptables -I INPUT 1 -p tcp --match multiport --dports 6443,2379:2380,10250:10252 -j ACCEPT




* в данном примере мы открываем следующие порты:




  • 6443 — подключение для управления (Kubernetes API).
  • 2379:2380 — порты для взаимодействия мастера с воркерами (etcd server client API).
  • 10250:10252 — работа с kubelet (соответственно API, scheduler, controller-manager).




Для сохранения правил выполняем команду:




netfilter-persistent save




2. На рабочей ноде (Worker):




На нодах для контейнеров открываем такие порты:




iptables -I INPUT 1 -p tcp --match multiport --dports 10250,30000:32767 -j ACCEPT




* где:




  • 10250 — подключение к kubelet API.
  • 30000:32767 — рабочие порты по умолчанию для подключения к подам (NodePort Services).




Сохраняем правила командой:




netfilter-persistent save




Установка и настройка Docker




На все узлы кластера выполняем установку Docker следующей командой:




apt-get install docker docker.io




После установки разрешаем автозапуск сервиса docker:




systemctl enable docker




Создаем файл:




vi /etc/docker/daemon.json




{

  "exec-opts": ["native.cgroupdriver=systemd"],

  "log-driver": "json-file",

  "log-opts": {

    "max-size": "100m"

  },

  "storage-driver": "overlay2",

  "storage-opts": [

    "overlay2.override_kernel_check=true"

  ]

}




* для нас является важной настройкой cgroupdriver — она должна быть выставлена в значение systemd. В противном случае, при создании кластера Kubernetes выдаст предупреждение. Хоть на возможность работы последнего это не влияет, но мы постараемся выполнить развертывание без ошибок и предупреждений со стороны системы.




И перезапускаем docker:




systemctl restart docker




Установка Kubernetes




Установку необходимых компонентов выполним из репозитория. Добавим его ключ для цифровой подписи:




curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -




Создадим файл с настройкой репозитория:




vi /etc/apt/sources.list.d/kubernetes.list




deb https://apt.kubernetes.io/ kubernetes-xenial main




Обновим список пакетов:




apt-get update




Устанавливаем пакеты: 




apt-get install kubelet kubeadm kubectl




* где:




  • kubelet — сервис, который запускается и работает на каждом узле кластера. Следит за работоспособностью подов.
  • kubeadm — утилита для управления кластером Kubernetes.
  • kubectl — утилита для отправки команд кластеру Kubernetes.




Нормальная работа кластера сильно зависит от версии установленных пакетов. Поэтому бесконтрольное их обновление может привести к потере работоспособности всей системы. Чтобы этого не произошло, запрещаем обновление установленных компонентов:




apt-mark hold kubelet kubeadm kubectl




Установка завершена — можно запустить команду:




kubectl version --client




… и увидеть установленную версию программы: 




Client Version: version.Info{Major:"1", Minor:"20", GitVersion:"v1.20.2", GitCommit:"faecb196815e248d3ecfb03c680a4507229c2a56", GitTreeState:"clean", BuildDate:"2021-01-13T13:28:09Z", GoVersion:"go1.15.5", Compiler:"gc", Platform:"linux/amd64"}




Наши серверы готовы к созданию кластера.




Создание кластера




По-отдельности, рассмотрим процесс настройки мастер ноды (control-plane) и присоединения к ней двух рабочих нод (worker).




Настройка control-plane (мастер ноды)




Выполняем команду на мастер ноде:




kubeadm init --pod-network-cidr=10.244.0.0/16




* данная команда выполнит начальную настройку и подготовку основного узла кластера. Ключ —pod-network-cidr задает адрес внутренней подсети для нашего кластера.




Выполнение займет несколько минут, после чего мы увидим что-то на подобие:




...

Then you can join any number of worker nodes by running the following on each as root:



kubeadm join 192.168.0.15:6443 --token f7sihu.wmgzwxkvbr8500al 

    --discovery-token-ca-cert-hash sha256:6746f66b2197ef496192c9e240b31275747734cf74057e04409c33b1ad280321




* данную команду нужно вводить на worker нодах, чтобы присоединить их к нашему кластеру. Можно ее скопировать, но позже мы будем генерировать данную команду по новой.




В окружении пользователя создаем переменную KUBECONFIG, с помощью которой будет указан путь до файла конфигурации kubernetes:




export KUBECONFIG=/etc/kubernetes/admin.conf




Чтобы каждый раз при входе в систему не приходилось повторять данную команду, открываем файл: 




vi /etc/environment




И добавляем в него строку: 




export KUBECONFIG=/etc/kubernetes/admin.conf




Посмотреть список узлов кластера можно командой:




kubectl get nodes




На данном этапе мы должны увидеть только мастер ноду:




NAME                      STATUS     ROLES                  AGE   VERSION

k8s-master.dmosk.local    NotReady   <none>                 10m   v1.20.2




Чтобы завершить настройку, необходимо установить CNI (Container Networking Interface) — в моем примере это flannel:




kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml




* краткий обзор и сравнение производительности CNI можно почитать в статье на хабре.




Узел управления кластером готов к работе.




Настройка worker (рабочей ноды)




Мы можем использовать команду для присоединения рабочего узла, которую мы получили после инициализации мастер ноды или вводим (на первом узле):




kubeadm token create --print-join-command




Данная команда покажет нам запрос на присоединения новой ноды к кластеру, например:




kubeadm join 192.168.0.15:6443 --token f7sihu.wmgzwxkvbr8500al 

    --discovery-token-ca-cert-hash sha256:6746f66b2197ef496192c9e240b31275747734cf74057e04409c33b1ad280321




Копируем его и используем на двух наших узлах. После завершения работы команды, мы должны увидеть:




Run 'kubectl get nodes' on the control-plane to see this node join the cluster.




На мастер ноде вводим:




kubectl get nodes




Мы должны увидеть: 




NAME                      STATUS   ROLES                  AGE   VERSION

k8s-master1.dmosk.local   Ready    control-plane,master   18m   v1.20.2

k8s-worker1.dmosk.local   Ready    <none>                 79s   v1.20.2

k8s-worker2.dmosk.local   Ready    <none>                 77s   v1.20.2




Наш кластер готов к работе. Теперь можно создавать поды, развертывания и службы. Рассмотрим эти процессы подробнее.




Pods




Поды — неделимая сущность объекта в Kubernetes. Каждый Pod может включать в себя несколько контейнеров (минимум, 1). Рассмотрим несколько примеров, как работать с подами. Все команды выполняем на мастере.




Создание




Поды создаются командой kubectl, например:




kubectl run nginx --image=nginx:latest --port=80




* в данном примере мы создаем под с названием nginx, который в качестве образа Docker будет использовать nginx (последнюю версию); также наш под будет слушать запросы на порту 80.




Чтобы получить сетевой доступ к созданному поду, создаем port-forward следующей командой:




kubectl port-forward nginx --address 0.0.0.0 8888:80




* в данном примере запросы к кластеру kubernetes на порт 8888 будут вести на порт 80 (который мы использовали для нашего пода).




Команда kubectl port-forward является интерактивной. Ее мы используем только для тестирования. Чтобы пробросить нужные порты в Kubernetes используются Services — об этом будет сказано ниже.




Можно открыть браузер и ввести адрес http://<IP-адрес мастера>:8888 — должна открыться страница приветствия для NGINX.




Просмотр




Получить список всех подов в кластере можно командой:




kubectl get pods




Например, в нашем примере мы должны увидеть что-то на подобие:




NAME    READY   STATUS    RESTARTS   AGE

nginx   1/1     Running   0          3m26s




Посмотреть подробную информацию о конкретном поде можно командой:




kubectl describe pods nginx




Запуск команд внутри контейнера




Мы можем запустить одну команду в контейнере, например, такой командой:




kubectl exec nginx -- date




* в данном примере будет запущена команда date внутри контейнера nginx.




Также мы можем подключиться к командной строке контейнера командой:




kubectl exec --tty --stdin nginx -- /bin/bash




Удаление




Для удаления пода вводим:




kubectl delete pods nginx




Использование манифестов




В продуктивной среде управление подами выполняется с помощью специальных файлов с описанием того, как должен создаваться и настраиваться под — манифестов. Рассмотрим пример создания и применения такого манифеста.




Создадим файл формата yml:




vi manifest_pod.yaml




apiVersion: v1

kind: Pod

metadata: 

  name: web-srv

  labels:

    app: web_server

    owner: dmosk

    description: web_server_for_site

spec:

  containers: 

    - name: nginx

      image: nginx:latest

      ports:

        - containerPort: 80

        - containerPort: 443



    - name: php-fpm

      image: php-fpm:latest

      ports:

        - containerPort: 9000



    - name: mariadb

      image: mariadb:latest

      ports:

        - containerPort: 3306




* в данном примере будет создан под с названием web-srv; в данном поде будет развернуто 3 контейнера — nginxphp-fpm и mariadb на основе одноименных образов.




Для объектов Kubernetes очень важное значение имеют метки или labels. Необходимо всегда их описывать. Далее, данные метки могут использоваться для настройки сервисов и развертываний.




Чтобы применить манифест выполняем команду:




kubectl apply -f manifest_pod.yaml




Мы должны увидеть ответ:




pod/web-srv created




Смотрим поды командой:




kubectl get pods




Мы должны увидеть:




NAME      READY   STATUS    RESTARTS   AGE

web-srv   3/3     Ready     0          3m11s




* для Ready мы можем увидеть 0/3 или 1/3 — это значит, что контейнеры внутри пода еще создаются и нужно подождать.




Deployments




Развертывания позволяют управлять экземплярами подов. С их помощью контролируется их восстановление, а также балансировка нагрузки. Рассмотрим пример использования Deployments в Kubernetes.




Создание




Deployment создаем командой со следующим синтаксисом:




kubectl create deploy <название для развертывания> --image <образ, который должен использоваться>




Например:




kubectl create deploy web-set --image nginx:latest




* данной командой мы создадим deployment с именем web-set; в качестве образа будем использовать nginx:latest.




Просмотр




Посмотреть список развертываний можно командой:




kubectl get deploy




Подробное описание для конкретного развертывания мы можем посмотреть так:




kubectl describe deploy web-set




* в данном примере мы посмотрим описание deployment с названием web-set.




Scaling




Как было написано выше, deployment может балансировать нагрузкой. Это контролируется параметром scaling:




kubectl scale deploy web-set --replicas 3




* в данном примере мы указываем для нашего созданного ранее deployment использовать 3 реплики — то есть Kubernetes создаст 3 экземпляра контейнеров.




Также мы можем настроить автоматическую балансировку:




kubectl autoscale deploy web-set --min=5 --max=10 --cpu-percent=75




В данном примере Kubernetes будет создавать от 5 до 10 экземпляров контейнеров — добавление нового экземпляра будет происходить при превышении нагрузки на процессор до 75% и более.




Посмотреть созданные параметры балансировки можно командой:




kubectl get hpa




Редактирование




Для нашего развертывания мы можем изменить используемый образ, например:




kubectl set image deploy/web-set nginx=httpd:latest --record




* данной командой для deployment web-set мы заменим образ nginx на httpd; ключ record позволит нам записать действие в историю изменений.




Если мы использовали ключ record, то историю изменений можно посмотреть командой:




kubectl rollout history deploy/web-set




Перезапустить deployment можно командой:




kubectl rollout restart deploy web-set




Манифест




Как в случае с подами, для создания развертываний мы можем использовать манифесты. Попробуем рассмотреть конкретный пример.




Создаем новый файл:




vi manifest_deploy.yaml




apiVersion: apps/v1

kind: Deployment

metadata:

  name: web-deploy

  labels:

    app: web_server

    owner: dmosk

    description: web_server_for_site

spec:

  replicas: 5

  selector:

    matchLabels:

      project: myweb

  template:

    metadata:

      labels:

        project: myweb

        owner: dmosk

        description: web_server_pod

    spec:

      containers:

        - name: myweb-httpd

          image: httpd:latest

          ports:

            - containerPort: 80

            - containerPort: 443

            

---

apiVersion: autoscaling/v2beta2

kind: HorizontalPodAutoscaler

metadata:

  name: web-deploy-autoscaling

spec:

  scaleTargetRef:

    apiVersion: apps/v1

    kind: Deployment

    name: myweb-autoscaling

  minReplicas: 5

  maxReplicas: 10

  metrics:

  - type: Resource

    resource:

      name: cpu

      target:

        type: Utilization

        averageUtilization: 75

  - type: Resource

    resource:

      name: memory

      target:

        type: Utilization

        averageUtilization: 80




* в данном манифесте мы создадим deployment и autoscaling. Итого, мы получим 5 экземпляров подов для развертывания web-deploy, которые могут быть расширены до 10 экземпляров. Добавление нового будет происходить при превышении нагрузки на процессор более чем на 75% или потреблением оперативной памяти более чем на 80%.




Чтобы создать объекты с помощью нашего манифеста вводим:




kubectl apply -f manifest_deploy.yaml




Мы должны увидеть:




deployment.apps/web-deploy created

horizontalpodautoscaler.autoscaling/web-deploy-autoscaling created




Объекты web-deploy и web-deploy-autoscaling созданы.




Удаление




Для удаления конкретного развертывания используем команду:




kubectl delete deploy web-set




Для удаления всех развертываний вместо названия deployment указываем ключ —all:




kubectl delete deploy --all




Удалить критерии autoscaling для конкретного развертывания можно командой:




kubectl delete hpa web-set




Удалить все критерии autoscaling можно командой:




kubectl delete hpa --all




Удалить объекты, созданные с помощью манифеста можно командой:




kubectl delete -f manifest_deploy.yaml




Services




Службы позволяют обеспечить сетевую доступность для развертываний. Существует несколько типов сервисов:




  • ClusterIP — сопоставление адреса с deployments для подключений внутри кластера Kubernetes.
  • NodePort — для внешней публикации развертывания.
  • LoadBalancer — сопоставление через внешний балансировщик.
  • ExternalName — сопоставляет службу по имени (возвращает значение записи CNAME).




Мы рассмотрим первые два варианта.




Привязка к Deployments




Попробуем создать сопоставления для ранее созданного развертывания:




kubectl expose deploy web-deploy --type=ClusterIP --port=80




* где web-deploy — deployment, который мы развернули с помощью манифеста. Публикация ресурса происходит на внутреннем порту 80. Обращаться к контейнерам можно внутри кластера Kubernetes.




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




kubectl expose deploy web-deploy --type=NodePort --port=80




* данная команда отличается от команды выше только типом NodePort — для данному deployment будет сопоставлен порт для внешнего подключения, который будет вести на внутренний (в нашем примере, 80).




Просмотр




Чтобы посмотреть созданные нами службы, вводим:




kubectl get services




Мы можем увидеть что-то на подобие:




NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE

web-deploy   NodePort    10.111.229.132   <none>        80:30929/TCP   21s




* в данном примере указано, что у нас есть служба типа NodePort, а к сервису можно подключиться по порту 30929.




Можно попробовать открыть браузер и ввести http://<IP-адрес мастера>:30929 — мы должны увидеть нужную нам страницу (в наших примерах, либо NGINX, либо Apache).




Посмотреть список сервисов с указанием селектором можно командой:




kubectl get services -o wide




Удаление




Удаляем созданную службу командой:




kubectl delete services web-deploy




* в данном примере будет удалена служба для развертывания web-deploy.




Удалить все службы можно командой:




kubectl delete services --all




Манифест




Как в случае с подами и развертываниями, мы можем использовать манифест-файлы. Рассмотрим небольшой пример.




vi manifest_service.yaml




apiVersion: v1

kind: Service

metadata:

  name: web-service

  labels:

    app: web_server

    owner: dmosk

    description: web_server_for_site

spec:

  selector:

    project: myweb

  type: NodePort

  ports:

    - name: app-http

      protocol: TCP

      port: 80

      targetPort: 80



    - name: app-smtp

      protocol: TCP

      port: 25

      targetPort: 25




* в данном примере мы создадим службу, которая будем связываться с развертыванием по лейболу project: myweb.




Ingress Controller




В данной инструкции не будет рассказано о работе с Ingress Controller. Оставляем данный пункт для самостоятельного изучения.




Данное приложение позволяет создать балансировщик, распределяющий сетевые запросы между нашими сервисами. Порядок обработки сетевого трафика определяем с помощью Ingress Rules.




Существует не маленькое количество реализаций Ingress Controller — их сравнение можно найти в документе по ссылке в Google Docs.




Для установки Ingress Controller Contour (среди множества контроллеров, он легко устанавливается и на момент обновления данной инструкции полностью поддерживает последнюю версию кластера Kubernetes) вводим:




kubectl apply -f https://projectcontour.io/quickstart/contour.yaml




Установка веб-интерфейса




Веб-интерфейс позволяет получить информацию о работе кластера в удобном для просмотра виде.




В большинстве инструкций рассказано, как получить доступ к веб-интерфейсу с того же компьютера, на котором находится кластер (по адресу 127.0.0.1 или localhost). Но мы рассмотрим настройку для удаленного подключения, так как это более актуально для серверной инфраструктуры.




Переходим на страницу веб-интерфейса в GitHub и копируем ссылку на последнюю версию файла yaml:







* на момент обновления инструкции, последняя версия интерфейса была 2.1.0.




Скачиваем yaml-файл командой:




wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml




* где https://raw.githubusercontent.com/kubernetes/dashboard/v2.1.0/aio/deploy/recommended.yaml — ссылка, которую мы скопировали на портале GitHub.




Открываем на редактирование скачанный файл:




vi recommended.yaml




Комментируем строки для kind: Namespace и kind: Secret (в файле несколько блоков с kind: Secret — нам нужен тот, что с name: kubernetes-dashboard-certs):




...

#apiVersion: v1

#kind: Namespace

#metadata:

#  name: kubernetes-dashboard

...

#apiVersion: v1

#kind: Secret

#metadata:

#  labels:

#    k8s-app: kubernetes-dashboard

#  name: kubernetes-dashboard-certs

#  namespace: kubernetes-dashboard

#type: Opaque




* нам необходимо закомментировать эти блоки, так как данные настройки в Kubernetes мы должны будем сделать вручную.




Теперь в том же файле находим kind: Service (который с name: kubernetes-dashboard) и добавляем строки type: NodePort и nodePort: 30001 (выделены красным):




kind: Service

apiVersion: v1

metadata:

  labels:

    k8s-app: kubernetes-dashboard

  name: kubernetes-dashboard

  namespace: kubernetes-dashboard

spec:

  type: NodePort

  ports:

    - port: 443

      targetPort: 8443

      nodePort: 30001

  selector:

    k8s-app: kubernetes-dashboard




* таким образом, мы публикуем наш сервис на внешнем адресе и порту 30001.




Для подключения к веб-интерфейсу не через локальный адрес, начиная с версии 1.17, обязательно необходимо использовать зашифрованное подключение (https). Для этого нужен сертификат. В данной инструкции мы сгенерируем самоподписанный сертификат — данный подход удобен для тестовой среды, но в продуктивной среде необходимо купить сертификат или получить его бесплатно в Let’s Encrypt.




И так, создаем каталог, куда разместим наши сертификаты:




mkdir -p /etc/ssl/kubernetes




Сгенерируем сертификаты командой:




openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/kubernetes/cert.pem -keyout /etc/ssl/kubernetes/cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=kubernetes.dmosk.local/CN=kubernetes"




* можно не менять параметры команды, а так их и оставить. Браузер все-равно будет выдавать предупреждение о неправильном сертификате, так как он самоподписанный.




Создаем namespace:




kubectl create namespace kubernetes-dashboard




* это та первая настройка, которую мы комментировали в скачанном файле recommended.yaml.




Теперь создаем настройку для secret с использованием наших сертификатов:




kubectl create secret generic kubernetes-dashboard-certs --from-file=/etc/ssl/kubernetes/cert.key --from-file=/etc/ssl/kubernetes/cert.pem -n kubernetes-dashboard




* собственно, мы не использовали настройку в скачанном файле, так как создаем ее с включением в параметры пути до созданных нами сертификатов.




Теперь создаем остальные настройки с помощью скачанного файла:




kubectl create -f recommended.yaml




Мы увидим что-то на подобие:




serviceaccount/kubernetes-dashboard created

service/kubernetes-dashboard created

secret/kubernetes-dashboard-csrf created

secret/kubernetes-dashboard-key-holder created

configmap/kubernetes-dashboard-settings created

role.rbac.authorization.k8s.io/kubernetes-dashboard created

clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created

rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created

clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created

deployment.apps/kubernetes-dashboard created

service/dashboard-metrics-scraper created

deployment.apps/dashboard-metrics-scraper created




Создадим настройку для админского подключения:




vi dashboard-admin.yaml




apiVersion: v1

kind: ServiceAccount

metadata:

  labels:

    k8s-app: kubernetes-dashboard

  name: dashboard-admin

  namespace: kubernetes-dashboard



---

apiVersion: rbac.authorization.k8s.io/v1

kind: ClusterRoleBinding

metadata:

  name: dashboard-admin-bind-cluster-role

  labels:

    k8s-app: kubernetes-dashboard

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: ClusterRole

  name: cluster-admin

subjects:

- kind: ServiceAccount

  name: dashboard-admin

  namespace: kubernetes-dashboard




Создаем настройку с применением созданного файла:




kubectl create -f dashboard-admin.yaml




Теперь открываем браузер и переходим по ссылке https://<IP-адрес мастера>:30001 — браузер покажет ошибку сертификата (если мы настраиваем по инструкции и сгенерировали самоподписанный сертификат). Игнорируем ошибку и продолжаем загрузку.




Kubernetes Dashboard потребует пройти проверку подлинности. Для этого можно использовать токен или конфигурационный файл:







На сервере вводим команду для создания сервисной учетной записи:




kubectl create serviceaccount dashboard-admin -n kube-system




Создадим привязку нашего сервисного аккаунта с Kubernetes Dashboard:




kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin




Теперь камандой:




kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')




… получаем токен для подключения (выделен красным): 




Data

====

ca.crt:     1066 bytes

namespace:  11 bytes

token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IkpCT0J5TWF2VWxWQUotdHZYclFUaWwza2NfTW1IZVNuSlZSN3hWUzFrNTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tbnRqNmYiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMzIwNjVhYmQtNzAwYy00Yzk5LThmZjktZjc0YjM5MTU0Y2VhIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.wvDGeNiTCRBakDplO6PbdqvPH_W2EsBgJjZnTDflneP3cdXQv6VgBkI8NalplXDRF-lF36KbbC2hpRjbkblrLW7BemIVWYOznmc8kmrgCSxO2FVi93NK3biE9TkDlj1BbdiyfOO86L56vteXGP20X0Xs1h3cjAshs-70bsnJl6z3MY5GbRVejOyVzq_PWMVYsqvQhssExsJM2tKJWG0DnXCW687XHistbYUolhxSRoRpMZk-JrguuwgLH5FYIIU-ZdTZA6mz-_hqrx8PoDvqEfWrsniM6Q0k8U3TMaDLlduzA7rwLRJBQt3C0aD6XfR9wHUqUWd5y953u67wpFPrSA




Используя полученный токен, вводим его в панели авторизации:







Мы должны увидеть стартовое окно системы управления:







Удаление нод




При необходимости удалить ноду из нашего кластера, вводим 2 команды:




kubectl drain k8s-worker2.dmosk.local --ignore-daemonsets




kubectl delete node k8s-worker2.dmosk.local




* в данном примере мы удаляем ноду k8s-worker2.dmosk.local.







Источник: https://www.dmosk.ru/instruktions.php?object=kubernetes-ubuntu



2021-06-16T00:10:08
Software