GUI vs CLI
консольный интерфейс интуитивно понятен любому, это метафора человеческого общения — мы даем компьютеру команду, он трудится, выполняет её и отвечает. Вопрос — ответ, вопрос — ответ, все просто.
Графический интерфейс — это метафора человеческого труда, компьютер предоставляет нам виртуальную среду, в которой человек трудится виртаульными руками, а компьютер только ассистирует. Написание хорошего графического интерфейса — задача очень нетривиальная, и мы на самом деле по пальцам руки можем перечислить программы, где он реализован грамотно. Хотя в некоторых областях, где действительно должен работать человек, а не компьютер (типа графики) — это единственная альтернатива.
Большинство восхищается интерфейсами аппла и гугла, где, грубо говоря, одна кнопка и одно поле ввода — а это же и есть переработанная консоль.
Так почему, в операционных системах до сих пор нет годного консольного интерфейса? tty в линуксе не умеет в юникод, эмуляторы терминала внутри иксов — это просто нонсенс с архитектурной точки зрения.
Что такое GUI и CLI
Когда вы переходите на Linux, то, читая статьи по теме или общаясь на форумах, часто сталкиваетесь с такими терминами, как GUI, CLI и реже TUI. В этой небольшой статье мы расскажем, что они означают, и разберёмся, в каком контексте эти аббревиатуры обычно встречаются.
Справедливости ради отметим, что термины GUI, CLI и TUI популярны не только в Linux-среде. Эти слова – часть общекомпьютерного жаргона, и их можно услышать в любых технических обсуждениях, а не только в тех, которые связаны с Linux.
Table of Contents
- GUI – графический интерфейс пользователя
- CLI – интерфейс командной строки
- TUI – текстовый пользовательский интерфейс
- Выводы
GUI – графический интерфейс пользователя
GUI (Graphical User Interface) — приложением или графическим приложением называют практически любую программу, управление которой осуществляется посредством мыши, тачпада или сенсорного экрана. В рабочем окне отрисованы иконки и другие виджеты, и взаимодействие с программой представляет из себя, в сущности, последовательность нажатий курсором.

В Linux возможность графически взаимодействовать с операционной системой предоставляется так называемой средой рабочего стола. Поверх неё можно пользоваться GUI-приложениями, такими как GIMP, VLC, Firefox, LibreOffice, файловый менеджер и т.д. для решения различных задач.

Именно GUI открыл мир компьютеров для обычных пользователей; без него информационные технологии оставались бы уделом гиков.
CLI – интерфейс командной строки
CLI (Command Line Interface) – это программа в командной строке, которая читает вводимые команды и выполняет запрошенные действия. В целом, любая программа, которой можно пользоваться через команды из терминала, попадает в эту категорию.

У старых компьютеров не было мыши или других манипуляторов для управления операционной системой. Всё взаимодействие выполнялось через текстовый ввод и вывод, т.е. через CLI.
Если вам кажется, что это сложно, подумайте об ещё более древних вычислительных машинах, у которых не было даже экрана, на котором отображается набираемый текст. Ввод команд распечатывался принтером на бумаге. Лично мне ни разу в жизни не доводилось пользоваться таким компьютером. Ближайший аналог из того, с чем я имел дело – это схемы на микроконтроллерах, которыми я занимался во время учёбы.
Ушёл ли CLI в прошлое? Вовсе нет. У командной строки есть свои преимущества, особенно если речь идёт о настройке Linux на глубинном уровне: поднятии сетевого брандмауэра, организации локальной сети или даже управлении пакетами.
Со всеми этими вопросами можно разобраться и с помощью GUI-программ, но CLI даёт более прямой и прицельный доступ к операционной системе. В любом случае, работа GUI-приложений также основана на обращении к ОС с помощью команд (которые прописаны в их программном коде).
Многие известные утилиты с GUI представляют из себя графическую обёртку для инструментов CLI. Например Handbrake, популярный медиа-конвертер с открытым исходным кодом, является GUI-надстройкой над CLI-приложением ffmpeg.

