Kubernetes — это классное слово в вашем архитектурном документе, и горячо на вашем резюме. На предпосылке или в облаке каждый хочет иметь рабочие нагрузки в Kubernetes. Пока мы следуем за стадом, важно понять, что в него входит. Какие узоры и анти-паттерны, когда мы работаем с Kubernetes. Этот блог дает вам все, что вам нужно, чтобы понять и использовать Kubernetes.
- Почему kubernetes
- Основные понятия
- Minikube
- Kubernetes объекты
- Узоры и антипаттерны
- Kubernetes в облаке — EKS
- Kubectl
- Microk8s
- Вопросы интервью
Почему? $%^#
Это была моя первая мысль, когда я читал о Kubernetes. Зачем нам такие сложные системы? Простого Java -Jar достаточно, чтобы запустить мой микросервис на сервере Linux! Я пишу хороший код. Я справляюсь со всеми исключениями. Я уверен, что ничто не пройдет. Даже если это не удастся, я могу написать простой сценарий Bash, который заботится о перезапуске моего сервиса. Мой код может позаботиться о горизонтальном масштабировании и отказах. У меня хороший брандмауэр и фреймворки. И все это требует лишь нескольких строк дополнительного кода — упакованного в простую банку, которую я включаю во все свои микросервисы. Почему я должен тратить драгоценные вычисления и время и ресурсы на такие сумасшедшие вещи? Честно говоря, я все еще чувствую то же самое.
Многие системы действительно не нужны Kubernetes. Но некоторые системы делают. Для приложений по масштабе критического предприятия, где время простоя может быть дорогостоящим, нам нужно больше, чем просто внутренняя библиотека — чтобы позаботиться об оркестровании услуг. Мы склонны недооценивать уровень упрочнения и устойчивости, которые нам нужны для таких приложений. И это невозможно или стоит усилий, если мы выберемся из -за переосмысления колеса для каждого применения в мире. Нам нужна система, которая проверяется и затвердевает разработчиками по всему миру. И это Kubernetes.
Да, Kubernetes дает гораздо больше, чем выше, и это может показаться расточительным для некоторых. Но мы также можем рассматривать это как возможность улучшить и масштабировать наши услуги за пределы того, что нам нужно сегодня. Это требует незначительных усилий по изучению чего -то нового — с отличной доходностью в форме масштабируемости и стабильности.
Kubernetes начался как Hedty Multi Node Application. Но его популярность и удобство использования привели к нескольким вариантам, таким как Minikube (для одного ПК) и Microk8s (IoT). Kubernetes не ограничивается приложениями PETA Scale. Он нашел свой путь в различные другие платформы и архитектуры.
Простой поиск в Google покажет нам — «Kubernetes — это портативный, расширяемый инструмент оркестровки с открытым исходным кодом». Это звучит круто — не так ли? Мы только что очистили первый вопрос интервью. Давайте теперь посмотрим на остальных.
Простыми словами
Kubernetes был разработан, чтобы обеспечить экстремальную доступность, масштабируемость, производительность и аварийное восстановление. Это достигается экосистемой, построенной вокруг мульти -узловой архитектуры. Высокая доступность и аварийное восстановление требует, чтобы приложение распространялось на несколько серверов (или виртуальных машин в облаке).
Каждый сервер называется Узел Анкет У нас есть Мастер -узлы и Рабочие узлы Анкет Как следует из имен, мастер позаботится об оркестровке, и работник — это то, что действительно справляется с работой. Kubernetes не требует этого различия. У нас могут быть компоненты мастер -узла, работающие на рабочих узлах. Но это хорошая практика, чтобы разделить их.
Очевидно, что Master Node является основным компонентом, и мы не можем полагаться только на один мастер -узел. Нам нужно как минимум два. У нас может быть несколько рабочих узлов, которые несут рабочие нагрузки контейнера. Один узел имеет несколько контейнеров, работающих в Стручки Анкет
Мастер -узел, также называемый Плоскость управления , содержит несколько компонентов, которые заботятся об оркестровке. Узел работника соединяется с мастером и заботится о отдельных стручках через минимальные приложения, работающие на рабочем узле — Кубелет и K-Proxy Анкет У Мастера, с другой стороны, есть сложный набор компонентов, которые обрабатывают оркестровку.
Давайте посмотрим на каждый из этих компонентов в некоторых деталях. Но прежде чем я отбросил имена этих компонентов, имеет смысл подумать о том, как мы будем реализовать приложение, такое как Kubernetes. Какие компоненты мы бы добавили к этому?
Выше мы видели, что у него есть панель управления в главных узлах и кусок рабочих узлов. Наиболее важным компонентом такого приложения должен быть планировщик, который заботится о распределении правильного узла работника для любого контейнера для запуска. У этого планировщика должен быть способ контролировать состояние каждого из рабочих узлов, чтобы он мог принять разумное решение о планировании. Сам контейнер должен быть покрыт сущностью, которая контролирует его прогресс и повышает тревогу, если он не является здоровым.
Нам нужен способ сохранить состояние всего кластера, чтобы мы могли управлять аварийным восстановлением. Точно так же каждый контейнер должен иметь способ сохранить любые постоянные данные.
И, прежде всего, нам нужен способ позволить остальному миру подключаться к услугам в кластере. Хорошо иметь аккуратный пользовательский интерфейс, который помогает разработчикам получить доступ к внутренним видам, API для других приложений. И, наконец, клин для ботаников, которые наслаждаются сложностью.
И все это должно быть реализовано с экстремальной абстракцией, так что ни один компонент не заблокирован в другой. Давайте теперь посмотрим, как Kubernetes реализует каждый из них.
Стручки
На самом низком уровне у нас есть контейнеры (в основном докер), которые могут запускать наши микросервисы. Если вы читаете это, очевидно, вы знаете, что такое Docker или контейнер, поэтому я не буду слишком глубоко в него. Если нет, то вы можете просто подумать об этом, это хорошо упакованный микросервис, который может работать независимо.
Pod Kubernetes — это сахарное покрытие на этом контейнере, который заботится о контейнере, работающем на одном из рабочих узлов в кластере. Он отслеживает контейнер, и если он не удается, стручка позаботится о перезапуске его. POD извлекает журналы, сгенерированные контейнером, и толкает их в журналы кластеров. Он сообщает о здоровье контейнера в кластер, тем самым выступая в качестве моста между Kubernetes и самим контейнером. Кроме того, капсул может иметь несколько контейнеров — если необходимо тесно связать их.
Каждый стручок имеет независимый IP -адрес во внутреннем пространстве IP -кластеров. Это позволяет общаться между микросервисами в кластере
обслуживание
Стручки имеют отдельные IP -адреса — чтобы стручки могли общаться друг с другом. Но тогда у нас есть проблема. Стручки не являются постоянными. Они могут быть прекращены, масштабированы или могут умереть по разным причинам, которые находятся за пределами нашего контроля. Kubernetes позаботится о том, чтобы заменить их надлежащим образом. Но когда создается новый стручок, он получает еще один IP -адрес. Кроме того, поскольку мы масштабируем горизонтально, мы можем иметь несколько стручков для одного и того же микросервиса.
Если один микросервис вызывает другое, мы не можем сделать это с помощью IP -адресов — это добавит сложность вызывающему абоненту. Звонищий должен будет позаботиться о выявлении текущего IP -адреса POD, и если у нас есть несколько стручков для микросервиса, ему придется позаботиться о выборе одного из них. Это абсурдно!
Чтобы избежать этой проблемы, нам нужна сущность, которая охватывает все стручки данного микросервиса, и обеспечивает постоянный URL для вызова этой услуги. Внутренне он заботится о картировании запроса на правильный стручок, учитывая различные факторы, такие как баланс нагрузки, масштабирование и т. Д.
Развертывание
Как мы видели, стручки могут быть заменены, масштабированы, прекращены и созданы на лету. Развертывание может рассматриваться как шаблон, который определяет, как может быть создан новый стручок для данной службы. Он содержит все подробности о изображении Docker, свойствах приложения, количестве реплик, ресурсах, необходимых для POD. Он содержит детали того, как POD должен общаться с внешним миром … и все, что требуется Kubernetes, чтобы создать стручок и обеспечить правильное количество стручков.
Кубелет
Все это происходит на рабочем узле под руководством панели управления, работающей на главном узле. Естественно, нам нужен способ подключить работника с мастером некоторых приложений, которое контролирует действия на узле работника и сообщает о статусе мастеру; и берет команды от Мастера, чтобы реализовать на рабочем узле. Это кубелет.
У этого есть очень мало собственного интеллекта. Я просто позаботился о отчетности и внедрении инструкций. Но он подробно отслеживает состояние узла — ЦП, использование памяти рабочих узлов, а также состояние каждого стручка, работающего на узле. Он заботится о периодически проведении проверки здоровья на каждом стручке, чтобы убедиться, что он активен.
Плоскость управления может дать инструкцию заканчивать заданный стручок или создать новые. Кубелет заботится о выполнении этих инструкций.
Kube Proxy
Некоторые из этих микросервисов могут подвергать внешний API или получить доступ к некоторым внешним API. Это включено kubeproxy. Как следует из названия, оно действует как простой прокси -сервер на узле.
API -сервер
Это фасад кластера Kubernetes для остального мира. Это точка входа для всех вызовов API. Несколько клиентов общаются с этим — пользовательский интерфейс Dashboard, API для автоматизации технологий, инструмент CLI. Он основан на Kurbe-Apiserver Анкет Обратите внимание, что это запись для самого кластера Kubernetes. Общение отдельных стручков — с внешним миром, не проходит через это. Он проходит через кубепрокси на отдельных узлах рабочих.
Планировщик
Планировщик отвечает за планирование стручков на рабочих узлах. Если существующий стручок умирает, нам нужно удалить его и создать новый. Точно так же, если нам нужно масштабировать развертывание, нам нужно создать новые стручки. Такие стручки должны найти новое место в кластере. Они должны быть назначены конкретному узлу работника.
При выборе рабочего узла он должен позаботиться о нескольких факторах. У нас не может быть все стручки развертывания на одном узле. Это побеждает цель наличия кластера нескольких рабочих узлов. Стручки должны быть распределены так, чтобы, если какие -либо рабочие узлы сбои, остальная часть кластера должна продолжить работу. Наряду с этим, необходимо позаботиться о том, чтобы нагрузка одинаково распределена между различными рабочими узлами.
Для этого должно быть все, что нужно, чтобы принять разумное решение об этом распределении. Он должен знать состояние каждого стручка на каждом рабочем узле. Он должен знать нагрузку на каждый узел. Для всего этого он должен быть подключен к Kubelets, работающим на каждом рабочем узле.
Менеджер контроллера
Как следует из названия, это контроллер, управляющий всем кластером. Это отслеживает все, что происходит в кластере. Kubelets сообщают о состоянии каждого стручка для этого менеджера контроллера. Если стручок умирает, статус сообщается контроллеру. При необходимости (возможно, что POD был явно прекращен для масштабирования — в этом случае нет необходимости заменять), контроллер запускает планировщик для создания замены.
и т.д.
Это текущее состояние кластера. (Кластер с точки зрения администратора Kubernetes, а не состояние отдельных микросервисов). ETCD содержит подробную информацию о текущей системе и о том, что она должна быть. Другие компоненты относятся к нему для определения следующего действия.
Это очень полезно в случае аварийного восстановления — в результате чего менеджер контроллеров в новом кластере может просто выбрать ETCD, чтобы воссоздать новый кластер. Но есть предостережение. Kubernetes не заботится о том, чтобы сохранить ETCD на диске. Если мы хотим использовать, если для аварийного восстановления, администратор должен позаботиться об этом.
Вход
Кластер Kubernetes никогда не является отдельной сущностью. Он имеет активные связи с остальным миром. Он вызывает внешние API, а также экспортирует API для остального мира. Внешняя служба Kubernetes позаботится о предоставлении IP -адресов. Но это не правильный путь. Хорошая система не должна экспортировать IP -адреса. Вместо этого он должен экспортировать URL. Это реализовано с использованием входа.
INGRESS имеет сложный механизм для экспорта конкретного URL -адреса для каждой услуги. Мы можем обеспечить отображение внешнего экспортируемого URL -адреса в то, что ожидается API в рамках службы.
Configmap
Нам всем нравится извлекать константы из кода приложения в файл свойств. Kubernetes предоставляет аккуратную структуру для обработки таких файлов свойств. Фактически, Kubernetes делает это на несколько шагов вперед — позволяя нам настроить файлы конфигурации.
Файлы свойств представлены в двух наборах. Конфигурационные карты и воспроизведение. Карта конфигурации можно считать шаблоном файлов свойств. Фактические ценности поступают из пьес. Как правило, у нас есть одна конфигурационная карта для каждой службы, с несколькими пьесами — чтобы позаботиться о нескольких средах и версиях. Таким образом, мы можем иметь один и тот же код приложения, относящиеся к различным файлам свойств, которые генерируются во время развертывания.
Секрет
Многие разработчики делают это, но мы никогда не должны хранить пароли в файлах свойств. Они не должны быть доступны для человеческих глаз. Kubernetes предоставляет концепцию секретов для справки. Мы можем сохранить зашифрованную информацию здесь, которая расшифрована только при развертывании, так что она всегда безопасна и безопасна.
Объем
Это важная концепция. В Kubernetes стручки и контейнеры эфемерны. Они могут быть убиты или перезагружены в любое время. Естественно, они должны быть без гражданства. Принципы архитектуры микросервиса рекомендуют, чтобы услуги были как можно дальше. Но есть некоторые услуги, которые нуждаются в состоянии. Например, база данных должна сохранять данные на диск. Эти данные не могут быть забыты на контейнере или сбросе стручков. Kubernetes обеспечивает концепцию объемов для этой настойчивости. В духе Kubernetes это чрезвычайно настраивается и абстрагируется — так что он может терпеть изменения.
Он работает через класс хранения (SC), постоянный объем (PV) и постоянный объемный претензии (PVC). SC, как следует из названия, является специфической для класса хранения. Это может быть EBS AWS или локальный диск или удаленный сервер в помещении. Эта конфигурация определена и ограничена SC — администратором.
Разработчики настраивают развертывание вместе с претензией на этот постоянный том. Этот ПВХ претендует на объем хранения из запрошенного класса хранения. Kubernetes позаботится о распределении этого в форме PV — когда начинается новый стручок.
Пространство имен
Небольшие команды и небольшие приложения могут жить без пространства имен (в пространстве имен по умолчанию). Но в приложении по шкале предприятия у нас есть сотни микросервисов — развернутые в одном и том же кластере Kubernetes. У нас есть несколько команд, работающих параллельно на этих микросервисах.
У Kubernetes слишком много сущностей. И важно гарантировать, что имена этих сущностей не сталкиваются. Мы не можем иметь консенсусную доску, выделяющую имена каждому разработчику по требованию. Это было бы безумно. Гораздо лучше разделить предприятие на более мелкие приложения — с пространством имен для каждого. Это изолирует команды и предотвращает путаницу.
Пространство имен не является мерой безопасности. Но это просто упрощает дисциплину.
Шлем
Хелм не является частью Kubernetes, из коробки. Но это широко используется с Kubernetes. Все понятия, которые мы видели выше, и реальные сущности в кластере Kubernetes. И все в Kubernetes, по сути, файл YAML — не более того. Мы просто создаем файлы YAML с соответствующим синтаксисом и необходимой информацией. Затем Kubernetes ставит жизнь в эти файлы YAML, чтобы сделать целое приложение для масштаба предприятия с экстремальными возможностями.
Как можно себе представить, у нас есть поток файлов YAML. Каждое микросервис там имеет по крайней мере дюжину этих файлов YAML, иногда несколько десятков. Это, естественно, сложная задача для любого администратора. Это расстраивает, когда у нас есть аналогичное развертывание для большинства услуг через предприятие, и у нас есть некоторые услуги, которые имеют аналогичное развертывание по всему миру (например, стек лося)
Helm предоставляет простое решение для этого — в форме диаграмм Helm — которые могут систематически организовать различные файлы YAML в диаграммы Helm.
Мы можем думать о Minikube как о меньшей игрушечной версии Kubernetes — которую мы можем установить на нашей локальной машине. Это полезно для проверки наших развертываний, а также очень полезно для обучения и совершенствования наших навыков.
Давайте начнем с установки Minikube. У меня есть искренняя просьба на данный момент. У меня нет ничего (все) против Microsoft. Windows (не) отличная операционная система. Если вы серьезно относитесь к DevOps, лучше вырасти из этого. Переключитесь на Ubuntu. Или вы можете просто создать небольшой экземпляр EC2 для обучения. (Не забудьте прекратить EC2, как только вы закончите).
Установить
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 65.2M 100 65.2M 0 0 149M 0 --:--:-- --:--:-- --:--:-- 148M $ sudo install minikube-linux-amd64 /usr/local/bin/minikube
Это быстро. Minikube теперь развернут на Ubuntu.
Начинать
Теперь мы идем вперед и начинаем кластер. Это одинаково просто.
$ minikube start * minikube v1.23.0 on Ubuntu 20.04 * Automatically selected the docker driver. Other choices: none, ssh * Starting control plane node minikube in cluster minikube * Pulling base image ... * Downloading Kubernetes v1.22.1 preload ... > preloaded-images-k8s-v12-v1...: 515.04 MiB / 515.04 MiB 100.00% 138.61 M > gcr.io/k8s-minikube/kicbase: 355.82 MiB / 355.82 MiB 100.00% 51.85 MiB p * Creating docker container (CPUs=2, Memory=1949MB) ... * Preparing Kubernetes v1.22.1 on Docker 20.10.8 ... - Generating certificates and keys ... - Booting up control plane ... - Configuring RBAC rules ... * Verifying Kubernetes components... - Using image gcr.io/k8s-minikube/storage-provisioner:v5 * Enabled addons: default-storageclass, storage-provisioner * kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A' * Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
Там! Minikube Cluster встал и готов.
Если он пожимает о доступной памяти, это также предложит способ ограничить использование памяти. Мы можем использовать предложенные параметры в команде начала и повторить еще раз.
Мы также можем изменить выделенную конфигурацию памяти напрямую
$ minikube config set memory 16384 ! These changes will take effect upon a minikube delete and then a minikube start
Kubectl
Мы можем подключиться к этому кластеру с помощью kubectl. Давайте попробуем это, запрашивая любые беговые стручки.
$ minikube kubectl -- get po -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-78fcd69978-wf5wx 1/1 Running 0 3m57s kube-system etcd-minikube 1/1 Running 0 4m8s kube-system kube-apiserver-minikube 1/1 Running 0 4m11s kube-system kube-controller-manager-minikube 1/1 Running 0 4m8s kube-system kube-proxy-l8j4q 1/1 Running 0 3m57s kube-system kube-scheduler-minikube 1/1 Running 0 4m11s kube-system storage-provisioner 1/1 Running 1 (3m25s ago) 4m6s
(Minikube может принести для нас правильную версию Kubectl. Для этого мы используем команду Minikube Kubectl. Это также установит Kubectl — если он еще не установлен. )
Как мы обсуждали в части 2/10, это стручки, соответствующие плоскости контроллера.
При этой установке мы можем сделать большую часть того, что мы можем сделать с реальным кластером Kubernetes. Таким образом, это представляет собой хорошую полезность для развития и практики.
Уборка
Наконец, мы можем очистить материал, прежде чем мы уйдем. Мы можем остановить кластер
$ minikube stop * Stopping node "minikube" ... * Powering off "minikube" via SSH ... * 1 nodes stopped. ubuntu@ip-172-31-1-122:~$
А затем удалите все это.
$ minikube delete --all * Deleting "minikube" in docker ... * Removing /home/ubuntu/.minikube/machines/minikube ... * Removed all traces of the "minikube" cluster. * Successfully deleted all profiles
Любые объекты в кластере Kubernetes — это простой YAML. Мы описываем объект Kubernetes через такие файлы YAML, а затем он предпринимает каждую попытку выполнить эту спецификацию. Будучи супер универсальным инструментом, мы можем ожидать, что он будет иметь очень сложную конфигурацию — и это так.
Но это намного проще, что это могло бы быть. Конфигурация интуитивно разбивается на компоненты, которые намного проще в управлении. Если мы можем понять эту структуру и значение каждого компонента, конфигурация в целом не должна быть вообще затруднена.
Kubernetes документация очень четкий, и это довольно легко найти то, что нам нужно. Таким образом, нет необходимости запоминать какой -либо синтаксис. Вместо этого давайте посмотрим на простое развертывание MySQL, которое может дать нам основную идею о структуре YAML.
Постоянный объем
Развертывания базы данных требуют постоянного тома, который может удерживать данные за пределами жизни POD. Такой постоянный том должен быть настроен с использованием YAML, аналогичного этому. Значение отдельных полей довольно интуитивно понятно.
Эта конфигурация определяет постоянный объем, основанный на локальном классе ручного хранения. Он выделяет большую часть 20 ГБ и выделяет
kind: PersistentVolume apiVersion: v1 metadata: name: mysql-pv-volume labels: type: local spec: storageClassName: manual capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/mnt/data"
Постоянный объемный претензия
Постоянный объем предлагается кластером Kubernetes. Развертывание претендует на одно для себя, используя претензию на постоянный объем. Ниже приведен образец YAML для ПВХ
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
обслуживание
Определение сервиса довольно простое.
apiVersion: v1 kind: Service metadata: name: mysql spec: ports: - port: 3306 selector: app: mysql clusterIP: None
Развертывание
Это обеспечивает шаблон для генерации отдельных стручков, а также конкретные детали конфигурации. Это относится к PV, PVC, а также к секретам для создания стручка из указанных контейнеров.
apiVersion: apps/v1 kind: Deployment metadata: name: mysql spec: selector: matchLabels: app: mysql strategy: type: Recreate template: metadata: labels: app: mysql spec: containers: - image: mysql:5.6 name: mysql env: # Use secret in real usage - name: MYSQL_ROOT_PASSWORD value: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim
Kubernetes Pattern — обширная тема. Слишком обширно, чтобы быть рассмотренным в этом маленьком блоге. Я могу направить замечательную книгу, которая дает очень хорошие детали по этой теме. https://github.com/solegaonkar/kubernetespatterns
Это обеспечивает сложное понимание различных моделей, включая
- Основополагающие закономерности
- Поведенческие закономерности
- Структурные закономерности
- Шаблоны конфигурации
- Продвинутые шаблоны
Мощные инструменты могут быть катастровыми, если не использовать правильно. То же самое происходит с Kubernetes. Просто использование Kubernetes в приложении не делает его идеальной эластичной системой. Мы должны знать, как его использовать. Давайте посмотрим на некоторые анти -шаблоны, которые делают нашу жизнь несчастной.
Последний тег
Некоторые разработчики любят быть на грани. Они несут то же самое в развертывании. Когда мы создаем контейнеры Docker, мы должны предоставить дискретный номер версии в DockerFile. Иначе мы никогда не знаем, когда какое -то обновление однажды может убить наш кластер.
Конфигурация внутри контейнера
Я совершил эту ошибку, так что я это очень хорошо знаю. Разработчики старого класса чувствуют себя довольными, когда они вытаскивают константы в файл constants.java. Это очень хорошая практика. Но недостаточно. Каждая конфигурация должна быть выведена в файл свойств, а затем в конфигурацию. Все, что связано с окружающей средой, должно быть втянуто дальше в пьесу.
Чрезмерное использование функций Kubernetes
Kubernetes хорош для оркестровки контейнеров. Давайте ограничим это там. Избегайте использования его функций или в зависимости от его функций для бизнес -логики. Бизнес -логика должна быть ограничена кодом нашего приложения — в контейнере.
Использование Kubectl Edit/Patch
Это отличные функции, которые можно использовать в лаборатории. Они не должны использоваться в реальном приложении. Любое развертывание должно пройти правильный процесс обновления развертывания. Myml — иначе очень легко потерять контроль над тем, что развертывается, и мы понятия не имеем, что работает, а что нет.
Отсутствует пределы памяти/процессора
Очень важно указать ограничения памяти/процессора в наших развертываниях. Что мы локализуем неудачи. Мы должны хорошо понять требования нашего приложения, и это может помочь нам указать эти ограничения. Если один сервис выходит из пути, она не должна препятствовать остальной части приложения.
Чрезмерное использование Kubernetes
Kubernetes — отличный инструмент для какой -то цели. Это не единое решение для всех проблем на Земле. Некоторые услуги должны жить за пределами Kubernetes, и мы не должны пытаться подтолкнуть их в кластер. Например, базы данных имеют право жить вне кластера.
Можно легко догадаться, что управление кластером Kubernetes является сложной задачей. Это требует огромного количества тщательных шагов, и может свести нас с ума, если мы пропустим что -то в подробном процессе. Лучше всего, чтобы кто -то сделал это для нас.
Кроме того, высокая производительность и устойчивость не могут быть в предпосылке. Так что имеет смысл поднять один из готовых кластеров Kubernetes в облаке. И что может быть лучше, чем AWS — Elastic Kubernetes Service.
Эк
Кластер Amazon ECS — это региональная группировка одного или нескольких экземпляров контейнеров, на которых вы можете запустить запросы на задачи. Каждая учетная запись получает кластер по умолчанию в первый раз, когда вы используете сервис Amazon ECS. Кластеры могут содержать более одного типа экземпляра Amazon EC2.
Чтобы начать, перейдите на страницу EKS на консоли AWS. Затем нажмите «Создать кластер»
Далее мы просто предоставляем основные детали для создания нового кластера.
Обратите внимание, что роль должна быть создана в IAM. Это просто основная роль с необходимой политикой для кластера EKS.
Следуйте по умолчанию на остальных страницах, чтобы создать новый кластер. И вуаля! Кластер готов. Он имеет простой пользовательский интерфейс для добавления узлов и другой конфигурации. Теперь нам не нужно вдаваться в подробности установки и настройки. Все доступно на щелчке кнопки.
Все, что нам нужно сделать сейчас, это настроить отдельные развертывания на EKS. Отдых управляется для нас. Azure, GCP и Digital Ocean имеют очень похожие варианты для управляемого хостинга Kubernetes.
Как мы видели ранее, Kubectl — это простой интерфейс командной строки для кластера Kubernetes. Это просто, но очень мощно.
Команды Kubectl
Kubernetes поставляется с простой интерфейсом командной строки — Kubectl. Это очень мощно, и мы можем сделать почти все с кластером.
Синтаксис Kubectl прост.
kubectl
Действие может быть получено, описать, создавать, удалять, редактировать, применить, Exec .. Целью может быть стручка, развертывание, обслуживание, контейнер, …
Получить
Мы можем использовать Kubectl, чтобы получить список узлов, стручков и т. Д. Это просто получает список и показывает в Stdout.
kubectl get nodes
kubectl get pod
kubectl get services
kubectl get deployment
kubectl get replicaset
Редактировать
Это очень обескуражено. Но если это необходимо, мы можем напрямую отредактировать развертывание YAML на кластере. Но это не рекомендуется. Если мы сделаем это, мы скоро вступим в несоответствие, когда мы не знаем, что развернуто. Лучше всего обновить файл YAML в элементе управления версией, а затем нажать его на кластер.
kubectl edit deployment nginx-depl
Точно так же мы можем напрямую создать новое развертывание в командной строке.
kubectl create deployment nginx-depl --image=nginx
Это правильный способ сделать это.
kubectl apply -f nginx-deployment.yaml
Журналы
Мы можем распечатать журналы работающего капсула.
kubectl logs {pod-name}
Исполнительный
Мы также можем заглянуть в капсул. Просто зайдите в его раковину Linux и посмотрите, как там появляется мир. Это очень полезно для отладки.
kubectl exec -it {pod-name} -- bin/bash
Чит
Коллекция полезных команд Kubectl
Общие команды
Временно запустить тест curl | kubectl Run-pod/v1-rm mytest/busybox-curl -it |
Временно запустить тест wget | kubectl Run -pod/v1 -rm mytest -it wget |
Запустите развертывание Nginx с 2 репликами | Kubectl запускает мой nginx |
Запустите Nginx Pod и выставьте его | kubectl запускает мой nginx-expose |
Запустите развертывание NGINX и разоблачите его | kubectl запускает мой nginx-expose |
Список аутентифицированных контекстов | kubectl config get-contexts =, = ~/.kube/config |
Установить предпочтение пространства имен | kubectl config set-context-namespace = |
Список стручков с информацией о узлах | kubectl Получите Pod -О широко |
Перечислить все | kubectl Получите все-все намеки |
Получите все услуги | kubectl Get Service -все -namespaces |
Получите все развертывания | kubectl Получите развертывание-все намеки |
Показать узлы с этикетками | kubectl Получите узлы-Show-Labels |
Получите ресурсы с выходом JSON | kubectl Get Pods -All -namespaces -o json |
Проверить файл yaml с сухой запуск | kubectl create -dry -run —validate -f Pod-dummy.yaml |
Начните временный капсул для тестирования | kubectl run -rm -i -t test- $ случайный -SH |
Kubectl Run Shell Command | kubectl exec -it mytest -ls -l /etc /hosts |
Получить систему CONF через ConfigMap | kubectl -n Kube -system Get cm kubeadm -config -o yaml |
Получите развертывание YAML | kubectl -n denny -websites получают развертывание mysql -o yaml |
Объясните ресурс | kubectl объяснить, объясните SVC |
Смотреть стручки | kubectl Get Pods -n WordPress -наблюдать |
Query HealthCheck Endpoint | curl -l http://127.0.0.1:10250/healthz |
Откройте терминал Bash в стручке | kubectl Exec -it Storage Sh |
Проверьте переменные среды POD | kubectl exec redis-master-ft9ex env |
Включить автозаполнение Shell Kubectl | Echo «Source <(kubectl opplion bash)» >> ~/.bashrc, и перезагрузка |
Используйте Minikube Dockerd в своем ноутбуке | Eval $ (minikube docker-env), не нужно толкать концентратор Docker больше |
Kubectl применить папку файлов yaml | Kubectl Apply -r -f. |
Получите сервисы отсортированы по имени | kubectl Get Services—Sort-by = .metadata.name |
Получить стручки, отсортированные по количеству перезапуска | kubectl Получите стручки |
Список стручков и изображений | Kubectl Get Pods: .metadata.name, изображения: .spec.containers [*]. Image ‘ |
Проверьте производительность
Получите использование ресурса узла | Kubectl Top Node |
Получите использование ресурсов POD | Kubectl Top Pod |
Получите использование ресурсов для данного стручка | Kubectl Top -Контейнеры |
Перечислите использование ресурсов для всех контейнеров | Kubectl Top Pod-All-namespaces |
Удаление ресурсов
Удалить POD | kubectl delete pod/ -n |
Удалить стручок силой | kubectl delete pod/ -force |
Удалить стручки на этикетках | kubectl delete pod -l |
Удалить развертывания на этикетках | kubectl delete развертывание -l |
Удалить все ресурсы, отфильтрованные этикетками | Kubectl Delete Pods, Services -l |
Удалить ресурсы в пространстве имен | kubectl -n my -ns delete po, svc -все |
Удалить постоянные объемы на этикетках | kubectl delete pvc -l |
Удалить только состояние Fulset (не стручки) | kubectl Delete STS/ |
Force & conf -файлы
Конфигурация папка | /etc/kubernetes/ |
Файлы сертификата | /etc/kubernetes/pki/ |
Учетные данные для сервера API | /etc/kubernetes/kubelet.conf |
Справочные данные суперпользователя | /etc/kubernetes/admin.conf |
Kubectl Config File | ~/.kube/config |
Kubernetes Working Dir | /var/lib/kubelet/ |
Docker Working Dir | /var/lib/docker/,/var/log/containers/ |
ETCD Рабочий реж | /var/lib/etcd/ |
Сеть CNI | /etc/cni/net.d/ |
Лог-файлы | /var/log/pods/ |
Войти в рабочее узел | /var/log/kubelet.log, /var/log/kube-proxy.log |
Войдите в мастер -узел | Kube-Apiserver.log, Kube-Scheduler.Log, Kube-Controller-Manager.log |
Эн | /etc/systemd/system/kubelet.service.d/10-kubeadm.conf |
Эн | Экспорт kubeconfig =/etc/kubernetes/admin.conf |
Капсул
Перечислите все стручки | kubectl Получите стручки |
Список стручков для всех имен пространства | Kubectl Get Pods -All -namespaces |
Перечислите все критические стручки | Kubectl Get -n Kube -System Pods -a |
Список стручков с дополнительной информацией | kubectl Get Pod -O Wide, Kubectl Get стручок/ -o Ямл |
Получить информацию о капсуле | kubectl опишите Pod/srv-mysql-server |
Перечислите все стручки с этикетками | Kubectl Get Pods-Show-Labels |
Список бега капсов | kubectl Получите стручки |
Получить статус POD initContainer | kubectl Get Pod — -template ‘{{.status.initcontainerStatus}}’ |
Cubectl Run Command | kubectl Exec -it -n «$ ns» «$ name» -sh -c «echo $ msg >>/dev/error.log» |
Смотреть стручки | kubectl Get Pods -n WordPress -наблюдать |
Получить POD от селектора | kubectl Get Pods «-o |
Список стручков и изображений | Kubectl Get Pods: .metadata.name, изображения: .spec.containers [*]. Image ‘ |
Список стручков и контейнеров | Kubectl Get Pods: .metadata.name, контейнеры: .spec.containers [*]. Имя ‘ |
Лейбл и аннотация
Фильтрующие стручки по метке | kubectl Get Pods -l |
Вручную добавить этикетку в стручок | кубект этикетки манекен |
Удалить этикетку | kubectl label стручки манекен |
Вручную добавить аннотацию в стручок | kubectl аннотируйте стручки манекен-вход: //dennyzhang.com |
Развертывание и масштаб
Масштабирование | развертывание шкалы kubectl/nginx-app |
онлайн -обновление | kubectl vollout app-v1 app-v2: v2 |
РАЗВИТЬ РАСПОЛОЖЕНИЕ | kubectl vollout app-v1 app-v2-rollback |
Список развертывания | Kubectl получает рупий |
Проверьте статус обновления | Развертывание состояния развертывания Kubectl/nginx-app |
Проверьте историю обновления | Kubectl Dellowout Deployment/nginx-App |
Пауза/резюме | Kubectl Dellout Pause развертывание/nginx-развертка, продолжить |
Откат к предыдущей версии | kubectl unwort undo развертывание/nginx-развертка |
Квота, ограничения и ресурсы
Список квоты ресурса | Kubectl Get ResourceQuota |
Список лимитных диапазонов | Kubectl Получите Limitrange |
Настройте определение ресурсов | kubectl set resources развертывание nginx |
Настройте определение ресурсов | kubectl set resources развертывание nginx |
обслуживание
Перечислите все услуги | Kubectl Get Services |
Список конечных точек службы | Kubectl Получите конечные точки |
Получить детали обслуживания | kubectl Get Service nginx -service -o yaml |
Получить сервисный кластер IP | kubectl Get Service nginx -service -o |
Получить порт кластера обслуживания | kubectl Get Service nginx -service -o |
Развернуть развертывание в качестве услуги LB | Kubectl выставлена развертывание/my-app-service |
Разоблачить обслуживание в качестве услуги LB | kubectl разоблачает обслуживание/wordpress-1-svc |
Секреты
Список секретов | Kubectl Get Secrets-All Namespaces |
Генерировать секрет | echo -n ‘mypasswd’, затем перенаправить на Base64 -Decode |
Получить секрет | Kubectl Get Denny-Cluster-KubeConfig |
Получите определенную область секрета | Kubectl Get Denny-Cluster-KubeConfig -o |
Создать секрет из файла CFG | Kubectl Создайте секретный общий DB-USER-PASS-из-за файла =./username.txt |
Statefulset
Список Statefulset | Kubectl Получите STS |
Удалить только Statefulset (не стручки) | kubectl Delete STS/ |
Масштаб Statefulset | Kubectl Scale STS/ |
Объемы и объемные претензии
Список класса хранения | Kubectl Получите StorageClass |
Проверьте монтируемые объемы | Kubectl Exec Storage LS /Data |
Проверьте постоянный объем | kubectl опишите PV/ PV0001 |
Скопируйте локальный файл в Pod | kubectl cp /tmp / my/:/tmp/server |
Скопируйте файл POD в локальный | kubectl cp/:/tmp/server/tmp/ мой |
События и метрики
Посмотреть все события | Kubectl Get Events-все намеки |
Список событий, отсортированных по временной метке | Kubectl Get Events-sort-by = .metadata.creationtimestamp |
Университет узла
Отметьте узел как непреодолимый | kubectl cordon $ node_name |
Отметьте узел как запланированный | kubectl uncordon $ node_name |
Узел дренажа при подготовке к техническому обслуживанию | kubectl Drain $ node_name |
Пространство имен и безопасность
Список аутентифицированных контекстов | kubectl config get-contexts =, = ~/.kube/config |
Установить предпочтение пространства имен | kubectl config set-context-namespace = |
Переключить контекст | kubectl config use-context |
Загрузить контекст из файла конфигурации | kubectl get cs -kubeconfig kube_config.yml |
Удалить указанный контекст | Kubectl config delete-context |
Список все пространства имен определены | Kubectl Получите пространства имен |
Список сертификатов | Kubectl Получите CSR |
Проверьте привилегию пользователя | Kubectl: ServiceAccount: NS-Denny: Test-Privileged-SA -N NS-Denny Auth Can-I Используйте стручки/список |
Сеть
Временно добавить порт-переход | Kubectl Port-Forward Redis-134 6379: 6379 |
Добавить порт-перемещение для развертывания | Kubectl Port-Forward развертывание/Redis-Master 6379: 6379 |
Добавить порт-переполнение для Replicaset | Kubectl Port-Forward RS/Redis-Master 6379: 6379 |
Добавить порт-переход для обслуживания | Kubectl Port-Forward SVC/Redis-Master 6379: 6379 |
Получить сетевую политику | kubectl Get Сетиполитика |
Пластырь
Управление патча | kubectl patch svc $ svc_name -p ‘{«spec»: {«type»: «loadbalancer»}}’ |
Расширения
Перечисляет доступные типы ресурсов | Kubectl API-Resources |
Список группы API | Kubectl Api-версии |
Перечислите все CRD | kubectl Получите CRD |
Список StorageClass | Kubectl Получите StorageClass |
Компоненты и услуги
Услуги на главных узлах
Kube-Apiserver | API Gateway. Разоблачает API Kubernetes из главных узлов |
и т.д. | Надежное сохранение данных для всех данных кластера K8S |
Kube-Scheduler | Запланируйте стручки для работы на выбранных узлах |
Kube-Controller-Manager | Примирите штаты. Узел/репликация/конечные точки/контроллер токена и учетная запись службы, так далее |
Услуги на рабочих узлах
Кубелет | Агент узла следит за тем, чтобы контейнеры работали в стручке |
Kube-Proxy | Управлять сетевым подключением к контейнерам. например, iptable, IPVS |
Время выполнения контейнера | Kubernetes поддержал время Runttimes: Dockerd, Cri-O, RUNC и любая реализация OCI Runtime Spec. |
Аддоны: стручки и услуги, которые внедряют функции кластера
DNS | обслуживает DNS Records для служб Kubernetes |
Веб -интерфейс | Интернет, веб-пользовательский интерфейс для кластеров Kubernetes |
Контейнерный мониторинг ресурсов | собирать, хранить и подавать метрики контейнеров |
Журнализация кластера | Сохранить журналы контейнеров в центральный хранилище журнала с интерфейсом поиска/просмотра |
Инструменты
Kubectl | Командная строка UTIL, чтобы поговорить с кластером K8S |
кубидм | команда для начальной загрузки кластера |
Кубеф | командная строка для управления федерацией кластеров Kubernetes |
Больше ресурсов
Когда -то было время, когда Kubernetes означал тяжелые вычислительные и большие накладные расходы на серверах Super Power. За прошедшие годы он истощил себя до такой степени, что у нас также есть Kubernetes, а также в устройствах IoT! Попробуем установить его на нашу малиновую пи
Для этого нам нужен настольный компьютер Ubuntu — Windows недостаточно. Поклонники Microsoft, которые не могут бросить использование Windows, могут установить Ubuntu в виртуальные машины. Нам понадобится не менее 2 малиновых писей (чтобы сделать кластер). Я использовал три в этом примере. И, конечно, нам нужен кабель Micro USB, чтобы подключить каждый PI. А также одна карта MicroSD на PI не менее 8 ГБ — прошивая с изображением сервера Ubuntu
Установка Microk8s
Фактический процесс установки не сложно. Мы просто внедряем устройства индивидуально и выполняем эти шаги:
sudo vi /boot/firmware/cmdline.txt
Это имеет сложную командную строку. Мы просто добавляем в это еще несколько вариантов cgroup_enable = память
Полная линия на моем PI выглядит так. Он будет варьироваться в зависимости от версий:
cgroup_enable=memory cgroup_memory=1 net.ifnames=0 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Далее мы перезагружаем устройство
sudo reboot
Как только он вернется, мы снова включим в него и устанавливаем Microk8s, используя простую команду
sudo snap install microk8s --classic
Это также устанавливает утилиту командной строки — также называется Microk8s. Несколько простых команд, чтобы дать вкус:
# Start the cluster microk8s.start # Inspect status of services microk8s.inspect # Stop all Kubernetes services microk8s.stop # Enable addons - eg kubedns addon microk8s.enable dns # Get status of the cluster microk8s.kubectl cluster-info
Мастер/работник
Как только у нас установлен Microk8s на каждом из них, мы можем подключить их к кластеру. Мы должны выбрать одного из них в качестве мастера и запустить ниже команду:
sudo microk8s.add-node
Это объявляет текущий мастер, и он предоставит строку подключения, чтобы пригласить другие рабочие узлы. Строка подключения выглядит следующим образом:
Далее мы перейдем к каждому (подражательскому) детскому узлу и запускаем эту команду на оболочке
microk8s.join: /
Это должно соединить мастера и работников вместе. Через несколько секунд мы можем еще раз проверить мастер -узел, чтобы увидеть кластер
microk8s.kubectl get node
Полезность
Можно задаться вопросом, в чем дело в этом? Зачем нам нужны Kubernetes, работающие на устройствах IoT? Но это имеет большой смысл. Намного больше, чем настоящие серверы. Устройства IoT действительно хрупкие, и мы можем быть уверены, что что -то где -то сломается. Если у нас есть критическое приложение для миссии на поле, полезно иметь несколько устройств, покрывающих друг друга — чтобы убедиться, что приложение продолжает работать.
Мы рассмотрели большинство основных понятий. Время освежить некоторые вопросы интервью, чтобы вы были готовы к этой работе!
Что такое kubernetes
Самый простой из всех. Кто -то, кто прочитал этот блог до сих пор, конечно, знает это. Но, давайте отметим что-то, что можно легко запомнить: «Kubernetes-это инструмент управления контейнерами с открытым исходным кодом, который выполняет обязанности развертывания контейнеров, масштабирования и снижения контейнеров и балансировки нагрузки. Будучи детищем Google, он предлагает отличное сообщество и великолепно работает со всеми облачными поставщиками. Таким образом, мы можем сказать, что Kubernetes не является платформой контейнеризации, но это решение для управления мультизантером ».
Что такое оркестровка контейнеров
Мы сказали, что Kubernetes заботится о оркестровании контейнеров. Но что именно это в контейнерном оркестровании?
«Рассмотрим сценарий, в котором у вас есть 5-6 микросервисов для приложения. Теперь эти микросервисы помещаются в отдельные контейнеры, но не смогут общаться без оркестровки контейнеров. Таким образом, поскольку оркестровка означает объединение всех инструментов, играющих вместе в гармонии в музыке, аналогично контейнерное оркестровая означает все услуги в отдельных контейнерах, работающих вместе для удовлетворения потребностей одного сервера ».
Что такое Хипстер?
Теперь некоторые серьезные .. Heapster является агрегатором данных, предоставленных Kubelet, работающим на каждом узле. Этот инструмент управления контейнерами поддерживается назначен на кластере Kubernetes и работает как стручок, как и любой другой стручок в кластере. Таким образом, он в основном обнаруживает все узлы в кластере и запрашивает информацию об использовании у узлов Kubernetes в кластере через агент на Machine Kubernetes.
Каковы компоненты архитектуры Kubernetes?
Архитектура Kubernetes имеет в основном 2 компонента — Master Node и Worker Node. Как вы можете видеть на приведенной ниже диаграмме, у мастера и рабочих узлов есть много встроенных компонентов в них. Мастер-узел имеет Kube-Controller-Manager, Kube-Apiserver, Kube-Scheduler и т. Д. В то время как у узла рабочего на каждом узле Kubelet и Kube-Proxy.
Что такое Kube-Proxy
Kube-Proxy может работать на каждом узле и может выполнять простой переадресацию пакетов TCP/UDP через бэкэнд-сервис. Таким образом, в основном это сетевой прокси, который отражает службы, настроенные в API Kubernetes на каждом узле. Таким образом, переменные совместимой среды, связанные с Docker, предоставляют кластерные IPS и порты, которые открываются Proxy.
Что такое сервер Kube API?
Kube-Apiserver следует за масштабной архитектурой и является передней частью панели управления главным узлом. Это раскрывает все API -интерфейсы компонентов Master Node Kubernetes и отвечает за установление связи между Node Kubernetes и главными компонентами Kubernetes.
Что такое планировщик Kube?
Kube-Scheduler отвечает за распространение и управление рабочей нагрузкой на рабочих узлах. Таким образом, он выбирает наиболее подходящий узел для запуска незапланированного POD на основе требований к ресурсам и следит за использованием ресурсов. Это гарантирует, что рабочая нагрузка не запланирована на узлах, которые уже заполнены.
Что такое Kubernetes Controller Manager?
Многочисленные процессы контроллера, работающие на главном узле, но собираются вместе для запуска как единый процесс, который является диспетчера контроллеров Kubernetes. Таким образом, диспетчер контроллеров — это демон, который встраивает контроллеры и делает создание пространства имен и сбор мусора. Он владеет ответственностью и общается с сервером API для управления конечными точками.
Каковы различные типы управляющих контроллерами?
Различные типы диспетчера контроллеров, работающих на главном узле:
- Контроллер узлов: Управляет статусом узла (создание, обновление, удаление)
- Контроллер репликации: поддерживает количество стручков для каждого объекта репликации
- Контроллер токена: создает учетные записи по умолчанию и токены API Access для новых пространств имен
- Контроллер конечных точек: позаботьтесь о объектах конечных точек, таких как стручки и услуги
- Контроллер маршрута: он управляет маршрутами движения в базовой облачной инфраструктуре
- Контроллер громкости: Управляет объемом хранения и взаимодействует с облачным провайдером, чтобы организовать объем
Что такое и т. Д.?
ETCD написан на языке программирования GO и является распределенным хранилищем ключей, используемым для координации распределенной работы. Итак, ETCD сохраняет данные конфигурации кластера Kubernetes, представляя состояние кластера в любой заданный момент времени.
Каковы различные типы услуг в Kubernetes?
- Cluster IP: обнажает службу на кластерном внутреннем IP. Это делает услугу доступной изнутри кластера. Это тип службы по умолчанию
- Узел Узел: Это раскрывает службу на IP -адресе каждого узла в статическом порте. Сервис IP -адреса кластера, к которой будет создана сервис порта узлов, автоматически создается
- Балансировщик нагрузки: Он открывает службу извне, используя облако, предоставленное балансировщиком нагрузки. Сервис, на который будет автоматически создан внешняя балансировщики нагрузки, автоматически создается
- Внешнее имя: это отображает службу с содержимым поля внешнего имени, возвращая запись CNAME с его значением.
Kubernetes Load Balancers
Балансировщик нагрузки является одним из наиболее распространенных и стандартных способов разоблачения обслуживания. Существует два типа балансировщика нагрузки, используемых на основе рабочей среды, то есть либо балансировщика внутренней нагрузки, либо балансировщика внешней нагрузки. Внутренний балансировщик нагрузки автоматически уравновешивает нагрузку и выделяет стручки с необходимой конфигурацией, тогда как балансировщик внешней нагрузки направляет трафик от внешней нагрузки на бэкэнд -стручки.
Что такое сеть Ingress?
Intress Network — это набор правил, которые действуют как точка входа в кластер Kubernetes. Это позволяет входящие подключения, которые можно настроить, чтобы предоставлять услуги извне через достижимые URL-адреса, загружать трафик баланса или предлагая виртуальное хостинг на основе имени. Таким образом, Ingress — это объект API, который управляет внешним доступом к Сервисам в кластере, обычно от HTTP и является наиболее мощным способом выявления услуг.
ConfigMap VS Secrets
Конфигурации в идеале хранит конфигурацию приложения в простом текстовом формате, тогда как секреты хранят конфиденциальные данные, такие как пароль в зашифрованном формате. Как конфигурационные карты, так и секреты могут использоваться в качестве объема и установлены внутри стручка через файл определения стручков.
Multi Container Pods
- SIDECAR: спецификация POD, которая запускает основной контейнер и вспомогательный контейнер, который выполняет некоторую рабочую работу, но это не обязательно необходимо для работы основного контейнера.
- Адаптер: Контейнер адаптера будет осматривать содержимое файла приложения, делает какую -то реструктуризацию и переформатировать его и записать правильно отформатированный вывод в местоположение.
- Посол: он соединяет контейнеры с внешним миром. Это прокси, который позволяет другим контейнерам подключаться к порту на Localhost.
API Security в Kubernetes
Используйте правильный режим AUTH с API-сервером, RBAC Убедитесь, что весь трафик защищен с помощью TLS Использовать аутентификацию API (меньший кластер может использовать сертификаты, но более крупные мульти-претенденты могут захотеть AD или некоторую аутентификацию AIDC).
Заставьте Kubeless защитить свой API через. Убедитесь, что Kube-Dashboard использует ограничительный монитор политики RBAC Role Monitor RBAC. Удалите по умолчанию Filter Egress Egress в облачный API метаданные APIS-фильтр весь трафик, поступающий в пространство имен Kube-System, кроме DNS.
Политика по умолчанию отказавшейся на все входящие на все пространства имен — это хорошая практика. Вы явно разрешаете развертывание. Используйте политику безопасности POD, чтобы иметь ограничения контейнеров и защитить узлы Keep Kube на последней версии.
Рабочие узлы:
Kubernetes Worker Node — это машина, на которой развертываются рабочие нагрузки. Рабочие нагрузки находятся в форме контейнерных приложений, и из -за этого каждый узел в кластере должен запускать время выполнения контейнера, такое как Docker, чтобы запустить эти рабочие нагрузки. У вас может быть несколько мастеров, нанесенных на карту с несколькими рабочими узлами или одним мастером, имеющим один узел работника. Кроме того, рабочие узлы не сплетничают или делают выборы лидеров или что-либо, что приведет к нечетной квалификации. Роль времени выполнения контейнера состоит в том, чтобы запустить и управлять контейнерами. Kubelet отвечает за запуск состояния каждого узла, и он получает команды и работает от мастера. Это также проверяет здоровье узлов и убедится, что они здоровы. Кубелет также отвечает и за метрические коллекции стручков. Kube-Proxy-это компонент, который управляет подсетью хоста и предоставляет услуги доступными для других компонентов.
Перезагрузить карту конфигурации без перезапуска капсула
Нам нужен способ запустить перезагрузку. Ether выполняйте проверку каждую минуту или имейте конечную точку перезагрузки для API или проекта ConfigMap в качестве тома, может использовать INOTIFO, чтобы знать об изменении. Зависит от того, как ConfigMap потребляется контейнером. Если env vars, то нет. Если монтирование тома, то файл обновляется в контейнере, готовом к употреблению службой, но он должен перезагрузить файл
Контейнер не перезапускается. Если ConfigMap монтируется как том, он обновляется динамически. Если это переменная среды, она остается как старое значение, пока контейнер не будет перезагружен. Мошенничество с томом ConfigMap в POD, прогнозируемый файл периодически обновляется. Не в реальном времени. Затем пусть приложение распознает, изменилось ли диск на конфигурации и перезагрузить
Оригинал: «https://dev.to/solegaonkar/understanding-kubernetes-developer-s-guide-3np»