10 лет назад, 6 июня 2014 года, был сделан первый коммит в Kubernetes. По сути, этот день стал историческим — тогда определился путь развития современных технологий контейнеризации и организации облачной инфраструктуры.

Сегодня, согласно отчету Cloud Native Computing Foundation (CNCF), Kubernetes пользуются 71% компаний из списка Fortune 100. Чтобы понять, как Kubernetes стал одним из краеугольных камней облачных вычислений и микросервисов, посмотрим на первые годы его жизни. Это будет история о необычной стратегии борьбы с конкурентами и способности объединить враждующие стороны в работе над одним проектом.

Chroot, Borg, Omega и Docker — предшественники K8s

В 1979 году в составе операционной системы Unix появилась утилита chroot. Она позволяла изолировать процессы в рамках файловой системы. И хотя chroot сам по себе не является инструментом контейнеризации, он стал предшественником более мощных технологий.

В начале 2000-х годов Google задумалась над тем, как вывести производительность виртуальных серверов на максимум. Результатом этих размышлений стал Borg — система управления контейнерами первого поколения. Borg выступал в роли «мозга» для запуска контейнерных рабочих нагрузок в центрах обработки данных. Кстати, Borg еще жив.

Примечание

Borg назвали в честь боргов — группы кибернетических организмов из сериала «Звездный путь». А так как многие из разработчиков Kubernetes ранее работали над Borg, они дали Kubernetes кодовое название «Project 7» в честь Семь-из-девяти — персонажа сериала «Звездный путь». При этом Borg был написан на C++, а Kubernetes — на Go. В качестве логотипа было использовано семиспицевое рулевое колесо, которое придумал Тим Хокин.

Семь-из-девяти — персонаж сериала «Звездный путь»

Позже, в 2013 году, у Google появился более продвинутый инструмент — Omega, система управления контейнерами второго поколения. Это было гибкое и масштабируемое решение. В том же году появился и Docker. Он позволял разработчикам создавать, развёртывать и управлять контейнерными приложениями, а также запускать их на отдельных машинах. 

Docker сильно повлиял на будущих создателей Kubernetes, разработчиков из Google Крейга Маклаки, Джо Беду и Брендана Бёрнса. Они были в восторге от его возможностей. Но, как ни странно, больше всего их вдохновили именно ограничения, а не возможности Docker: он работал только на одном узле и не позволял организовать полноценную автоматизацию работы с ресурсами. Стало понятно, что для удобства работы с контейнерами не хватает оркестратора, который мог бы автоматически разворачивать и управлять большим количеством контейнеров на множестве узлов одновременно. Этот оркестратор должен был стать системой управления контейнерами третьего поколения. Так началась история Kubernetes.

Всё началось осенью 2013 года. Мы с Крейгом Маклаки и Джо Бедой работали над инфраструктурой публичного облака. В 2013 году облачный ландшафт сильно отличался от сегодняшнего. Императивные bash-скрипты только начинали уступать место декларативной конфигурации IaaS. Netflix популяризировала идею неизменяемой инфраструктуры, но делала это с помощью тяжеловесных образов виртуальных машин. Да, на тот момент несколько компаний уже имели понимание о том, что такое оркестрация в принципе и оркестрация контейнеров в частности, но это понимание существовало вне контекста облаков и уж тем более не в крупных технологических компаниях.

Docker всё изменил. Он популяризовал идею легковесной среды исполнения для контейнеров и дал простой способ упаковки, дистрибуции и развёртывания приложений. А тот инструментарий и пользовательский опыт, которые предоставлял Docker, открыли совершенно новый подход к упаковке и обслуживанию приложений в облаке. Если бы не Docker, изменивший взгляд разработчиков на облачные технологии, Kubernetes бы просто не появился.

Именно Джо впервые предложил нам обратить внимание на Docker летом 2013 года, когда мы втроём размышляли о том, как можно донести до широкой аудитории опыт использования Cloud Native-приложений. И для нас важность и влияние этого нового инструмента были очевидны. Мы знали, что это критически важный компонент в развитии Cloud Native-инфраструктуры.

Брендан Бёрнс, один из создателей Kubernetes

Первые шаги Kubernetes

В том же 2013 году Крейг Маклаки, Джо Беда и Брендан Бёрнс предложили идею системы управления контейнерами с открытым исходным кодом. Они хотели перенести опыт внутренней инфраструктуры Google в сферу облачных вычислений — это позволило бы Google составить конкуренцию Amazon Web Services (AWS), на тот момент лидеру среди облачных провайдеров.

Со временем становилось всё очевиднее, что Docker с его ориентацией на одну машину не может быть полноценным решением. Хотя Docker отлично справлялся с созданием и упаковкой отдельных контейнеров и их запуском на отдельных машинах, существовала явная потребность в оркестраторе, который мог бы развёртывать множество контейнеров и управлять ими на множестве машин.

Размышляя над этим, Джо, Крейг и я всё больше понимали, что появление такого оркестратора не просто необходимо, но и абсолютно неизбежно, — и одновременно мы понимали, что это должен быть именно Open Source-оркестратор. Такое осознание пришло к нам поздней осенью 2013 года. С этого момента началась работа сначала над прототипом, а затем и над самой системой, которая в итоге стала известна как Kubernetes. А уже в 2014 году к нам присоединились невероятно талантливые разработчики Вилле Айкас, Тим Хокин, Доун Чен, Брайан Грант и Дэниел Смит.

Первоначальной целью этой небольшой команды была разработка «минимально жизнеспособного оркестратора».

