k8s от входа до отказа (1): введение и начало работы

Kubernetes

место для рекламы

Хотите вместе создать новую бессерверную систему исследований и разработок? Добро пожаловать в команду беспроводных серверов Alibaba CBU, мы ищем старших инженеров / технических экспертов по исследованиям и разработкам, отправьте свое резюме на yuanyan.lmh@alibaba-inc.com

Предисловие: Эволюция сервисных сеток

Я до сих пор помню лето 2017 года, когда я впервые столкнулся с докером и был сразу же потрясен новой концепцией контейнеризации и различными преимуществами, которые она давала.

Влияние контейнеризации на отрасль огромно. Менее чем за год контейнерное развертывание, эксплуатация и обслуживание полностью заменили традиционное машинное развертывание и стали массовым явлением. В то же время докер также привнес форму разработки серверной части. Существует так много возможностей, что архитектура «микросервисов» быстро возникла и созрела.

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

В тот год k8s еще не был «популярен», когда дело доходит до управления контейнерами, первой реакцией людей по-прежнему остаются знаменитые «Три мушкетера» официальной команды докеров:

docker-machine обеспечивает базовую кроссплатформенную виртуализацию

Docker-compose решает задачу автоматического развертывания сложных сервисов

Docker-swarm реализует управление большими кластерами

Все выглядит замечательно, пока выведенный гуглом k8s не будет убит на полпути, и он господствует над реками и озерами со своими мощными функциями и плоским и удобным управлением.В 2018 году мы вряд ли увидим тройку мушкетеров, k8s и lstio и В результате «сервисная сетка» становится новой инфраструктурой в облачную эпоху, и все больше и больше крупномасштабных систем создаются и развертываются в облаке.

Как инженер, вы должны осознанно понимать, на какой почве произрастает ваш сервис, именно поэтому в этот раз стоит изучить k8s.

Общий обзор

Что такое к8с?

Кубернетес — этоконтейнерный кластерОткрытый исходный код для автоматизированного развертывания, расширения и эксплуатации и обслуживанияПлатформа.

Цель рождения k8s

Первоначальная цель k8s — создать экосистему компонентов и инструментов, которые помогут вам снизить нагрузку на запуск приложений в общедоступных и частных облаках, другими словами, упростить создание, эксплуатацию и обслуживание крупномасштабных распределенных приложений (из конечно, чем проще поверхность, тем больше замысловатых деталей интерьера).

Общая схема архитектуры

20190219195012.png

Ниже приводится пошаговое введение в каждый компонент.

Список компонентов

Справочная статья

Узел: аппаратный узел

Узел самый маленький среди k8sвычислительная аппаратная единица, что похоже на концепцию одной машины в традиционном кластере.Это абстракция аппаратных физических ресурсов.Это может быть физическая машина в реальном машинном зале, или ECS на облачной платформе, или даже терминал для граничные вычисления.

В любом случае, с абстракцией Node, мы можем просто рассматривать любую машину как комбинацию ресурсов ЦП и ОЗУ, чтобы добиться эффекта разделения.

Кластер: кластер

Для больших систем мы склонны сосредотачиваться не на одной машине, а на более гранулированном кластере.

В k8s кластер, как правило, рассматривается как единое целое, и состояние внутренних узлов не затрагивается.Настройка внутреннего состояния кластера будет автоматически завершена k8s.

Постоянные тома: постоянные тома

Учитывая, что узлы внутри кластера всегда запланированы и изменены, файловые системы внутри всех узловизменчивый, не может гарантировать постоянство.Чтобы решить эту проблему, k8s вводит понятие постоянного тома, который используется для сопоставления фактического физического узла хранения (облачный диск или физический диск), который может быть подключен к любому кластеру в любое время.

Контейнер: контейнер

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

Pod

Это примечательная особенность, которая отличает k8s от других платформ оркестрации контейнеров: она не запускает контейнеры напрямую, а запускает расширенную структуру под названием Pod, которая инкапсулирует ряд связанных контейнеров и использует одно и то же пространство имен и сеть.

Pod также является базовой единицей k8s для оркестровки и масштабирования сервисов, что означает, что все контейнеры в Pod будут масштабироваться вместе (независимо от того, необходимо это или нет), поэтому при настройке Pod должен быть как можно меньше.

Другая концепция, связанная с подами, — это наборы реплик, которые относятся к репликации подов, сгенерированных во время расширения.

Мы можем использовать следующую диаграмму, чтобы представить взаимосвязь вышеупомянутых логических понятий:

Развертывание: развернуть

Развертывание — это уровень абстракции для управления модулями, и его расположение аналогично docker-compose.

Отличительной особенностью k8s является то, что он проектирует уровень развертывания как «независимый от процесса».

Вход: Вход

После того, как мы построим всю систему и ее тонкую внутреннюю структуру, нам все еще нужен канал, чтобы она могла действительно общаться с внешним миром, которым является Ingress.

HelloWorld

Ссылка 1| Ссылка 2| Ссылка 3

Самый быстрый способ понять технологию — использовать ее для написания Hello World.Поскольку настоящий k8s необходимо развернуть в крупномасштабном кластере, обычный ПК для разработки, очевидно, не может удовлетворить это требование, поэтому используйте официальный инструмент локальной экспериментальной среды. миникуб попробовать

(Следующие времена все работают в среде OS X 10.11)

Подготовить

Сначала нужно установитьminikube + kubectl, потому что для миникуба в качестве базовой поддержки требуется докер, поэтому вам также необходимо установить его заранее.docker, установка докера не будет вдаваться в подробности, вот как установить два других важных компонента в домашних условиях:

  1. kubectlустановка:

        wget https://storage.googleapis.com/kubernetes- 
        release/release/v1.5.1/bin/darwin/amd64/kubectl
        chmod +x kubectl
        mv kubectl /usr/local/bin/kubectl
    
  2. minikubeустановка:

    Сначала нужно установитьVirtualBoxВ качестве базового драйвера установите его из командной строки. Здесь используется источник Alibaba Cloud в Китае, так что это будет намного быстрее, чем brew.

    curl -Lo minikube http://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/releases/v0.30.0/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
    

После завершения установки вы можете запустить среду k8s и запустить командную строкуminikube start, вы можете видеть, что он автоматически обновит и загрузит некоторые компоненты (этот процесс может занять несколько минут)

запустить после запускаminikube sshВойдите в виртуальную машину minikube и выполнитеdocker psПроверьте, успешно ли запущены все контейнеры компонентов

Если нет проблем с выходом из системы, выполните извнеminikube dashboardЗапустить консоль можно в браузере, здесь собрана экспериментальная среда k8s.

Развернуть приложение

После запуска среды k8s можно приступать к развертыванию приложений и сервисов. Прежде всего, нам нужен доступный образ приложения, вот простой образ службы Http Hello World, который я упаковал в качестве примера (адрес изображения:registry.cn-qingdao.aliyuncs.com/gold-faas/gold-rest-demo:1.0)

Следующим шагом является созданиеDeployment, который будет отвечать за создание и обновление экземпляров нашего приложения, а также за постоянный мониторинг состояния приложения.

использоватьkubectlдля создания развертывания:

kubectl run helloworld --image=registry.cn-qingdao.aliyuncs.com/gold-faas/gold-rest-demo:1.0 --port=8080

После выполнения мастер-нода выберет подходящую ноду для развертывания приложения (в среде minikube только одна нода), которую можно будет использовать после созданияkubectl get deploymentчтобы проверить приложение:

На этом этапе вы также можете увидеть соответствующее развертывание в консоли:

Посетите приложение

После того, как приложение будет развернуто, доступ к нему пока возможен только внутри. Мы можем войти внутрь модуля, чтобы выполнить тест:

Вы можете видеть, что служба работает нормально. Если вы хотите получить к ней доступ с внешнего терминала, вы можете просто использоватьkubectl proxyДля создания прокси с текущего терминала на кластер k8s, а затем для доступа к нашему поду (можно использоватьkubectl get podчтобы увидеть название пода)

После запуска прокси-сервера доступ к сервису, предоставляемому внутренним модулем, можно получить через прокси-сервер через restful API в новом терминале.Шаблон URL-адреса restful выглядит следующим образом:

/api/v1/namespace/{namespace}/pods/{name}/proxy/{path:*} 

Эффект:

(Это часть API-интерфейса resftul, предоставленного k8s, и это важное средство управления k8s через код и сетевые средства, которые будут подробно обсуждаться позже)

Создать сервис

Описанный выше способ использования прокси для доступа к внутренним контейнерам больше подходит для использования в сценариях отладки и др. Когда нам нужно предоставлять реальные сервисы, доступные внешнему миру, нужны более надежные средства, т.е.Service, которую временно можно понимать как запись внешней службы, которая объединяет такие функции, как балансировка нагрузки и обнаружение служб (подробнее позже).

Как показано на рисунке, служба может отображать несколько модулей. Чтобы логически объединить несколько модулей, k8s представилаLabelПроще говоря, каждый Pod может иметь Label (метку), и Pods с одинаковым Label становятся логической группировкой. Служба связывает несколько модулей с помощью селектора меток, как показано на следующем рисунке:

Теперь давайте создадим Сервис и представим его внешнему миру, обычно с помощьюLoadBalancerиNodePortДва метода, но minikube поддерживает только последний, используйтеkubectl exposeКоманда для создания службы:

использоватьkubectl get serviceМы видим сервисы, которые были созданы, гдеkubernetesОн уже создан k8s по умолчанию. Видно, что только что созданный сервис предоставляет порт 8080 соответствующего пода внешнему порту 32344, а затем через этот порт можно получить доступ к сервису hello world:

IP-адрес здесь — это IP-адрес docker-daemon minikube, доступ к которому можно получить черезminikube docker-envвидеть:

Мы можем просмотреть детали службы и модуля, чтобы убедиться, что метка была создана так, как мы ожидали:

этикеткаkey=valueсоздается в виде, если вы хотите настроить некоторые метки, используйтеkubectl labelКоманда может быть:

Когда есть много модулей и сервисов, его можно использовать как средство фильтрации.Вы можете использовать параметр -l для фильтрации, точно так же, как инструкция where в sql:

Наконец, если вы хотите удалить службу, просто запуститеkubectl delete service [服务名]То есть, конечно, после удаления сервиса pod все еще существует и будет продолжать работать, но внешний вход пропал.

резюме

К этому моменту были представлены основные концепции k8s, я также научился развертывать приложения и сервисы на k8s и получил общий процесс работы. Однако то, что мы видим в настоящее время, является лишь частью основных возможностей k8s.Более подробная практика и принцип работы будут представлены в следующих статьях.

Оригинальный адрес:отметить route.cai/blog/104,Пожалуйста, укажите источник