Конечно, пользоваться командной строкой сложнее, чем графическим интерфейсом. Однако не стоит переживать по этому поводу. Как правило, для решения повседневных задач достаточно графического управления Linux. Тем не менее, знание основных команд часто бывает весьма полезным.
TUI – текстовый пользовательский интерфейс
Этот термин встречается реже, чем первые два. TUI (Text User Interface) – это наполовину CLI и наполовину GUI. Непонятно, что это значит? Разберёмся поподробнее.
Как было сказано выше, работа со старыми компьютерами была целиком основана на CLI. Однако некоторый ограниченный спектр возможностей GUI можно имитировать и в текстовом терминале. Это и будет TUI: в отличие от интерфейса командной строки, в нём представлено больше виджетов и доступно управление как и с клавиатуры, так и с помощью мыши.

TUI – это сокращение для text-based user interface (текстовый пользовательский интерфейс) или terminal user interface (терминальный пользовательский интерфейс). Слово «текстовый» в этом словосочетании означает, что всё показанное на экране, в сущности, представляет собой большой текст – набор символов, с помощью которого имитируются различные элементы управления, а слово «терминальный» – что обратиться к этому интерфейсу возможно только из терминала.
TUI-приложения не так популярны, как GUI и CLI, но примеров можно найти множество. Так, к этой категории относятся текстовые браузеры и текстовые игры.

Ещё один случай, когда TUI может встретиться – это если в процессе установки кодеков на Ubuntu необходимо принять EULA или сделать выбор из нескольких предложенных вариантов настройки. TUI сложнее в управлении, чем GUI и часто требует обучения, но пользоваться им всё-таки проще, чем командной строкой.
Выводы
Программы с TUI часто относят в категорию CLI, поскольку их интерфейс доступен только из текстовой консоли. Какого мнения на этот счёт будете придерживаться вы – выбор за вами. Надеюсь, вам понравилась эта статья и теперь вы знаете что такое GUI, CLI и TUI.
Что такое пользовательский интерфейс

Анастасия Свеженцева Продуктовый дизайнер (UX/UI), веб-дизайнер и бренд-дизайнер. Опыт проектов в международных компаниях Omega-R (агентство), iSpring Solutions (продуктовая) и со стартапами по всему миру. Делюсь опытом в дизайне на офлайн- и онлайн-платформах с 2017 года: Институт программных систем, godesign.school, онлайн-платформа breezzly.ru и пишу микролекции о дизайне на Яндекс.Кью (226 ответов). Янв 18, 2023 · 10 мин читать