Попутно мы потратили немало времени на то, чтобы убедить руководство компании в необходимости открытия исходного кода проекта. Я бесконечно благодарен Крейгу за написание многочисленных whitepaper, а Эрику Брюеру — за его активную поддержку на самой ранней стадии, благодаря которой Kubernetes увидел свет.

Брендан Бёрнс, один из создателей Kubernetes

Мы оказались в затруднительном положении — было несколько задач, которые мы хотели решить с помощью Kubernetes. Первое — существенно изменить правила игры, учитывая жёсткую конкуренцию с другими облаками. Игроки вроде Amazon уже давно завоевали этот рынок. Можно было побороться с ними в области виртуальных машин или попытаться убедить разработчиков создавать приложения совсем по-другому — чтобы этот новый стиль совпадал с сильными сторонами Google Cloud.

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

Тогда-то мы и осознали, что всего этого не добиться без открытого исходного кода. Проект обязательно должен быть в Open Source. То есть можно было просто сказать парням, привыкшим к сервисам AWS: «Эй, вы можете запустить Kubernetes на Amazon», — что очень их удивляло.

Джо Беда, один из создателей Kubernetes

Оцените масштаб идеи: «Мы не можем конкурировать с AWS средствами классического маркетинга, потому что пользователи просто привыкли к их стилю работы, поэтому мы создадим новый Open Source-инструмент, который станет рыночным стандартом и навсегда изменит подход инженеров к разработке приложений — так, чтобы этот подход соответствовал стилю Google Cloud». Это же просто на грани гениальности и сумасшествия.

Естественно, многие из первых разработчиков Kubernetes до этого успели поработать над Borg и Omega, и они хотели создать оркестратор контейнеров, который учитывал бы все знания и навыки, полученные при разработке ​​систем управления контейнерами первого и второго поколений. При этом они стремились сделать новый Open Source-инструмент менее сложным и с более удобным интерфейсом.

Уже в июне 2014 года Джо Беда сделал первый коммит в репозиторий Kubernetes. И хотя именно 6 июня принято считать точкой отсчёта в истории проекта, сам разработчик отмечает, что это лишь вершина айсберга и весь процесс был запущен на несколько месяцев раньше.

10 июня 2014 года Kubernetes был официально анонсирован на DockerCon, и с этого момента проект начал привлекать внимание сообщества. В то время он позиционировался как версия Borg с открытым исходным кодом.

На ранних стадиях разработки Kubernetes включал в себя следующие базовые функции:

  • репликация для развёртывания нескольких экземпляров приложения;

  • балансировка нагрузки и обнаружение сервисов;

  • базовые проверки состояния и восстановление;

  • планирование для объединения многих машин в группы и распределения работы между ними.

В 2015 году на конференции O'Reilly Open Source Convention (OSCON) уже была представлена расширенная и доработанная версия оркестратора — Kubernetes 1.0. А в 2016 году Google передала Kubernetes в CNCF, подразделение Linux Foundation. 

Кстати, Kubernetes стал первым проектом CNCF и первым же получил статус Graduated (уже в 2018 году). Сейчас Kubernetes — один из самых быстрорастущих Open Source-проектов в истории. Примерно в тоже время к разработке Kubernetes подключилась команда Red Hat OpenShift.

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

Брендан Бёрнс, один из создателей Kubernetes

Развитие Kubernetes в первые несколько лет

К 2017 году самые известные разработчики конкурирующих решений уже объединились вокруг Kubernetes и решили сделать ставку именно на него. Первыми объявили о поддержке K8s команды Pivotal Cloud Foundry, Marathon и Mesos (VMware и Mesosphere Inc.). А через пару месяцев в проект влились Docker, Inc., Microsoft Azure и AWS.

Уже 6 марта 2018 года CNCF сообщил о том, что Kubernetes занимает девятое место по количеству коммитов и второе место по коммитерам и числу Issues среди всех проектов на GitHub (по последним двум показателям K8s уступал только Linux).

Люди смотрят на Kubernetes со стороны и не понимают, зачем это им, но как только они видят его в деле, у них как будто что-то щёлкает в голове: «О Божечки! Хочу так же!» Я множество раз выступал перед скептически настроенной аудиторией, которая не понимала, для чего всё это нужно. Такой аудитории я просто показывал маленькие и простые функции вроде плавающего обновления (rolling updates) и объяснял, как это работает. А потом, например, останавливал обновление на полпути и тут же делал откат. А публика удивлялась: «Ого! А мы это делаем вручную, тратим кучу сил и времени!»

Тим Хокин, один из первых разработчиков Kubernetes

Вместо заключения: Kubernetes сегодня

Со времён первого коммита прошло 10 лет. Всё это время сообщество Kubernetes росло в геометрической прогрессии — и сейчас у него более 75 000 контрибьюторов, которые представляют почти 8000 компаний. Общее количество коммитов перевалило за 315 тысяч. В процессе своей эволюции Kubernetes преодолел географические, языковые и корпоративные барьеры, сформировав вокруг себя по-настоящему открытое сообщество, основанное на принципах совместной работы. И это заслуга каждого участника проекта. А благодаря усилиям пользователей Kubernetes стал фундаментом современных облачных вычислений.

Удивительно, какой путь прошёл Kubernetes: от идеи в головах трёх человек до феномена, который изменил наше представление о Cloud Native-разработке в целом. Это было удивительное путешествие, но что меня действительно поражает, так это то, что даже сейчас мы не до конца осознаём всё влияние Kubernetes. Спасибо всем, кто помог нам дойти до текущего состояния, и спасибо всем, кто поведёт нас дальше.

Брендан Бёрнс, один из создателей Kubernetes

P.S.

Читайте также в нашем блоге:

Интересные материалы про 10-летие Kubernetes и его историю: