Развертывание в Kubernetes

Пререквизиты

  • Скачайте и установите Docker Desktop, как описано в Get Docker.

  • Отработайте процесс контейнеризации приложения в Part 2.

  • Убедитесь, что Kubernetes включен на вашем Docker Desktop:

  • Mac: Нажмите на значок Docker в строке меню, перейдите к Preferences и убедитесь, что рядом с „Kubernetes“ горит зеленый свет.

  • Windows: Нажмите на значок Docker в системном трее, перейдите в Настройки и убедитесь, что рядом с «Kubernetes» горит зеленый свет.

Если Kubernetes не запущен, следуйте инструкциям в Orchestration этого руководства, чтобы завершить его настройку.

Введение

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

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

Описание приложений с помощью Kubernetes YAML

Все контейнеры в Kubernetes планируются как подсы, которые представляют собой группы совместно расположенных контейнеров, разделяющих некоторые ресурсы. Более того, в реалистичном приложении мы почти никогда не создаем отдельные pods; вместо этого большинство наших рабочих нагрузок планируется как deployments, которые представляют собой масштабируемые группы pods, поддерживаемые Kubernetes автоматически. Наконец, все объекты Kubernetes могут и должны быть описаны в манифестах, называемых файлами Kubernetes YAML. Эти файлы YAML описывают все компоненты и конфигурации вашего приложения Kubernetes и могут быть использованы для легкого создания и уничтожения вашего приложения в любой среде Kubernetes.

  1. Вы уже написали очень базовый YAML-файл Kubernetes в части обзора оркестровки этого руководства. Теперь давайте напишем немного более сложный YAML файл для запуска и управления нашим приложением Todo, образ контейнера getting-started, созданный в Part 2 из Краткого руководства. Поместите следующее в файл с именем bb.yaml:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: bb-demo
      namespace: default
    spec:
      replicas: 1
      selector:
        matchLabels:
          bb: web
      template:
        metadata:
          labels:
            bb: web
        spec:
          containers:
          - name: bb-site
            image: getting-started
            imagePullPolicy: Never
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: bb-entrypoint
      namespace: default
    spec:
      type: NodePort
      selector:
        bb: web
      ports:
      - port: 3000
        targetPort: 3000
        nodePort: 30001
    

    В этом YAML-файле Kubernetes у нас есть два объекта, разделенные символом ---:

    • развертывание, описывающее масштабируемую группу идентичных стручков. В этом случае вы получите только одну реплику, или копию вашего pod, и в этом pod (который описан под ключом template:) будет только один контейнер, основанный на вашем образе getting-started из предыдущего шага этого руководства.

    • Служба NodePort, которая будет направлять трафик с порта 30001 на вашем хосте на порт 3000 внутри подсетей, к которым она направляется, позволяя вам получить доступ к вашему приложению Todo из сети.

    Также обратите внимание, что хотя YAML Kubernetes поначалу может показаться длинным и сложным, он почти всегда следует одной и той же схеме:

    • apiVersion, которая указывает на API Kubernetes, анализирующий этот объект.

    • род, указывающий на то, какого рода объектом он является

    • Некоторые метаданные, применяющие такие вещи, как имена к вашим объектам

    • Спецификация spec, указывающая все параметры и конфигурации вашего объекта.

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

  1. В терминале перейдите к месту, где вы создали bb.yaml, и разверните ваше приложение в Kubernetes:

    $ kubectl apply -f bb.yaml
    

    вы должны увидеть результаты, похожие на следующие, указывающие на то, что ваши объекты Kubernetes были созданы успешно:

    deployment.apps/bb-demo created
    service/bb-entrypoint created
    
  2. Убедитесь, что все работает, составив список развертываний:

    $ kubectl get deployments
    

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

    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    bb-demo   1/1     1            1           40s
    

    Это указывает на то, что все стручки, которые вы запросили в YAML, работают. Выполните ту же проверку для ваших служб:

    $ kubectl get services
    
    NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    bb-entrypoint   NodePort    10.106.145.116   <none>        3000:30001/TCP   53s
    kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP          138d
    

    В дополнение к службе по умолчанию kubernetes, мы видим нашу службу bb-entrypoint, принимающую трафик на порт 30001/TCP.

  3. Откройте браузер и посетите ваше приложение Todo по адресу localhost:30001; вы должны увидеть ваше приложение Todo, такое же, как и когда мы запускали его как отдельный контейнер в Part 2 учебника Quickstart.

  4. Как только вы будете удовлетворены, удалите свое заявление:

    $ kubectl delete -f bb.yaml
    

Заключение

На данном этапе мы успешно использовали Docker Desktop для развертывания нашего приложения в полнофункциональной среде Kubernetes на нашей машине разработки. Мы еще мало что сделали с Kubernetes, но теперь дверь открыта; вы можете начать добавлять другие компоненты к своему приложению и использовать все возможности и силу Kubernetes прямо на своей машине.

Помимо развертывания в Kubernetes, мы также описали наше приложение в виде YAML-файла Kubernetes. Этот простой текстовый файл содержит все необходимое для создания нашего приложения в работающем состоянии. Мы можем проверить его в системе контроля версий и поделиться им с коллегами, что позволит нам легко распространять наши приложения на других кластерах (например, на кластерах тестирования и производства, которые, вероятно, появятся после наших сред разработки).

Рекомендации по Kubernetes

Дополнительную документацию по всем новым объектам Kubernetes, использованным в этой статье, можно найти здесь: