Введение
Kubernetes (K8S) был в моде в течение последних нескольких лет, потому что оркестрование приложений стало де-факто требованием для настольных кольцевых нагрузок для рабочих нагрузок с рабочими нагрузками. «Контейнирование» приложения — это относительно Прямые, и большинство инженеров Devops, которые стоят своей соли, могут создать несколько Dockerfiles и построить изображения в трубопроводе, которые готовы к запуску. Но где вы «запускаете» свои контейнеры Docker? А какие версии вы развертываете? А как все контейнеры разговаривают друг с другом? Здесь вступают в игру оркестровку и где крупные поставщики предлагают несколько вариантов. На момент написания этой статьи доступны два основных варианта: услуга эластичных контейнеров (ECS) от Amazon Web Services (AWS) и Kubernetes, которая предлагается всей инфраструктурой в качестве поставщиков услуг (IAAS), включая даже AWS.
Надежда состоит в том, что оркестровка позволит компаниям быстро и безболезненно предоставлять свои контейнерные приложения для тестирования и интеграции. Идеальный сценарий заключается в том, что он «просто работает», то есть вы бы щелкнули пальцами и подождите несколько минут, прежде чем увидеть ваше приложение, которое работает перед вами. В идеале вам нужно только указать минимальную информацию, необходимую для запуска вашего приложения: имя, структура, зависимости и т. Д., Предпочтительно читать из существующих файлов конфигурации, которые у вас уже есть. В любом случае это надежда.
Очевидно, что из названия мы сосредотачиваемся на Kubernetes, главным образом потому, что он доступен повсюду и в основном потому, что единственное Другое Вариант — это ECS, которая доказывает только точку нашего тезиса, что Kubernetes трудно использовать, потому что AWS придумала свое собственное решение, которое является предполагается быть Полегче. Но почему так сложно использовать? Сколько времени будет разумно, чтобы получить ваши заявки (ы) в K8s ?? И почему это не проще?
Инфраструктура Kubernetes жесткая
Мы всегда начинаем с инфраструктуры, хотя большинство компаний не будут строить свои собственные кластеры Kubernetes. Если бы вы когда -нибудь собирались использовать управляемую инфраструктурную службу, K8S будет в верхней части списка. Я уверен, что есть несколько человек, которые запускают minikube На их ноутбуках и скажи себе: «Ух ты, это легко! Я могу сделать это сам !! «Это напоминает мне о людях, которые запускают контейнер elasticsearch на своем ноутбуке и говорят:« Ух ты, мы должны реализовать это для нашего веб -сайта !! » Перенесемся в начало запуска производства через шесть месяцев или через год, и простая мантра «Мы можем сделать это сами» превращаются в «Хотелось бы, чтобы нам больше не пришлось этого делать».
Если вы действительно собирались построить свой собственный кластер Kubernetes, вам нужно будет построить все серверы и серверы плоскостей управления на ваших обнаженных металле или виртуальных машинах (VMS) из выбора IAA, а затем свяжите их вместе с некоторыми. Конфигурация Fancy Networking для отдельной трафики плоскости управления от трафика контейнера. Вам нужно будет настроить и запустить все программное обеспечение плоскости управления и заставить их всех разговаривать друг с другом, работать стабильно и правильно отслеживать. Необоротно, вы бы организовали контейнеры, которые организуют применение, но без большого оркестровки! Причудливый мираж, который представлен при запуска Minikube или Docker Desktop в Windows, скрывает весь начальный запуск системы оркестровки контейнеров с использованием контейнеров.
Мы даже не поняли осложнений настройки входа (которые обычно являются только экземплярами Nginx) и балансировщиков нагрузки, которые сидят сверху или рядом со стеком плоскости управления. В большинстве случаев вы почувствуете, что создаете целую инфраструктуру только для того, чтобы ваша инфраструктура работала (что не является необычным, но определенно не чувствует себя лучше, чем пытаться самостоятельно организовать вещи). Мы также не попали в элементы управления аутентификацией на основе ролей и сетевые политики, которые необходимо установить для поддержки более одного приложения или стека, работающего в одном кластере. Количество точек конфигурации и настройки на стороне сервера начинает быстро устанавливать, и мы еще даже не начали оркестраровать приложения, что является всей смыслом системы оркестровки, которую мы должны настраивать.
И давайте предположим, что вы действительно выйдете в этот глубокий северный атлантический океан огромных волн и замораживающих вод, вызывающих смерть, и создать себе судно достойного производства, который может организовать ваши контейнеры в реальное применение. Вы оглядываетесь в свой календарь, и прошло шесть месяцев или года с тех пор, как вы начали, и вы только сейчас развертываете самолет управления, который говорит: «Привет, мир! » Вы думаете, что вы успешны, и вы собираетесь отпраздновать, когда проверяете раздел релизов на веб -сайте, и теперь у вас есть новая версия K8s для развертывания !!!
Я слышу, что вы говорите: «Мы крупная компания
И у нас есть много
Инженеры DevOps, которые Лучший дециль
инженерного таланта во всем мире. Мы можем справиться со всей тяжелой работой. Ты просто нывающий, ревнивый ребенок. «Я вижу тебя, DataDog и Ticketmaster Анкет (Кстати, ваши обвинения в ревности могут быть правильными. В конце моей хорошей подруги Джастина Дина речь, где он показывает слайды со всеми членами команды, моя фотография должна была быть там — но я покинул команду двумя годами ранее.) Для всех остальных мы все просто решаем не тратить шесть месяцев или года, пытаясь построить наш контрольный самолет и запустить управляемую службу нашего поставщика IAAS, пересечь пальцы и молиться.
K8s yaml не является языком наценки
Если вы пропустили вперед и только начали управляемый кластер K8S, вы все еще ждете долго и утомительно, пробираясь в глубокое море сбивающего с толку YAML. Ямл должен написать то, что Джеймс Джойс Finnegan’s Wake на английском языке. Если вы закроете один глаз, используйте только левый мизинец и правый большой палец, чтобы следовать за Брайтом, положите ноги в пятую позицию балета, а затем произнесите коды Второй мировой войны под вашим дыханием, тогда вы легко увидите, что Yaml — это очень постигать. Как только вы повесите его, это все равно что ездить на велосипеде по замороженному озеру на тонком сантиметре льда с бешеными волками, преследующими вас. Это так же просто, как попытка разбиться с коктейльной вечеринкой древних инопланетян, проводимой в Форт -Нокс в дни контрабанды золота.
Смотри, это не так сложно, верно? Допустим, парень подходит к вам на улице. Он эксперт K8S, и он покажет вам, насколько легко развертывание веб -сервисов «Hello World». Разговор идет так:
Him: "kind: Deployment" You: "Oh, I see. Yes, I like it." Him: "apiVersion: apps/v1beta1." You: "Uh, okay. Isn't v1beta1 out of date? You can use v1 as of k8s 1.9. It's actually removed in 1.16, but I wonder how many people have never updated." Him: "Start over." You: "Wat." Him: "kind: Deployment" You: "Stop with the Kinds everywhere!" Him: "apiVersion: apps/v1" You: "This again." Him: "spec:" You: "Huh??" Him: "selector:" You: "No." Him: "matchLabels:" You: "Wat." Him: "app: nginx" You: "That's nearly the first thing I've understood about this so far." Him: "spec:" You: "Again?" Him: "containers:" You: "Okay, now we're getting somewhere." Him: "image: nginx:1.14.2" You: "Hmm." Him: "ports:" You: "Aiiiiieeee." Him: "containerPort: 80" You: "I'm going home. I quit. There must be a devops job I can get where I work on [Gatsby blogs](https://www.gatsbyjs.com/ "Gatsby nodejs frontend") all day."
И это просто пытается прочитать и понять файл. Попробуйте прочитать два примера K8S YAML, а затем создайте его с нуля. Еще лучше, каждый день попробуйте Код Ката Практика написания рабочих и развертываемых конфигураций в Kubernetes.
ПОПРОБУЙ.
Скопировать вставку кода
Я все еще посмеиваюсь по предыдущему разделу. Я должен посмеяться, потому что это ежедневная боль моего повседневного существования, и она сталкивается с этой болью напрямую-это все равно что стоять перед автобусом, которым управляет Киану Ривз на автостраде. Единственная вещь, которая держит мой нос возвращаться к шлифовальному камню, — это осознание того, что работать с Nodejs будет хуже. Проблема в том, что документы Kubernetes довольно хороши. Вы копируете примеры Hello World, и результаты выглядят так, как будто они работают. Вы начинаете становиться довольно хорошим в использовании kubectl. Вы можете увидеть расплывчатые формы и очертания в Yaml. Вы начинаете получать уверенность в том, что сможете сделать что -то полезное.
«Давайте попробуем переместить наше приложение в Kubernetes! «Вы закричите в воздух, когда вы появляетесь, капая мокрой от вашей ванны, обернутой только в полотенце, как archimedes , бегущие по улицам Сиракузы. «Мы просто скопируем некоторые разделы отсюда и здесь и поместим их туда и там, и у нас будет наше приложение в кратчайшие сроки»,-затаите вы, затаив дыхание, объясняете своим коллегам. » Это работает?! «Они взволнованно спрашивают». Еще нет. Я имею ввиду нет. Мне нужно отступить в разделе и удалить одну часть, которая не используется в этой спецификации. Тогда мне нужно решить, используем ли мы развертывание или Daemonset, но оно почти там. Я клянусь!»
Прежде всего, надеть одежду. Я за то, что я принимаю ванну, думая о файлах kubernetes yaml, но вам нужно одеться потом. Кроме того, если вы бросаете с собой свой MacBook Air в ванну, результаты могут быть наэлектризованы. Я знаю. Во -вторых, вот загадка для вас: сколько файлов YAML, по вашему мнению, вам нужно запустить и развернуть свое приложение? Хорошо, что у некоторых людей есть десять пальцев и десяти пальцев, потому что это, вероятно, сколько вам понадобится. И все они связаны, но не совсем. Вы можете скопировать разделы вставки вокруг, если вы авантюрны и доверчивы, но вы понятия не имеете, совместимы ли разделы. Есть только четыре требуемых полей, все из которых являются тащицей, и все идет под спецификация:
(включая spec:
). Большинство разделов дублируются, но лишь незначительно. Они различаются микроскопически таким образом, что макроскопически имеет значение.
Копирование и вставка — это замечательное искусство, и я лично работал всю свою взрослой карьеру таким образом. Я радостно признаю, что весь мой результат в жизни похож на примечание выкупа Вырезать из переполнения стека и примеров документации. Но объединить эту хрупкую сеть текста, чтобы сделать то, что действительно должно быть довольно простой и очевидной, утомительно, склонно к ошибкам и слишком пробной и ошибкой- у Было бы гораздо лучше выразить то, что вы хотите, и иметь возможность на самом деле излучать работоспособный, исполняемый код, который дает желаемый результат, а именно ваше приложение.
Все эти жалобы на YAML довольно забавны, но на самом деле это симптом причины: Kubernetes так сложно использовать, потому что интерфейс должен быть полностью жестким. Конфигурации K8S не живут, величественные деревья, это куча мертвого нарезанного дерева. Они хуже, чем нарезанная древесина, они представляют собой целые окаменелые леса, обширные груды камней с отпечатками тысяч лет роста кольца, запечатленных на них и сохранившиеся в течение миллионов лет.
Нет, они хуже, чем окамененных лесных лесов! Kubernetes Manifests-это перфорированные карты двадцать первого века. Каждый YAML представляет собой коллекцию отверстий, засорившихся в рубленных деревянных картах, которые мы не можем прочитать и понять, что мы вслепую влили в Kubectl Apply -f
Команда и надежда, что мы поместили их в правильный заказ и не совершили ошибку в одну дыру нигде в стеке. Затем, как и машины прошлых лет, мы стараемся получить представление о том, что происходит, глядя на мигающие огни и неясный вывод тикера, надеясь получить понимание.
Так же, как попытка воспроизвести Моцарта или Бетховена на Пианиола Утомительный, трудоемкий, склонный к ошибкам и, в конечном счете, невыполненные, аналогичные манифесты K8 заморожены навсегда во времени, невозможно писать явно и играют ту же мелодию AD Infinitum . Причина, по которой люди все еще используют v1beta1
хотя v1
был доступен для два года это потому, что с тех пор никто не генерировал новые конфигурации K8S.
Доктор, исцеляй себя; или отладка себя сложно
Самое замечательное в K8s в том, что когда что -то идет не так, никто не знает. Я не могу сосчитать, сколько раз я что -то развернул, работал над чем -то другим в течение нескольких часов, вернулся и понял, что развертывание просто молча не удалось, и ничто никогда не уведомило меня. Сообщение об ошибке было где -то доступно: было ли оно в журналах развертывания или в журналах POD? Происходит ли вход или вход развертывание? Где в десяти или десятках Добрый
S Файлы появились в записи журнала? И основной причиной часто была некоторая не связанная с этим проблема: ошибочное и невидимое пробел, не используя двойные кавычки, когда я должен был, не использовать отдельные кавычки, когда я должен иметь или получить основной конец отступления из вопроса о копии вставки с трех недель назад.
Есть, конечно, инструменты и методы и инструменты мониторинга, которые помогают; Это как Элон Маск Марс Орбитр MVP: «Это работает?» «Абсолютно!! Тысяча раз, да! » «Что оно делает?» «Почти все, что вы хотите! «Вы должны знать, что искать и где это искать, тогда вы должны знать, как выяснить, что с этим делать, тогда вы должны выяснить, где в десяти или десятках файлов, какие строки или строки в Исправьте, и тогда вы должны знать, как это исправить.
Другая замечательная вещь в K8s — это то, что у вас есть все это. Слушай: Друго, приятель, приятель, ты выбрал это существование. Вы копируете вставка «код». Примеры документации работают. Я могу запустить «Привет, мир!» На моем ноутбуке Так что это явно на вас. Ты тот, кто пробежал через офис, промокая в полотенце, крича «Кубернеты!» Если клятва Гиппократа «не причиняет вреда», то, возможно, клятва DevOps «не приносит больше вреда, чем то, что вы уволят».
И последняя замечательная вещь о K8s заключается в том, что есть множество людей и компаний, которые утверждают, что знают, что происходит и что делать, и они с радостью возьмут ваши деньги, чтобы показать вам, является ли это правдой или нет. Тип Kubernetes
в поисковые системы и увидите все появляющиеся рекламы. Эта статья является частью проблемы, а также решения, так что оставайтесь со мной.
Решение, наконец
Есть несколько способов сделать Kubernetes проще в использовании:
- Не используйте K8S: беги, крича за свою жизнь
- Обурите всех своих людей, чтобы выяснить это (вернитесь ко мне, когда вы закончите; я все еще могу быть жив. Возможно нет.)
- Найдите больше людей для вашей команды, чтобы выяснить это (я доступен, ударил меня. Ха, просто шучу.)
- Наймите кого -нибудь еще, чтобы сделать это для вас
- Подождите дольше, чтобы результаты, делайте больше с меньшими затратами, в конечном итоге остановитесь на чем -то, что не ужасно
- Найдите решение, которое развертывает ваши приложения в средах для вас и продолжайте ваш фактический бизнес, ну, в общем, какой бы бизнес на самом деле вы ни делали. Инструменты и услуги автоматизации могут помочь вам выполнить ваше приложение, не инвестируя в действия, описанные выше. Кто -то должен сделать это, но лучше не быть вами.
В Выпуск Мы неустанно работаем над тем, чтобы воплотить ваше приложение к жизни в организованном человеческом интерфейсе. Мы пишем программное обеспечение, чтобы справиться со всей сложностью, трудностями и напряжением, чтобы никто не должен был (если они не хотят!) Мы создаем двигатель, который управляет автомобилем Kubernetes, и доставляем решения, которые наши клиенты могут использовать, чтобы продолжить свою деятельность.
фото Крис Чоу на Неспособный
Оригинал: «https://dev.to/rwilsonrelease/why-is-kubernetes-so-hard-i42»