Кратко: Пользовательский интерфейс — это способ взаимодействия пользователя и программы. Давайте разбираться дальше зачем он нужен «Хороший пользовательский интерфейс учитывает человеческие слабости, перекладывает работу на машину, минимизирует ошибки и раздражение пользователя». (с) Илья Бирман
- Что такое пользовательский интерфейс
- Зачем нужен интерфейс
- Виды пользовательского интерфейса
- Графический пользовательский интерфейс
- Элементы пользовательского интерфейса
- Модель пользовательского интерфейса
- Этапы разработки пользовательского интерфейса
- Требования к качественному интерфейсу
- Что еще почитать на тему интерфейсов
- Вывод и рекомендация
Что такое пользовательский интерфейс
Пользовательский интерфейс — это все, что помогает людям управлять устройствами и программами с помощью голоса, нажатий, жестов, через командную строку и даже силой мысли (такое теперь тоже есть). Самый популярный вид интерфейсов сейчас — UI приложений.
Интересуетесь свежими статьями по продуктовому дизайну (UX/UI)?
UI (англ. user interface) переводится как «пользовательский интерфейс». UI охватывает не только графический интерфейс, а еще и тактильный, голосовой или звуковой.
Зачем нужен интерфейс
Интерфейс помогает двум объектам понимать друг друга и обмениваться информацией.
Интерфейс — это «язык общения», который понимают оба объекта, которые взаимодействуют друг с другом с целью решить определенный вопрос.
Если каждое приложение или программа, установленная на компьютере, планшете или смартфоне, — это помощник, то интерфейс — это способ общаться (взаимодействовать) с ней, чтобы она помогала в вашем деле на работе и в жизни.
К примеру, у цифровых систем пользовательские интерфейсы бывают графические, голосовые, командной строки, жестовые — все это интерфейсы. Через пользовательский интерфейс мы получаем доступ к новым возможностям, которые дает приложение для обучения, работы, творчества, развлечений.
Также распространены программный, аппаратный, аппаратно-программный интерфейсы. Такие интерфейсы обеспечивают взаимодействие не только между человеком и машиной (устройством), но и между программами, оборудованием или компьютерами:
- аппаратный: соединяет друг с другом два объекта, например, помогает подключить смартфон к ноутбуку с помощью WiFi или кабеля;
- программный (API): создает связь между приложениями/программами, к примеру, подключение API одного приложения к другому. Самый популярный сценарий работы — авторизация через соцсети на сайтах;
- аппаратно-программный: комбинация технических элементов под управлением программного обеспечения.
Виды пользовательского интерфейса
Пользовательские интерфейсы бывают жестовые, тактильные, голосовые, графические, командной строки и даже нейронные.
Интерфейс командной строки и текстовый интерфейс (Command Line Interface или CLI)
Командная строка все еще очень популярна среди системных администраторов и программистов. Это один из первых методов взаимодействия с компьютером. Она обладает особым шармом — создает ощущение общения тет-а-тет с машиной без посредников. Командная строка — как бесконечный лист A4, на котором пользователь вводит текст команд и получает результаты работы в виде текста.
Графический пользовательский интерфейс (Graphical User Interface или GUI)
Самый популярный тип UI. Представляет собой окошко с различными элементами управления. Пользователи взаимодействуют с ними с помощью клавиатуры, мыши и голосовых команд: жмут на кнопки, тыкают мышкой, смахивают пальцем.
Жестовый, голосовой, тактильный, нейронный
«Любая достаточно развитая технология неотличима от магии», — как-то сказал английский писатель-фантаст и футуролог Артур Кларк.
Например, через Voice User Interface вы можете отдавать команды своему смартфону через голосовых помощников: Siri от Apple, Alexa от Amazon или Алиса от Яндекса.
NUI (жестовые, естественные) применяют в играх для приставок Xbox, Nintendo Wii или PlayStation. Эту же технологию вы найдете в оборудовании «умного дома», например, при включении света или регулировании громкости Яндекс.Станции с помощью изменения положения руки.
Производители качают технологии и расширяют возможности машин, и наслаждаться новыми фишками гаджетов можно даже посылая мысли напрямую в компьютер.
Графический пользовательский интерфейс
Этим термином чаще обозначаются UI мобильных и веб-приложений, а также игр и сервисов для развлечений.
Мобильные интерфейсы
Выделяется в отдельную группу SIMP (Screen, Icon, Menu, Pointer). Подход к дизайну мобильных интерфейсов отличается от подхода к дизайну настольных приложений. Поведение пользователей при взаимодействии со смартфонами отличается от работы на компьютере из-за размера экрана и отсутствия отдельной клавиатуры с мышью/тачпадом. Элементы здесь заполняют экран полностью, а блоки и системы зависят от требований операционной системы.
Дизайн мобильных приложений также зависит от поведенческих паттернов пользователей, например того, как они держат смартфон в руке, какие действия удобно совершать на ходу и т.д.
Веб-интерфейсы
Технологии позволяет создавать полноценные веб-приложения, по функциональности не уступающие настольному ПО: Trello, Google Docs, Twitch, Яндекс.Дзен.
Преимущество таких приложений в том, что их не нужно устанавливать на компьютер — все функции доступны в браузере. Создают такие приложения с помощью JavaScript, HTML и CSS.
Игровой и материальный
Связан с механикой геймплея. Именно в нем лучше всего раскрывается сопровождающая роль интерфейса, так как игрок лучше ощущает, что движется к какой-то цели (например, победить босса и пройти уровень). Интерфейс зависит от игры: кнопки, жесты, движения мыши или взаимодействие с сенсором на экране или 3D интерфейс в VR, нажатие клавиш на джойстике.
Модель пользовательского интерфейса: реальный мир и ментальная модель пользователя
Программные продукты призваны увеличивать наши возможности в реальном мире. Каждый продукт — как супергерой, его задача — помочь нам в чем-либо: суперпамять, общение сквозь любые расстояния, максимум развлечений и так далее. Ко всем этим свойствам мы получаем доступ через интерфейсы.
Каждое приложение мы распахиваем в определенном контексте. Контекст подразумевает определенные ожидания от того, как все должно работать. Ожидания основаны на прошлом опыте. При знакомстве с новым продуктом мы бессознательно переносим на него сформировавшиеся ожидания и привычки, которые выстроились в прошлом вокруг другого схожего продукта (или способа решения схожей задачи).
Ментальная модель — это схема в нашей памяти с логикой «объект → принцип взаимодействия → результат». При этом от всех похожих объектов мы ожидаем похожего поведения и результата.
«В основе ментальной модели лежат убеждения, а не факты. Это значит, что нужно принять то, что пользователи уже знают (или думают что знают) о том, как работает ваш продукт. И взять это в работу».
Nielsen Norman Group
У каждого интерфейса под капотом находится определенная модель системы, которая призвана помогать пользователю достигать определенных целей.
Например, модель покупки дорогих автомобилей для постоянных клиентов автосалона в мобильном приложении может включать 4 шага: наполнить корзину, оформить заказ, подтвердить заказ, внести оплату.
Модель и Интерфейс тесно взаимосвязаны. Чтобы понять разницу между Моделью и Интерфейсом, задайте вопрос: откуда вообще взялась корзина? Разве клиенты добавляют автомобили в тележку пачками, как в супермаркете? Или все-таки нужна модель не корзины/тележки из супермаркета, а тест-драйва в автосалоне?
Т.е. мы в приложении можем вместо корзины сразу при выборе автомобиля предлагать записаться на тест-драйв или начать оформление покупки (в том числе в кредит). А теперь задайте вопрос: как часто покупатели дорогого автомобиля готовы менять авто и вписывается ли мобильное приложение в их жизненный контекст?
Выходит, что за любым объектом в реальном мире стоит модель, которая находится в нашем сознании — это наши представления о том, как эта штуковина перед нами должна работать. И эти представления возникают еще до того, как мы дотронулись до нее.
Элементы пользовательского интерфейса, синтаксис и другие особенности
Элементы интерфейса в GUI реализованы на основе метафор. Метафоры должны быть уже знакомы пользователям или вписываться в их культурный контекст (тогда их можно им обучить).
Метафоры в интерфейсах на базе ментальных моделей
Все элементы интерфейса вместе складываются в единую дизайн-концепцию (метафору). Например, Trello (система для управления задачами) визуально выглядит как доска для управления проектами по SCRUM (метафорично), на ней также можно таскать стикеры из одной колонки в другую. Trello изначально и придумали программисты, которым очень близка концепция SCRUM.

