HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>15 июн 2022</li>
2 <ul><li>15 июн 2022</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Сертифицированный системный администратор рассказывает, из каких компонентов состоит Kubernetes и как стать специалистом по этой технологии.</p>
4 </ul><p>Сертифицированный системный администратор рассказывает, из каких компонентов состоит Kubernetes и как стать специалистом по этой технологии.</p>
5 <p>Иллюстрация: Катя Павловская для Skillbox Media</p>
5 <p>Иллюстрация: Катя Павловская для Skillbox Media</p>
6 <p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
6 <p>Журналист, коммерческий автор и редактор. Пишет про IT, цифровой маркетинг и бизнес. Сайт:<a>darovska.com</a>.</p>
7 <p>Kubernetes - это оркестратор для контейнеров, написанный на языке Go в Google. Раньше уже существовали решения для создания и развёртывания виртуальных машин - такие как Microsoft Hyper-V или продукты от VMware.</p>
7 <p>Kubernetes - это оркестратор для контейнеров, написанный на языке Go в Google. Раньше уже существовали решения для создания и развёртывания виртуальных машин - такие как Microsoft Hyper-V или продукты от VMware.</p>
8 <p>Для контейнеров был тот же Docker - он позволял администрировать по несколько контейнеров одновременно. Однако для развёртывания больших многокомпонентных продуктов для сервисов и приложений, использующих контейнеры в своей архитектуре, технологий не было.</p>
8 <p>Для контейнеров был тот же Docker - он позволял администрировать по несколько контейнеров одновременно. Однако для развёртывания больших многокомпонентных продуктов для сервисов и приложений, использующих контейнеры в своей архитектуре, технологий не было.</p>
9 <p>Поэтому появился Kubernetes: он позволяет автоматизировать развёртывание целых кластеров с контейнерами, гибко задавать различные политики и настройки и пользоваться подходом Infrastructure as Code.</p>
9 <p>Поэтому появился Kubernetes: он позволяет автоматизировать развёртывание целых кластеров с контейнерами, гибко задавать различные политики и настройки и пользоваться подходом Infrastructure as Code.</p>
10 <p>При этом Kubernetes позволяет распределять ресурсы серверов более эффективно благодаря лёгкости контейнеров. Виртуальные машины, каждая из которых запускает отдельную копию операционной системы, работают очень медленно и потребляют кучу ресурсов. А Kubernetes может крутить контейнеры на одном сервере, не требуя для каждого из них отдельной ОС.</p>
10 <p>При этом Kubernetes позволяет распределять ресурсы серверов более эффективно благодаря лёгкости контейнеров. Виртуальные машины, каждая из которых запускает отдельную копию операционной системы, работают очень медленно и потребляют кучу ресурсов. А Kubernetes может крутить контейнеры на одном сервере, не требуя для каждого из них отдельной ОС.</p>
11 <ul><li><a>Зачем нужен Kubernetes</a></li>
11 <ul><li><a>Зачем нужен Kubernetes</a></li>
12 <li><a>Как появился Kubernetes</a></li>
12 <li><a>Как появился Kubernetes</a></li>
13 <li><a>Принцип работы Kubernetes</a></li>
13 <li><a>Принцип работы Kubernetes</a></li>
14 <li><a>Как стать специалистом по Kubernetes</a></li>
14 <li><a>Как стать специалистом по Kubernetes</a></li>
15 <li><a>Какие вопросы задают на собеседовании</a></li>
15 <li><a>Какие вопросы задают на собеседовании</a></li>
16 </ul><ul><li><a>Риски использования Kubernetes и облачной инфраструктуры</a></li>
16 </ul><ul><li><a>Риски использования Kubernetes и облачной инфраструктуры</a></li>
17 <li><a>Отличия между решениями разных облачных провайдеров</a></li>
17 <li><a>Отличия между решениями разных облачных провайдеров</a></li>
18 <li><a>Недостатки Kubernetes</a></li>
18 <li><a>Недостатки Kubernetes</a></li>
19 <li><a>Альтернативы Kubernetes</a></li>
19 <li><a>Альтернативы Kubernetes</a></li>
20 </ul><p>С Kubernetes работают преимущественно SRE-инженеры и те, кто занимается<a>DevOps</a>-эффективностью разработчиков, пакетированием приложений. Например, разработчики написали код, собрали бинарник программы. После этого кто-то должен подготовить образы, в которые поместят приложение, и создать пайплайн.</p>
20 </ul><p>С Kubernetes работают преимущественно SRE-инженеры и те, кто занимается<a>DevOps</a>-эффективностью разработчиков, пакетированием приложений. Например, разработчики написали код, собрали бинарник программы. После этого кто-то должен подготовить образы, в которые поместят приложение, и создать пайплайн.</p>
21 <p>А теперь представьте, что у нашего приложения довольно много пользователей и ему требуются серьёзные ресурсы. Понятно, что мы не будем собирать под него суперкомпьютер - современная IT-индустрия выбрала путь распределённых систем, когда какое-то количество относительно слабых серверов собираются в единую распределённую систему и дают необходимые мощность, быстродействие и ресурсы. Это удобно: их количество можно наращивать постепенно, масштабируя ресурсы под требования приложения, а отдельные серверы можно легко заменять, если они вдруг выйдут из строя.</p>
21 <p>А теперь представьте, что у нашего приложения довольно много пользователей и ему требуются серьёзные ресурсы. Понятно, что мы не будем собирать под него суперкомпьютер - современная IT-индустрия выбрала путь распределённых систем, когда какое-то количество относительно слабых серверов собираются в единую распределённую систему и дают необходимые мощность, быстродействие и ресурсы. Это удобно: их количество можно наращивать постепенно, масштабируя ресурсы под требования приложения, а отдельные серверы можно легко заменять, если они вдруг выйдут из строя.</p>
22 <p>Итак, у нас есть приложение, которое должно крутиться на распределённой системе из десятков или даже сотен серверов. Если мы возьмём Docker или любой другой инструмент для работы с контейнером внутри системы, то каждый сервер придётся настраивать и администрировать отдельно: мы не сможем применить единые конфигурации сразу для всей группы - это будет полуручной труд. И даже если мы напишем набор скриптов для автоматизации, они не станут универсальным решением - в любом другом кейсе придётся писать их снова.</p>
22 <p>Итак, у нас есть приложение, которое должно крутиться на распределённой системе из десятков или даже сотен серверов. Если мы возьмём Docker или любой другой инструмент для работы с контейнером внутри системы, то каждый сервер придётся настраивать и администрировать отдельно: мы не сможем применить единые конфигурации сразу для всей группы - это будет полуручной труд. И даже если мы напишем набор скриптов для автоматизации, они не станут универсальным решением - в любом другом кейсе придётся писать их снова.</p>
23 <p>Тут на помощь и приходит Kubernetes. Мы просто описываем необходимые характеристики инфраструктуры (ресурсы для приложения, дизайн сети и так далее), а Kubernetes выполняет указания и управляет серверами, которые к нему подключены. Так он экономит время администраторам и разработчикам.</p>
23 <p>Тут на помощь и приходит Kubernetes. Мы просто описываем необходимые характеристики инфраструктуры (ресурсы для приложения, дизайн сети и так далее), а Kubernetes выполняет указания и управляет серверами, которые к нему подключены. Так он экономит время администраторам и разработчикам.</p>
24 <p>В книге<a>Site Reliability Engineering</a>описан внутренний проект Google - система управления кластерами Borg. В 2014 году Google опубликовал исходные коды этого проекта, а уже в 2015 году в партнёрстве с Linux Foundation организовал фонд<a>Cloud Native Computing Foundation (CNCF)</a>, которому и передал сорцы Kubernetes в качестве своего технического вклада. Этот фонд развивает open-source-проекты по разработке утилит и библиотек, которые позволяют создавать приложения ориентированные на облачные модели архитектур.</p>
24 <p>В книге<a>Site Reliability Engineering</a>описан внутренний проект Google - система управления кластерами Borg. В 2014 году Google опубликовал исходные коды этого проекта, а уже в 2015 году в партнёрстве с Linux Foundation организовал фонд<a>Cloud Native Computing Foundation (CNCF)</a>, которому и передал сорцы Kubernetes в качестве своего технического вклада. Этот фонд развивает open-source-проекты по разработке утилит и библиотек, которые позволяют создавать приложения ориентированные на облачные модели архитектур.</p>
25 <p>Сейчас Kubernetes - alumni, или по-русски "выпускник", Cloud Native Computing Foundation. Его довели до стабильной версии, и он получил статус Graduated Project (завершённый проект) в терминологии CNCF.</p>
25 <p>Сейчас Kubernetes - alumni, или по-русски "выпускник", Cloud Native Computing Foundation. Его довели до стабильной версии, и он получил статус Graduated Project (завершённый проект) в терминологии CNCF.</p>
26 <p>Первые версии Kubernetes были более монолитными и заточенными под работу с Docker в фоне. В программе CNCF Kubernetes стал стабильным и расширяемым продуктом, и менять технологии стало возможно практически на каждом уровне виртуальной инфраструктуры. Сейчас Kubernetes поддаётся достаточно высокой кастомизации: любую технологию работы с контейнерами, работы с хранилищами или работы с сетью можно выбрать самому.</p>
26 <p>Первые версии Kubernetes были более монолитными и заточенными под работу с Docker в фоне. В программе CNCF Kubernetes стал стабильным и расширяемым продуктом, и менять технологии стало возможно практически на каждом уровне виртуальной инфраструктуры. Сейчас Kubernetes поддаётся достаточно высокой кастомизации: любую технологию работы с контейнерами, работы с хранилищами или работы с сетью можно выбрать самому.</p>
27 <p>Такой подход к развитию сделал Kubernetes популярным решением для продакшен-систем и корпораций, у него появилось больше компонентов, связанных с безопасностью, и более стабильные алгоритмы управления ресурсами и процессами.</p>
27 <p>Такой подход к развитию сделал Kubernetes популярным решением для продакшен-систем и корпораций, у него появилось больше компонентов, связанных с безопасностью, и более стабильные алгоритмы управления ресурсами и процессами.</p>
28 <p>Kubernetes состоит из двух больших частей (см. изображение ниже):</p>
28 <p>Kubernetes состоит из двух больших частей (см. изображение ниже):</p>
29 <ul><li>Control Plane - оркестратор, API и база конфигурации.</li>
29 <ul><li>Control Plane - оркестратор, API и база конфигурации.</li>
30 <li>Node Pools - серверы с доступными ресурсами.</li>
30 <li>Node Pools - серверы с доступными ресурсами.</li>
31 </ul><p>За Control Plane отвечает сервер Kubernetes Master Node. Kubernetes Worker Nodes группируются в Node Pool (пул узлов, нод). Как правило, один Node Pool соответствует группе серверов с одинаковыми заданными характеристиками. Например, пул серверов на базе Windows, пул серверов с Linux и пул серверов с GPU.</p>
31 </ul><p>За Control Plane отвечает сервер Kubernetes Master Node. Kubernetes Worker Nodes группируются в Node Pool (пул узлов, нод). Как правило, один Node Pool соответствует группе серверов с одинаковыми заданными характеристиками. Например, пул серверов на базе Windows, пул серверов с Linux и пул серверов с GPU.</p>
32 <em>Изображение:</em><a><em>Wikimedia Commons</em></a><p>На каждой ноде (или узле, отдельном физическом сервере или виртуальной машине) устанавливается агент kubelet - он помогает получать инструкции от сервера Master Node, а также различные компоненты, драйверы и расширения для мониторинга безопасности сети. Всё это складывается в платформу для развёртывания приложения.</p>
32 <em>Изображение:</em><a><em>Wikimedia Commons</em></a><p>На каждой ноде (или узле, отдельном физическом сервере или виртуальной машине) устанавливается агент kubelet - он помогает получать инструкции от сервера Master Node, а также различные компоненты, драйверы и расширения для мониторинга безопасности сети. Всё это складывается в платформу для развёртывания приложения.</p>
33 <p>Итого: само приложение описывается через deployment-ресурс, который содержит несколько pod (далее - поды), в каждом из которых находится от одного до нескольких контейнеров. Поды как раз и являются единицами масштабирования системы в Kubernetes - своеобразными молекулами, из которых состоит система. Например, когда выбирают, на какой ноде будет запущен тот или иной компонент приложения, минимальной областью ресурсов считается именно под, а не отдельный контейнер или физический сервер.</p>
33 <p>Итого: само приложение описывается через deployment-ресурс, который содержит несколько pod (далее - поды), в каждом из которых находится от одного до нескольких контейнеров. Поды как раз и являются единицами масштабирования системы в Kubernetes - своеобразными молекулами, из которых состоит система. Например, когда выбирают, на какой ноде будет запущен тот или иной компонент приложения, минимальной областью ресурсов считается именно под, а не отдельный контейнер или физический сервер.</p>
34 <p><strong>Иерархия компонентов Kubernetes.</strong>Node Pool состоит из нод (Worker Node). Application состоит из Deployment, который в свою очередь состоит из подов, в которых содержатся контейнеры.</p>
34 <p><strong>Иерархия компонентов Kubernetes.</strong>Node Pool состоит из нод (Worker Node). Application состоит из Deployment, который в свою очередь состоит из подов, в которых содержатся контейнеры.</p>
35 <p>Принцип работы Kubernetes аналогичен классическим кластерам. Мозг системы - Kubernetes Master Node, который отвечает за Control Plane и содержит:</p>
35 <p>Принцип работы Kubernetes аналогичен классическим кластерам. Мозг системы - Kubernetes Master Node, который отвечает за Control Plane и содержит:</p>
36 <ul><li>API для администраторов и разработчиков;</li>
36 <ul><li>API для администраторов и разработчиков;</li>
37 <li>базу конфигурации с параметрами контейнеров, приложений, деплоймента, сети, хранилищ;</li>
37 <li>базу конфигурации с параметрами контейнеров, приложений, деплоймента, сети, хранилищ;</li>
38 <li>оркестратор или планировщик, которые запускают контейнеры.</li>
38 <li>оркестратор или планировщик, которые запускают контейнеры.</li>
39 </ul><p>Напомню, что Kubernetes объединяет пулы из нод - то есть серверов, объединённых общими характеристиками. Например, пул из Windows-северов, пул из Linux-серверов, пул из серверов, на которых есть GPU. Ноды объединяются в пулы по определённым характеристикам. Потом администратор сообщает Kubernetes, что это за характеристики: вычислительная мощность, память, хранилище - а Kubernetes самостоятельно распределяет ресурсы, находит в кластере ноды, которые удовлетворяют этим характеристикам, и запускает поды приложения на них.</p>
39 </ul><p>Напомню, что Kubernetes объединяет пулы из нод - то есть серверов, объединённых общими характеристиками. Например, пул из Windows-северов, пул из Linux-серверов, пул из серверов, на которых есть GPU. Ноды объединяются в пулы по определённым характеристикам. Потом администратор сообщает Kubernetes, что это за характеристики: вычислительная мощность, память, хранилище - а Kubernetes самостоятельно распределяет ресурсы, находит в кластере ноды, которые удовлетворяют этим характеристикам, и запускает поды приложения на них.</p>
40 <p>Можно установить минимальное и максимальное количество подов для приложения, и Kubernetes будет стараться поддерживать это их количество. А вот за поддержание и масштабирование количества нод (то есть отдельных физических серверов или виртуальных машин в составе поды) уже могут отвечать администратор, гипервизор или облачная платформа по типу Azure, GCP, AWS - но не сам Kubernetes.</p>
40 <p>Можно установить минимальное и максимальное количество подов для приложения, и Kubernetes будет стараться поддерживать это их количество. А вот за поддержание и масштабирование количества нод (то есть отдельных физических серверов или виртуальных машин в составе поды) уже могут отвечать администратор, гипервизор или облачная платформа по типу Azure, GCP, AWS - но не сам Kubernetes.</p>
41 <p>А если какой-то из элементов инфраструктуры даёт сбой, Kubernetes автоматически пытается решить проблему: например, перезапустить одну поду или deployment, чтобы состояние системы в целом соответствовало конфигурациям, загруженным через API и сохранённым в Master Node. В результате приложение, компоненты которого поделены на поды и контейнеры, крутятся в пространстве ресурсов, объединённых в кластер Kubernetes - в своеобразное облако-контейнер.</p>
41 <p>А если какой-то из элементов инфраструктуры даёт сбой, Kubernetes автоматически пытается решить проблему: например, перезапустить одну поду или deployment, чтобы состояние системы в целом соответствовало конфигурациям, загруженным через API и сохранённым в Master Node. В результате приложение, компоненты которого поделены на поды и контейнеры, крутятся в пространстве ресурсов, объединённых в кластер Kubernetes - в своеобразное облако-контейнер.</p>
42 <p>Работать администратором Kubernetes достаточно сложно, потому что нужно хорошо ориентироваться в компонентах и всех аспектах ресурсов Kubernetes. Я представляю это для себя как облако в облаке. Возьмём в качестве примера облачные сервисы IaaS (Infrastructure as a Service) - в них всегда есть несколько слоёв: хранилище, сеть, вычислительные ресурсы и виртуализация. И нам нужно знать весь этот стек, чтобы дойти до возможности установки и настройки Kubernetes.</p>
42 <p>Работать администратором Kubernetes достаточно сложно, потому что нужно хорошо ориентироваться в компонентах и всех аспектах ресурсов Kubernetes. Я представляю это для себя как облако в облаке. Возьмём в качестве примера облачные сервисы IaaS (Infrastructure as a Service) - в них всегда есть несколько слоёв: хранилище, сеть, вычислительные ресурсы и виртуализация. И нам нужно знать весь этот стек, чтобы дойти до возможности установки и настройки Kubernetes.</p>
43 <p>Но все те же слои будут отображаться ещё и внутри самого Kubernetes: там есть свои особенности организации виртуального хранилища, виртуальной сети и виртуальных вычислительных ресурсов. То есть у нас будет одновременно два стека: стек дата-центра или IaaS-облака + стек Kubernetes.</p>
43 <p>Но все те же слои будут отображаться ещё и внутри самого Kubernetes: там есть свои особенности организации виртуального хранилища, виртуальной сети и виртуальных вычислительных ресурсов. То есть у нас будет одновременно два стека: стек дата-центра или IaaS-облака + стек Kubernetes.</p>
44 <p>В результате всё, кроме "физической" сети и общих концепций, администратору придётся учить с нуля. Под общими концепциями я подразумеваю следующее:</p>
44 <p>В результате всё, кроме "физической" сети и общих концепций, администратору придётся учить с нуля. Под общими концепциями я подразумеваю следующее:</p>
45 <ul><li>что такое сеть,</li>
45 <ul><li>что такое сеть,</li>
46 <li>как работать с распределёнными хранилищами,</li>
46 <li>как работать с распределёнными хранилищами,</li>
47 <li>как работать с распределёнными вычислительными ресурсами.</li>
47 <li>как работать с распределёнными вычислительными ресурсами.</li>
48 </ul><p>Правда, с использованием этих концепций в реальной ежедневной работе с внутренними компонентами Kubernetes тоже придётся разбираться с нуля - что настраивать, чем пользоваться и так далее.</p>
48 </ul><p>Правда, с использованием этих концепций в реальной ежедневной работе с внутренними компонентами Kubernetes тоже придётся разбираться с нуля - что настраивать, чем пользоваться и так далее.</p>
49 <p>Я кручусь в мире больших компаний, где обращают особое внимание на сертификаты. И все сертификации по Kubernetes - практического характера. Чтобы их пройти, нужно не просто выбрать верные варианты ответов и расставить галочки - придётся написать конфигурации и команды за ограниченный отрезок времени прямо в командной строке. Например, за полтора часа создать 25 конфигураций - а это невозможно закончить вовремя, если не разбираешься в теме.</p>
49 <p>Я кручусь в мире больших компаний, где обращают особое внимание на сертификаты. И все сертификации по Kubernetes - практического характера. Чтобы их пройти, нужно не просто выбрать верные варианты ответов и расставить галочки - придётся написать конфигурации и команды за ограниченный отрезок времени прямо в командной строке. Например, за полтора часа создать 25 конфигураций - а это невозможно закончить вовремя, если не разбираешься в теме.</p>
50 <p>Поэтому всем, кто хочет стать специалистом по Kubernetes, я советую готовиться и проходить сертификации. Ничего сложнее заданий для сертификации у вас на собеседовании не спросят. Справитесь с сертификацией - сможете ответить и на вопросы интервью.</p>
50 <p>Поэтому всем, кто хочет стать специалистом по Kubernetes, я советую готовиться и проходить сертификации. Ничего сложнее заданий для сертификации у вас на собеседовании не спросят. Справитесь с сертификацией - сможете ответить и на вопросы интервью.</p>
51 <p>У меня уже есть сертификаты<a>Certified Kubernetes Administrator (CKA)</a>и<a>Certified Kubernetes Security Specialist (CKS)</a>, кроме того, существует<a>Certified Kubernetes Application Developer (CKAD)</a>. Это официальные программы от Linux Foundation. На то, чтобы получить сертификаты, мне понадобилось полгода - даже с учётом того, что я работаю с инфраструктурой уже более шести лет.</p>
51 <p>У меня уже есть сертификаты<a>Certified Kubernetes Administrator (CKA)</a>и<a>Certified Kubernetes Security Specialist (CKS)</a>, кроме того, существует<a>Certified Kubernetes Application Developer (CKAD)</a>. Это официальные программы от Linux Foundation. На то, чтобы получить сертификаты, мне понадобилось полгода - даже с учётом того, что я работаю с инфраструктурой уже более шести лет.</p>
52 <p>Для подготовки к CKS я проходил курс<a>Killer Shell Support Team</a>на Udemy. Также у меня есть подписка на Pluralsight, где тоже есть курсы, связанные с CKA, например<a>Certified Kubernetes Administrator (CKA)</a>. Есть и подготовительные<a>тренинги</a>от самой Linux Foundation. Правда, они состоят из текста и схем, поэтому мне показались очень скучными, а вот их офлайн-тренинги - очень интересные и живые. На них инструктор показывает всё необходимое буквально за несколько дней и отвечает на вопросы слушателей. А чтобы лучше разобраться в безопасности Kubernetes, рекомендую посмотреть<a>CIS Kubernetes Benchmarks</a>.</p>
52 <p>Для подготовки к CKS я проходил курс<a>Killer Shell Support Team</a>на Udemy. Также у меня есть подписка на Pluralsight, где тоже есть курсы, связанные с CKA, например<a>Certified Kubernetes Administrator (CKA)</a>. Есть и подготовительные<a>тренинги</a>от самой Linux Foundation. Правда, они состоят из текста и схем, поэтому мне показались очень скучными, а вот их офлайн-тренинги - очень интересные и живые. На них инструктор показывает всё необходимое буквально за несколько дней и отвечает на вопросы слушателей. А чтобы лучше разобраться в безопасности Kubernetes, рекомендую посмотреть<a>CIS Kubernetes Benchmarks</a>.</p>
53 <p>Ещё у меня лежат две книги издательства O’Reilly:</p>
53 <p>Ещё у меня лежат две книги издательства O’Reilly:</p>
54 <ul><li><a>Site Reliability Engineering</a></li>
54 <ul><li><a>Site Reliability Engineering</a></li>
55 <li><a>Cloud Native DevOps with Kubernetes</a></li>
55 <li><a>Cloud Native DevOps with Kubernetes</a></li>
56 </ul><p>На YouTube тоже много полезного - особенно каналы амбассадоров Kubernetes (их <a>полный список</a>есть на сайте CNCF): они разбирают кейсы, показывают команды, предлагают делать домашние лаборатории - например, поднять микро-Kubernetes на Raspberry Pi. Я рекомендую посмотреть видео с <a>YouTube-канала</a>DevOps-консультанта<a>Nana Janashia</a>.</p>
56 </ul><p>На YouTube тоже много полезного - особенно каналы амбассадоров Kubernetes (их <a>полный список</a>есть на сайте CNCF): они разбирают кейсы, показывают команды, предлагают делать домашние лаборатории - например, поднять микро-Kubernetes на Raspberry Pi. Я рекомендую посмотреть видео с <a>YouTube-канала</a>DevOps-консультанта<a>Nana Janashia</a>.</p>
57 <p>Если у вас уже есть сертификаты, то сложность на собеседовании может возникнуть разве что с System Design Interview: каким должно быть приложение, паттерны, Service Mesh, микросервисы (рекомендую<a>отличную презентацию</a>от Netflix). Но эти вопросы относятся уже к проектированию распределённых приложений, а не к самому Kubernetes.</p>
57 <p>Если у вас уже есть сертификаты, то сложность на собеседовании может возникнуть разве что с System Design Interview: каким должно быть приложение, паттерны, Service Mesh, микросервисы (рекомендую<a>отличную презентацию</a>от Netflix). Но эти вопросы относятся уже к проектированию распределённых приложений, а не к самому Kubernetes.</p>
58 <p>Также компании могут задавать вопросы, связанные со спецификой конкретного провайдера, на котором будет крутиться Kubernetes. Например, в случае<a>Azure</a>, на котором я специализируюсь, помимо Kubernetes есть и своя экосистема - тот же<a>Application Gateway</a>от Microsoft (вот, например,<a>описание кейса</a>по работе с Azure Kubernetes Service).</p>
58 <p>Также компании могут задавать вопросы, связанные со спецификой конкретного провайдера, на котором будет крутиться Kubernetes. Например, в случае<a>Azure</a>, на котором я специализируюсь, помимо Kubernetes есть и своя экосистема - тот же<a>Application Gateway</a>от Microsoft (вот, например,<a>описание кейса</a>по работе с Azure Kubernetes Service).</p>
59 <p>То есть это специфичные вопросы о том, как Kubernetes будет существовать в конкретном контексте: каком-то дата-центре или облаке. И тут важно становится всё: драйверы, типы хранилищ, которые есть у облачных провайдеров, и как они интегрируются с Kubernetes. Конечно, таких вопросов в сертификации нет, да и нужны они далеко не всем. Рядовому DevOps-инженеру, который будет просто деплоить приложения, это ни к чему. Здорово, если администратор будет это знать, но даже если нет, в команде обычно есть специалист по конкретному облаку, который всегда поможет.</p>
59 <p>То есть это специфичные вопросы о том, как Kubernetes будет существовать в конкретном контексте: каком-то дата-центре или облаке. И тут важно становится всё: драйверы, типы хранилищ, которые есть у облачных провайдеров, и как они интегрируются с Kubernetes. Конечно, таких вопросов в сертификации нет, да и нужны они далеко не всем. Рядовому DevOps-инженеру, который будет просто деплоить приложения, это ни к чему. Здорово, если администратор будет это знать, но даже если нет, в команде обычно есть специалист по конкретному облаку, который всегда поможет.</p>
60 <p>Работая с Kubernetes все стараются придерживаться стандартов, поэтому все кейсы в своей основе похожи, а нетипичные кейсы встречаются крайне редко. Более того, в той же Европе Kubernetes ещё очень редкое решение: компании там довольно консервативны и чаще выбирают решения на базе виртуальных машин - потому, что у них больше специалистов, которые умеют с ними работать. Те, кто выбирает Kubernetes в Европе, уже рискуют - то есть сам этот выбор является нетипичным сценарием.</p>
60 <p>Работая с Kubernetes все стараются придерживаться стандартов, поэтому все кейсы в своей основе похожи, а нетипичные кейсы встречаются крайне редко. Более того, в той же Европе Kubernetes ещё очень редкое решение: компании там довольно консервативны и чаще выбирают решения на базе виртуальных машин - потому, что у них больше специалистов, которые умеют с ними работать. Те, кто выбирает Kubernetes в Европе, уже рискуют - то есть сам этот выбор является нетипичным сценарием.</p>
61 <p>Самый частый кейс использования Kubernetes во Франции - попытка вырваться из тисков привязки к конкретному вендору (vendor lock).</p>
61 <p>Самый частый кейс использования Kubernetes во Франции - попытка вырваться из тисков привязки к конкретному вендору (vendor lock).</p>
62 <p>Достоинство любых облачных сервисов - Platform as a service, то есть приложение можно сразу же развернуть и заниматься более высоким уровнем абстракции, не думая о реализации уровня middleware, наподобие LAMP-stack (Linux/Apache/MySQL/PHP). Но если мы хотим, чтобы наше приложение могло одинаково работать на разных облачных платформах, решением может быть Kubernetes и запаковка приложения в контейнеры. Однако когда наше приложение привязывается к особенностям того или иного PaaS, переход от одного облачного провайдера к другому с технической точки зрения усложняется.</p>
62 <p>Достоинство любых облачных сервисов - Platform as a service, то есть приложение можно сразу же развернуть и заниматься более высоким уровнем абстракции, не думая о реализации уровня middleware, наподобие LAMP-stack (Linux/Apache/MySQL/PHP). Но если мы хотим, чтобы наше приложение могло одинаково работать на разных облачных платформах, решением может быть Kubernetes и запаковка приложения в контейнеры. Однако когда наше приложение привязывается к особенностям того или иного PaaS, переход от одного облачного провайдера к другому с технической точки зрения усложняется.</p>
63 <p>Хотя и при выборе Platform as a Service есть определённый риск стать Vendor locked - ведь существует не так много облачных решений. По сути, мы выбираем между Microsoft, Amazon, Alibaba или "Яндексом". А ведь делать темплейты приходится под конкретную конфигурацию конкретного облачного провайдера.</p>
63 <p>Хотя и при выборе Platform as a Service есть определённый риск стать Vendor locked - ведь существует не так много облачных решений. По сути, мы выбираем между Microsoft, Amazon, Alibaba или "Яндексом". А ведь делать темплейты приходится под конкретную конфигурацию конкретного облачного провайдера.</p>
64 <p>Именно поэтому сейчас многие компании боятся, что из-за санкций их облачный провайдер перестанет работать в тех странах, где они ведут свой бизнес, а значит, их веб-приложения станут там недоступны и оперативно перенести приложения на другой сервис не выйдет: все скрипты, весь код - всё заточено под конкретного облачного провайдера.</p>
64 <p>Именно поэтому сейчас многие компании боятся, что из-за санкций их облачный провайдер перестанет работать в тех странах, где они ведут свой бизнес, а значит, их веб-приложения станут там недоступны и оперативно перенести приложения на другой сервис не выйдет: все скрипты, весь код - всё заточено под конкретного облачного провайдера.</p>
65 <p>А в случае не с IT-бизнесом мы имеем ещё одну проблему: для таких компаний IT-инфраструктура не является основной, профильной деятельностью (то, что называется Core Business) - они рассматривают её лишь как внутренний сервис для удовлетворения потребностей бизнеса, а значит, команда IT-специалистов у них будет маленькой и поддерживать режим Multicloud будет практически нереально.</p>
65 <p>А в случае не с IT-бизнесом мы имеем ещё одну проблему: для таких компаний IT-инфраструктура не является основной, профильной деятельностью (то, что называется Core Business) - они рассматривают её лишь как внутренний сервис для удовлетворения потребностей бизнеса, а значит, команда IT-специалистов у них будет маленькой и поддерживать режим Multicloud будет практически нереально.</p>
66 <p>Типичный кейс Multicloud - когда покупают сервера Azure и Amazon и разворачивают Kubernetes-кластер на каждом из них. Один из облачных провайдеров становится главным, а второй используют для бэкапа и на случай, если что-то произойдёт с первым. Приложение контейнизируют и делают конфигурацию под Kubernetes, а компания может переходить из одного облака на другое без дополнительных инвестиций (кроме затрат на постоянную поддержку этого режима и стартовую конфигурацию под два облака).</p>
66 <p>Типичный кейс Multicloud - когда покупают сервера Azure и Amazon и разворачивают Kubernetes-кластер на каждом из них. Один из облачных провайдеров становится главным, а второй используют для бэкапа и на случай, если что-то произойдёт с первым. Приложение контейнизируют и делают конфигурацию под Kubernetes, а компания может переходить из одного облака на другое без дополнительных инвестиций (кроме затрат на постоянную поддержку этого режима и стартовую конфигурацию под два облака).</p>
67 <p>Это существенно снижает риски - да и дешевле решений на виртуальных машинах. Но перевести бизнес с виртуальных машин на Kubernetes тоже непросто - это означает полную смену технологии. Во Франции с этим сложно, потому что придётся пересобирать IT-команду или переучивать уже нанятых сотрудников. С точки зрения бизнеса это достаточно сложный организационный процесс, который займёт не меньше трёх-шести месяцев.</p>
67 <p>Это существенно снижает риски - да и дешевле решений на виртуальных машинах. Но перевести бизнес с виртуальных машин на Kubernetes тоже непросто - это означает полную смену технологии. Во Франции с этим сложно, потому что придётся пересобирать IT-команду или переучивать уже нанятых сотрудников. С точки зрения бизнеса это достаточно сложный организационный процесс, который займёт не меньше трёх-шести месяцев.</p>
68 <p>Альтернативный вариант - наём специалистов на аутстаффе, но это должна быть стабильная сертифицированная компания, потому что Kubernetes - относительно новая технология для мира больших корпораций и очень непросто найти хорошую внешнюю команду.</p>
68 <p>Альтернативный вариант - наём специалистов на аутстаффе, но это должна быть стабильная сертифицированная компания, потому что Kubernetes - относительно новая технология для мира больших корпораций и очень непросто найти хорошую внешнюю команду.</p>
69 <p>У каждого Kubernetes-провайдера есть свои особенности работы с сетью, хранилищем, вычислительными ресурсами. Например, у Azure есть GPU-серверы, и они добавили Confidential Computing, чтобы шифровать память при выполнении процессов - даже если для их выполнения нужен физический доступ к серверу.</p>
69 <p>У каждого Kubernetes-провайдера есть свои особенности работы с сетью, хранилищем, вычислительными ресурсами. Например, у Azure есть GPU-серверы, и они добавили Confidential Computing, чтобы шифровать память при выполнении процессов - даже если для их выполнения нужен физический доступ к серверу.</p>
70 <p>Если у вас довольно специфическое приложение, то, возможно, вам придётся не просто выбрать Kubernetes в качестве основы для построения инфраструктуры, но и найти провайдера, который бы мог запустить ваш особенный код. Например, такая потребность может появиться, когда вам критично выполнять GPU Compute - то есть вычисления на графических картах. Это особенность приложений с искусственным интеллектом - как правило, они используют ресурсы графических карт, а следовательно, такую возможность предоставит далеко не каждый облачный провайдер.</p>
70 <p>Если у вас довольно специфическое приложение, то, возможно, вам придётся не просто выбрать Kubernetes в качестве основы для построения инфраструктуры, но и найти провайдера, который бы мог запустить ваш особенный код. Например, такая потребность может появиться, когда вам критично выполнять GPU Compute - то есть вычисления на графических картах. Это особенность приложений с искусственным интеллектом - как правило, они используют ресурсы графических карт, а следовательно, такую возможность предоставит далеко не каждый облачный провайдер.</p>
71 <p><strong>Безопасность.</strong>В одной технологии много различных компонентов, за безопасностью которых приходится внимательно следить: как внешней, на уровне кластеров и нод, так и внутренней, на уровне конкретных образов. Уже появились специальные AntiMalware-решения под Kubernetes, которые сканируют всё, что происходит внутри контейнера.</p>
71 <p><strong>Безопасность.</strong>В одной технологии много различных компонентов, за безопасностью которых приходится внимательно следить: как внешней, на уровне кластеров и нод, так и внутренней, на уровне конкретных образов. Уже появились специальные AntiMalware-решения под Kubernetes, которые сканируют всё, что происходит внутри контейнера.</p>
72 <p>В отличие от контейнеров, виртуальная машина полностью абстрагируется от машины сервера-хоста, которая её запускает: у неё своя операционная система, поэтому риск проникновения в сервер из виртуальный машины гораздо меньше, чем из контейнера.</p>
72 <p>В отличие от контейнеров, виртуальная машина полностью абстрагируется от машины сервера-хоста, которая её запускает: у неё своя операционная система, поэтому риск проникновения в сервер из виртуальный машины гораздо меньше, чем из контейнера.</p>
73 <p>Решить эту проблему можно сканированием активности, шифрованием сетевого трафика, установкой компонентов для безопасности, решений для аутентификации контейнеров и компонентов приложений. Это усложняет жизнь Kubernetes-администраторов, но с этим ничего не поделать - это часть нашей работы.</p>
73 <p>Решить эту проблему можно сканированием активности, шифрованием сетевого трафика, установкой компонентов для безопасности, решений для аутентификации контейнеров и компонентов приложений. Это усложняет жизнь Kubernetes-администраторов, но с этим ничего не поделать - это часть нашей работы.</p>
74 <p><strong>Kubernetes - это всё-таки не PaaS</strong>, поэтому приходится запаковывать в контейнеры ещё и middleware, а также зависимости для приложения. Но и эта задача упрощается благодаря огромному количеству уже готовых и преднастроенных образов для контейнеров, которые выложены в публичные реестры.</p>
74 <p><strong>Kubernetes - это всё-таки не PaaS</strong>, поэтому приходится запаковывать в контейнеры ещё и middleware, а также зависимости для приложения. Но и эта задача упрощается благодаря огромному количеству уже готовых и преднастроенных образов для контейнеров, которые выложены в публичные реестры.</p>
75 <p><strong>Требование к приложениям контейнеризироваться.</strong>Это ограничивает возможности для компаний, которые не разрабатывают приложения сами. Поэтому часто мы сталкиваемся с необходимостью поддерживать legacy-инфраструктуру параллельно с основной. Эта проблема решается постепенным замещением приложений: старые приложения переписываются под новые модели архитектур с поддержкой новых технологий для инфраструктуры или происходит полный переход на приложения типа SaaS, в которых нет необходимости управлять инфраструктурой.</p>
75 <p><strong>Требование к приложениям контейнеризироваться.</strong>Это ограничивает возможности для компаний, которые не разрабатывают приложения сами. Поэтому часто мы сталкиваемся с необходимостью поддерживать legacy-инфраструктуру параллельно с основной. Эта проблема решается постепенным замещением приложений: старые приложения переписываются под новые модели архитектур с поддержкой новых технологий для инфраструктуры или происходит полный переход на приложения типа SaaS, в которых нет необходимости управлять инфраструктурой.</p>
76 <p><strong>Сложность администрирования.</strong>Решается использованием облачных сервисов. Я не рекомендую самостоятельно настраивать Kubernetes, потому что для этого нужны очень узкие специалисты, а поддерживать кластер самостоятельно очень сложно.</p>
76 <p><strong>Сложность администрирования.</strong>Решается использованием облачных сервисов. Я не рекомендую самостоятельно настраивать Kubernetes, потому что для этого нужны очень узкие специалисты, а поддерживать кластер самостоятельно очень сложно.</p>
77 <p>Есть огромное количество вариантов конфигурирования, и существует риск выбрать неправильные компоненты и настройки. В результате вы можете получить настолько кастомизированную инсталляцию Kubernetes, что в будущем вам никто не сможет помочь: не окажется ни консультантов, ни работников, которые могли бы решить ваши проблемы.</p>
77 <p>Есть огромное количество вариантов конфигурирования, и существует риск выбрать неправильные компоненты и настройки. В результате вы можете получить настолько кастомизированную инсталляцию Kubernetes, что в будущем вам никто не сможет помочь: не окажется ни консультантов, ни работников, которые могли бы решить ваши проблемы.</p>
78 <p>Возможное решение - самостоятельно пройти сертификацию своего IT-решения. То есть заказать аудит систем, сконфигурировать, выровнять и поддерживать решение по какому-то принятому в индустрии стандарту, а потом, от версии к версии, продолжать регулярно делать аудиты. Но, скорее всего, в этом случае вложенные инвестиции не окупятся.</p>
78 <p>Возможное решение - самостоятельно пройти сертификацию своего IT-решения. То есть заказать аудит систем, сконфигурировать, выровнять и поддерживать решение по какому-то принятому в индустрии стандарту, а потом, от версии к версии, продолжать регулярно делать аудиты. Но, скорее всего, в этом случае вложенные инвестиции не окупятся.</p>
79 <p>Лучше использовать решения, предоставляемые облачными провайдерами. Сегодня практически любой облачный провайдер подключает Kubernetes as a Service. Плюс существует понятие Certified Kubernetes - все облачные провайдеры сертифицируют своё Kubernetes-подключение в Cloud Native Computing Foundation, а фонд ведёт<a>список</a>сертифицированных провайдеров и постоянно обновляет его.</p>
79 <p>Лучше использовать решения, предоставляемые облачными провайдерами. Сегодня практически любой облачный провайдер подключает Kubernetes as a Service. Плюс существует понятие Certified Kubernetes - все облачные провайдеры сертифицируют своё Kubernetes-подключение в Cloud Native Computing Foundation, а фонд ведёт<a>список</a>сертифицированных провайдеров и постоянно обновляет его.</p>
80 <p>Если брать KaaS, то вы будете платить за выделенные вычислительные ресурсы и хранилища. Как правило, в стоимость также включена оплата за Master Node, который предоставляет API и распределяет ресурсы, а вот за Worker Nodes, на которых будут размещаться сами поды, надо будет платить отдельно.</p>
80 <p>Если брать KaaS, то вы будете платить за выделенные вычислительные ресурсы и хранилища. Как правило, в стоимость также включена оплата за Master Node, который предоставляет API и распределяет ресурсы, а вот за Worker Nodes, на которых будут размещаться сами поды, надо будет платить отдельно.</p>
81 <p>Есть и другие подводные камни. На сегодняшний день у всех облачных провайдеров драйверы выровнены по одной версии Kubernetes и имеют стандартную сборку. Однако их хотят освободить от необходимости поддерживать только основную версию и дать больше свободы - а значит, каждый облачный провайдер сможет делать собственную сборку Kubernetes под свои специфичные драйверы.</p>
81 <p>Есть и другие подводные камни. На сегодняшний день у всех облачных провайдеров драйверы выровнены по одной версии Kubernetes и имеют стандартную сборку. Однако их хотят освободить от необходимости поддерживать только основную версию и дать больше свободы - а значит, каждый облачный провайдер сможет делать собственную сборку Kubernetes под свои специфичные драйверы.</p>
82 <p>Это развяжет руки провайдерам, но усложнит жизнь администраторам. Ведь, например, если я хочу поддерживать Kubernetes в Azure, мне нужно будет лучше понимать, что происходит внутри Azure и понадобится поддерживать знания по конкретному облаку.</p>
82 <p>Это развяжет руки провайдерам, но усложнит жизнь администраторам. Ведь, например, если я хочу поддерживать Kubernetes в Azure, мне нужно будет лучше понимать, что происходит внутри Azure и понадобится поддерживать знания по конкретному облаку.</p>
83 <p>У Kubernetes были конкуренты среди оркестраторов контейнеров. Например, есть кластеры<a>Apache Mesos</a>,<a>HashiCorp Consul</a>,<a>Windows Server</a>,<a>Docker Swarm</a> - они помогают удобно работать с виртуальными машинами и контейнерами. На решениях от этих непрямых конкурентов тоже можно строить инфраструктуру. Однако Kubernetes выиграл войну и стал стандартом де-факто, потому что у него есть много удобных инструментов для управления ролями, доступами, политиками безопасности и идентификацией.</p>
83 <p>У Kubernetes были конкуренты среди оркестраторов контейнеров. Например, есть кластеры<a>Apache Mesos</a>,<a>HashiCorp Consul</a>,<a>Windows Server</a>,<a>Docker Swarm</a> - они помогают удобно работать с виртуальными машинами и контейнерами. На решениях от этих непрямых конкурентов тоже можно строить инфраструктуру. Однако Kubernetes выиграл войну и стал стандартом де-факто, потому что у него есть много удобных инструментов для управления ролями, доступами, политиками безопасности и идентификацией.</p>
84 <p>Ещё одна альтернатива Kubernetes - FaaS Serverless-технологии. При таком варианте код приложения будет запускаться в момент запроса, а так как приложение делится на самостоятельные запускаемые функции (созданные под каждый тип запроса), то такие системы становятся более портабельными и интегрируемыми, чем целое приложение, созданное под конкретный PaaS. Подобные решения есть у разных провайдеров, но они обладают кастомным API - например, как у <a>Droplets</a>от DigitalOcean.</p>
84 <p>Ещё одна альтернатива Kubernetes - FaaS Serverless-технологии. При таком варианте код приложения будет запускаться в момент запроса, а так как приложение делится на самостоятельные запускаемые функции (созданные под каждый тип запроса), то такие системы становятся более портабельными и интегрируемыми, чем целое приложение, созданное под конкретный PaaS. Подобные решения есть у разных провайдеров, но они обладают кастомным API - например, как у <a>Droplets</a>от DigitalOcean.</p>
85 <p>Однако использование виртуальных машин остаётся скорее более дорогой альтернативой использованию контейнеров. Такое решение просто будет сжирать больше ресурсов - хотя оно и может быть оправданно, если мы создаём архитектуру для микросервисов.</p>
85 <p>Однако использование виртуальных машин остаётся скорее более дорогой альтернативой использованию контейнеров. Такое решение просто будет сжирать больше ресурсов - хотя оно и может быть оправданно, если мы создаём архитектуру для микросервисов.</p>
86 <p>Кстати, помимо классического Kubernetes, существует и Kubernetes от RedHat -<a>Red Hat OpenShift</a>.</p>
86 <p>Кстати, помимо классического Kubernetes, существует и Kubernetes от RedHat -<a>Red Hat OpenShift</a>.</p>
87 <ul><li>Kubernetes стоит использовать, если в вашем проекте счёт контейнеров идёт на десятки или сотни.</li>
87 <ul><li>Kubernetes стоит использовать, если в вашем проекте счёт контейнеров идёт на десятки или сотни.</li>
88 <li>Kubernetes сам определяет, когда надо масштабировать ресурсы, когда подключить к проекту новые мощности и тому подобное - на основании конфигурации.</li>
88 <li>Kubernetes сам определяет, когда надо масштабировать ресурсы, когда подключить к проекту новые мощности и тому подобное - на основании конфигурации.</li>
89 <li>Несмотря на то, что Kubernetes даёт определённую свободу за счёт высокого уровня абстракции, вы всё ещё можете столкнуться с проблемой Vendor Lock. Привязка к специфике крупнейших облачных провайдеров делает решения непереносимыми.</li>
89 <li>Несмотря на то, что Kubernetes даёт определённую свободу за счёт высокого уровня абстракции, вы всё ещё можете столкнуться с проблемой Vendor Lock. Привязка к специфике крупнейших облачных провайдеров делает решения непереносимыми.</li>
90 <li>Чтобы избежать рисков, связанных с блокировкой облачного провайдера, есть смысл разворачивать инфраструктуру на платформе двух провайдеров: один будет основным, а второй - резервным.</li>
90 <li>Чтобы избежать рисков, связанных с блокировкой облачного провайдера, есть смысл разворачивать инфраструктуру на платформе двух провайдеров: один будет основным, а второй - резервным.</li>
91 <li>Поддержание Kubernetes-инфраструктуры - дорогое удовольствие, на это нужна крепкая команда специалистов. На внутреннюю команду будет уходить много денег, а на аутстаффе велик риск выбрать неподходящего подрядчика.</li>
91 <li>Поддержание Kubernetes-инфраструктуры - дорогое удовольствие, на это нужна крепкая команда специалистов. На внутреннюю команду будет уходить много денег, а на аутстаффе велик риск выбрать неподходящего подрядчика.</li>
92 <li>В Европе компании очень медленно переходят на Kubernetes и пока предпочитают более привычные и потому менее рисковые виртуальные машины.</li>
92 <li>В Европе компании очень медленно переходят на Kubernetes и пока предпочитают более привычные и потому менее рисковые виртуальные машины.</li>
93 </ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
93 </ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>