Популярные элементы интерфейса:
Кнопка, Ссылка, Иконка, Вкладка, Чекбокс, Радиокнопка, Переключатель, Выпадающий список, Ползунок, Поле ввода, Таблицы, Меню.
Интерфейсы конструируют по принципам атомарного дизайна
Атомарный дизайн — это подход к разделению системы любой сложности на части, маленькие элементы — атомы. Атомы можно использовать повторно и комбинировать друг с другом.
Атомы. Мельчайшие частицы, из которых состоит интерфейс: кнопки, поля ввода, чекбоксы, радиокнопки, стили для типографики.

Молекулы (группы атомов). Если взять два атома и соединить друг с другом — получится молекула. Например, кнопка и поле ввода.

Организмы. Если объединить несколько молекул, получится организм — крупная часть интерфейса. Например, сквозная навигация в шапке или боковой панели сайта.

Шаблоны. Если объединить организмы друг с другом и создать шаблон — получится интерфейс, предназначенный для решения типовых задач.

Этапы разработки пользовательского интерфейса — как проработать UI
В международной практике подход к дизайну интерфейсов уже стал стандартом. Процесс по дизайну интерфейсов включает следующие ключевые этапы. В этом блоке я опираюсь на материалы UX Mastery — партнера Interaction Design Foundation, крупнейшего в мире сообщества обучения UX-дизайну.
- Стратегия (Бренд-стратегия и UX-стратегия) — определяет полезное действие, ценности бренда и видение будущего. Стратегия естественным образом влияет на цели проекта по дизайну интерфейсов, критерии достижения целей и приоритет проекта в общем ландшафте высот организации.
- Исследование (UX-исследование) — фаза открытий. Комплексные проекты включают в себя масштабную работу по пользовательским исследованиям (UX-исследованиям) и анализу конкурентов (бенчмаркинг). Небольшие организации или стартапы могут подойти к исследовательской работе в упрощенном формате и обосновать идею, построенную по принципам минимальной жизнеспособности (Minimum Viable) через интервью, опросы и юзабилити тестирования. Именно на фазе исследований, согласно принципам дизайн-мышления, происходит погружение в образ жизни, пристрастия, цели и барьеры пользователей. Понимание контекста пользователей помогает создавать социально значимые продукты, которые с высокой вероятностью приживутся и начнут развитие на рынке: так они будут казаться интуитивными (ментальные модели) и родными (метафоры).
- Анализ (UX-аналитика) — цель анализа в том, чтобы сделать выводы из данных и дать уверенный старт созданию дизайн-концепций. Выводы призваны помочь понять суть происходящего и приступить к проектированию интерфейса.
- Проектирование и прототипирование интерфейсов — на этапе проектирования происходит создание прототипов интерфейсов, их тестирование пользователями и корректировка на основе обратной связи. На этой фазе чаще применяются прототипы с низкой детализацией (Low-fi prototyping), так в них пользователи фокусируются только на функциях и не отвлекаются на бренд-дизайн (уникальную графическую идентичность) и другие визуальные детали.
- Дизайн интерфейсов и Разработка — на этом этапе создается проработанный дизайн, пишется детальный контент, создается вся уникальная графика и начинается совместная работа с программистами.
Правила и принципы разработки хорошего интерфейса
Базовые принципы можно проследить сквозь 24 года исследований в сфере интерфейсов: c 1987 до 2009 года. Эти принципы работают и сейчас.
Рекомендации по проектированию интерфейсов. Шнайдерман (1987 год) и Плейзент (2009 год):
- Стремитесь к единообразию — элементы дизайна должны легко узнаваться, даже если пользователь встретил ваше приложение впервые. Создавайте пользовательские интерфейсы приложений интуитивно понятными. Например, не красьте кнопку запуска в красный, если на большинстве сайтов она зеленая.
- Обеспечьте одинаковое удобство в использовании — к примеру, в приложении и на сайте элементы пользовательского интерфейса — меню и списки — должны срабатывать одинаково на каждой странице.
- Предусмотрите информативную обратную связь — интуитивный интерфейс реагирует на действия пользователя моментально. Приложение должно наглядно показывать на экране актуальный статус: ожидается ли оплата, взял ли менеджер заявку в работу, доставлено ли сообщение.
- Прорабатывайте замкнутые потоки решения задач — пользователи должны четко понимать, когда они запустили некий процесс и когда они его завершили. Этот принцип хорош в сочетании с наглядными статусами.
- Предотвращайте ошибки — идеальный интерфейс состоит из туннелей, по которым пользователи могут моментально долетать до цели. Стремитесь к точке, когда пользователи даже не смогут ошибиться на пути к цели. Даже простые шаги и статусы порой могут очень сильно помочь.
- Обеспечивайте возможность легкой отмены действия — каким бы продуманным ни был интерфейс, все пользователи — люди, они переживают и ошибаются по разным причинам. Приготовьте сообщения с заботой на случай, если вдруг что-то пошло не по плану. Или просто дайте возможность гарантированной отмены действия. Такой подход поможет уберечь внимание, деньги, время и лояльность клиентов.
- Пусть пользователи чувствуют, что контроль в их руках: интуитивный пользовательский интерфейс — как ложка. Всегда знаешь, чего ждать. Пользователи понимают, что интерфейс — это машина и поэтому ожидают полной управляемости.
- Минимизируйте нагрузку на кратковременную память — создайте ощущение «все под рукой». Тогда пользователи не будут чувствовать, что они что-то потеряли, и у них не будет повода беспокоиться, что ценную информацию или результаты работы нужно обязательно куда-то сохранить или запомнить.
Что еще почитать на тему интерфейсов
В книге увлекательное и глубокое погружение в мир международных подходов к продуктовому (UX/UI) дизайну. Здесь подробно описаны принципы и подходы к проектированию взаимодействия, а еще дан точный инструктаж, как провести качественные и количественные исследования, чтобы выделиться среди конкурентов и сделать ценный для пользователя продукт. Вам также может пригодиться Обзор книги: основы проектирования интерфейсов →

Вывод и рекомендация
Попробовать себя в роли дизайнера интерфейсов на практике под руководством наставника вы можете на платформе Breezzly. Здесь вас встретят дизайн-проекты во всех популярных инструментах (Figma, Principle, ProtoPie) и на всех видах популярных у клиентов проектов. А полную траекторию обучения UI-дизайну вы можете найти, если загляните в обзор 5 лучших UI курсов →
Kui — «гибридное» CLI/GUI-приложение для работы с Kubernetes
Не секрет, что большинство из нас, когда речь заходит о таких вещах, как управление сервером или кластером Kubernetes, в первую очередь думают не про какой-то GUI, а любимый терминал. Для многих это как езда на автомобиле с ручной коробкой передач: просто, удобно, гибко, более предсказуемо. Проект Kui представляет собой некий гибрид интерфейсов, который направлен на дополнение опыта использования классического терминала.

Автор Kui описывает свое приложение как «CLI with a GUI twist». Утилита позиционируется как CLI-интерфейс, дополненный графическими возможностями для работы с Kubernetes. Несмотря на то, что разработка ведется одним человеком (Nick Mitchell), проект довольно активно развивается. В настоящий момент у него более 2000 звезд на GitHub. Кстати, если до недавнего времени разработка шла в репозитории организации IBM, то теперь он перешел под «крыло» K8s-сообщества — kubernetes-sigs.
Установка и первое знакомство с интерфейсом
Проект является кроссплатформенным приложением: сборки с Kui доступны под macOS, Linux и Windows, — а также есть возможность собрать его из исходного кода. Под капотом живет Electron, и приложение ставится как единый исполняемый файл. Более подробно об установке написано на странице приложения.
При первом знакомстве Kui ничем не отличается от большинства терминалов. Сверху есть возможность переключаться между вкладками, а также кнопка разделения текущей вкладки на вертикальные и горизонтальные подокна. В правом нижнем углу — текущая графическая тема и help. Там же появится уведомление при необходимости обновить приложение.
А вот концептуальная особенность интерфейса Kui заключается в том, что каждая вводимая команда является не строкой, как в терминале, а панелью с полем для ввода команды:
При наведении на панель появляется меню с возможностью скопировать команду или ссылку на неё и результат её выполнения (к пользе этой фичи мы еще вернемся в описании ниже).
Поддерживается открытие файлов внутри терминала — к примеру, картинки будут открыты в просмотрщике по умолчанию. Текстовые файлы тоже можно открывать и редактировать при помощи встроенного редактора. Этот редактор имеет минимально необходимый набор функционала для работы с текстовыми файлами. Есть нумерация строк, поддерживается перемещение курсора мышью. В правом верхнем углу есть иконки сохранения изменений, отмены последнего действия и очистки содержимого документа.
Разбиение вкладки на подокна происходит как вертикально, так и горизонтально в зависимости от их количества. По умолчанию изменять размер и компоновку подокон нельзя. Размер подокон изменяется пропорционально размеру главного окна. Справа вверху каждого подокна расположены кнопки инвертирования цвета заливки фона подокна, очистки содержимого и закрытия подокна.
Работа Kui с Kubernetes
Теперь — о применении этого терминала для работы с Kubernetes. Запустить Kui можно как отдельным приложением, так и плагином kubectl kui — например, просто набрав kubectl kui get namespace в терминале. Подключение к кластеру Kubernetes осуществляется при помощи kubeconfig . Переключение контекста доступно в самом приложении.
Для знакомства с работой Kui c K8s нам понадобится кластер. Для этих целей я буду использовать minikube, в котором через Helm-чарт развернуто приложение WordPress. К слову, к Kui может быть одновременно подключено несколько Kubernetes-кластеров, и тогда переключение между ними осуществляется с помощью нижнего меню. Внизу слева расположены текущая директория и контекст в Kubernetes. Удобно переключаться можно и между namespace’ами.
Основной фичей KUI при работе с Kubernetes является то, что приложение предоставляет основные ресурсы Kubernetes в виде интерфейса с таблицами и вкладками. К примеру, попав на кластер, вы можете: при помощи команды kubectl get namespaces (вместо kubectl есть и сокращение k ) увидеть окружения, которые есть на кластере, после чего уже через графический интерфейс продолжить работу с ресурсами кластера. Далее — напротив каждого namespace’а показан его статус в виде квадратика того или иного цвета: если удалить namespace, цвет его квадрата изменится с зеленого на синий.
Логика работы интерфейса KUI сделана с прицелом на drill-down, то есть на переход от общего к частному:
- Когда выбран интересующий namespace (скажем, wp-kui ), в том же окне автоматически открывается вкладка, а в ней — панель с полем команды kubectl get namespace wp-kui -o yaml .
- Под данной панелью находится меню с вкладками:
- Summary — имя пространства имен, его статус и время работы.
- Resources — основные ресурсы в namespace’е: Pod, Service, Deployment, ReplicaSet, StatefulSet и их количество. По сути это аналог вывода команды kubectl -n namespace get all ;
- Annotations (не во всех namespaсe’ах);
- Labels;
- Last Applied (тоже не во всех namespace’ах — ее не будет в системных);
- YAML — конфигурация namespace’а в формате манифеста. Есть функция редактирования данного манифеста.


В целом работа с вкладками и их содержимым в Kui выглядит примерно так:
Аналогичный drill-down работает и для других объектов. Например, перейдя на вкладку Resources и выбрав нужный ресурс (скажем, Pod), в этом же подокне получим панель с командой kubectl get Pod -n namespace и меню с Pod’ами в данном пространстве имен. Меню состоит из названия Pod’ов и их статуса, представлено в двух формах: в текстовом и графическом (сетка из квадратов разных цветов со статусами Pod’ов).
Графическое представление Pod’ов удобно для отображения информации о пространствах имен с большим количеством Pod’ов или ресурсов, так как статусы компоненты представляются более компактно. Например, сразу заметно, что у нас есть Pod со статусом CrashLoopBackOff . При его выборе:
- откроется панель с командой kubectl get pod nameOfPod -o yaml -n namespace и окно с меню;
- в меню будут доступны такие вкладки, как:
- Summary — основные параметры, такие как статус Ready , количество запущенных Pod’ов/Pod’ов в реплике, status, restarts, age, IP, node и другие;
- Labels;
- Logs — логи основного контейнера в Pod, что и является наиболее интересной для нас информацией, когда нужно диагностировать случившуюся проблему;
- Terminal — возможность «провалиться» в CLI контейнера Pod’а;
- YAML с манифестом;
- Show Events — события, относящиеся к этому ресурсу;
- Show Owner Reference — в случае с Pod’ом это ReplicaSet, к которому он относится, а у ReplicaSet таковой будет сущность Deployment;
- Show Node — информация о хосте, на котором в данный момент расположен Pod.
В общем, интерфейс устроен так, что при обращении к сущностям информация о них показывается в новом подокне меню (ниже предыдущего окна). Ненужные окна вместе с панелями можно закрывать через всплывающее подменю панели с командой.
Notebooks
Ещё одна важная особенность Kui — все выполненные действия можно сохранить в виде notebook. При открытии такого notebook’а на отдельной вкладке откроются все панели команд, которые вы выполняли до сохранения. Окна меню вывода этих команд можно развернуть. Вкладки в окнах вывода команд не запоминаются.
С помощью notebook’ов можно, например, создавать обучающие руководства. Несколько таких гайдов по Kubernetes уже доступны в Kui после установки. К примеру, help по Kui оформлен в виде notebook.
Такие гайды могут быть интерактивными, потому что выполнение команд возможно прямо из notebook’а. Кроме того, в notebook’ах доступно разделение окна на несколько горизонтальных и вертикальных подокон, которым можно менять цвет фона. Если в панели ввода команды начать с строку с символа #, то Kui воспримет это как комментарий. Также можно вставлять ссылки kui-link, скопированные при помощи кнопки link в левой части панели ввода команды. Для большего удобства написания текстовых заметок предусмотрена возможность загружать комментарии из Markdown-файла — это делается командой commentary -f /path/to/file .
Другим способом применения notebook в Kui может стать полноценная dashboard для мониторинга или работы с кластером. В поставке с Kui уже есть пример такой панели. На ее основе можно создать настроенную под себя и адаптированную под ваш кластер:

Собери свой Kui
По умолчанию в Kui из настроек доступно только смена темы оформления и изменение размера шрифта. Это компенсируется возможностью сделать собственную сборку. Кастомизировать можно как визуальные параметры (размер шрифта, иконки, темы оформления), так и функциональные (здесь на помощь приходят плагины). На GitHub проекта кастомизации есть wiki.
Несмотря на то, что KUI активно развивается в сторону взаимодействия именно с Kubernetes, это не единственный вариант применения инструмента. Под капотом Kui — целая платформа, основой которой является CLI. Ввод определенных команд может вызывать реакцию, представленную графически. Например, как команда kubectl get ns показывает пространства имен в виде графической таблицы с квадратами разного цвета, отображающие состояния.
В статье подробно рассмотрен только плагин, устанавливаемый по умолчанию, — kubectl . Однако уже сейчас у Kui есть еще несколько готовых к использованию плагинов: s3 , iter8 , git .
Итоговые впечатления
В ходе написания статьи работа Kui была также протестирована на боевом кластере с множеством окружений и ресурсов. Отзывчивость выполнения команды kubectl get ns на кластере с ~80 namespace’ами немного ниже, чем через терминал, но довольно комфортная. Из того, что расстроило в целом, отмечу лишь малое количество настроек по умолчанию.
На мой взгляд, Kui отлично подходит для начала погружения в мир Kubernetes. Структурированный интерфейс с логично расположенными вкладками меню дает понимание иерархии ресурсов кластера. Действия в UI, дублирующие консольные команды, позволяют быстрее вникнуть в синтаксис команд Kubernetes. Также нельзя не отметить полезные дополнения вроде графического отображения состояния ресурсов в виде квадратов того или иного цвета (в зависимости от их статуса). Такой подход позволяет нагляднее оценить состояния кластера и получить быстрее информацию для диагностики проблем.
Интересной особенностью Kui мне представляется возможность создания notebook и dashboards: виден огромный потенциал их применения в разных целях.
Kui, конечно, не первая утилита для облегчения работы с Kubernetes, даже в области консоли — к примеру, можно вспомнить k9s. Однако Kui отличается от других подобных инструментов тем, что не ограничивает себя классическими возможностями терминала. Эта утилита активно дополняет консольный интерфейс интересными графическими «фишками», расширяя привычный опыт в терминале. В то же время утилита остается консольной, не превращаясь в GUI-приложение вроде Lens. Плюс это или минус — дело вкуса.
Заключение
Всеми нами любимый терминал, конечно же, претерпел значительные изменения со времен первых телетайпов. Однако основные принципы работы остались прежними. Kui стремится дополнить опыт использования терминала графическими фишками, позволяя посмотреть с другой стороны на, казалось бы, давно известный интерфейс взаимодействия. Пожалуй, ему это удается.
За время написания данной статьи утилита несколько раз уведомила о наличии обновлений. Активное развитие проекта добавляет веру в то, что недостатки будут устранены, а концепции, заложенные в гибридный интерфейс, будут развиваться и совершенствоваться.
P.S.
Читайте также в нашем блоге:
- «Обзор kubenav для управления Kubernetes-кластерами со смартфона»;
- «Обзор Lens — IDE для Kubernetes»;
- «Обзор k9s — продвинутого терминального интерфейса для Kubernetes».