Использование Docker CE (Community Edition) с Kubernetes

https://www.melvinvivas.com/kubernetes-powered-docker-ce/
  • Перевод
  • Tutorial
Прим. перев.: Автор статьи — Melvin Dave Vivas, возглавляющий команду разработчиков и SRE-инженеров в сингапурском банке, — делится своим опытом знакомства с поддержкой Kubernetes в платформе Docker.

Когда в октябре прошлого года на DockerCon 2017 технический директор Docker Inc Соломон Хайкс (Solomon Hykes) анонсировал родную поддержку Kubernetes, мне стало очень любопытно, как это будет работать.



Поэтому после анонса я решил проверить наличие этой поддержки в Edge-версии, о чём писал Michael Frills в блоге Docker. Но на тот момент её не оказалось. И вот, после нескольких месяцев ожиданий, она наконец-то появилась.

Экспериментальная поддержка Kubernetes в Docker CE (Community Edition) была представлена в январском обновлении. В Release Notes сообщается, что она появилась с версии 17.12.0-ce. Сам я использую Edge, поэтому не уверен, что обновление доступно и в mainstream-версии.



В общем, увидев такое уведомление, я установил обновление. После инсталляции, однако, ещё требуется включить поддержку Kubernetes в настройках (Preferences):



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



«Из коробки» не заработало, но всё дело оказалось в моей специфичной конфигурации. Как сообщается в документации Docker, если вы раньше использовали Minikube, необходимо переключить контекст. Для этого выполните команду:

$ kubectl config use-context docker-for-desktop



После этого всё работает — ошибки про таймаут пропали:



Время перейти к интересной части. Как нам обещали, команды docker должны работать и с Kubernetes в Docker. Создадим новый deployment на базе Compose-файла для docker stack. Я использовал demo-docker-kube-stack.yml, который можно забрать из этого репозитория:

version: "3.3"
services:

  ms1:
    image: melvindave/spring-boot-example
    ports: 
      - "8080:8080"
    networks:
      - backend
    deploy:
      replicas: 3

  nginx:
    image: nginx
    ports:
      - "80:80"
    networks:
      - frontend      
    deploy:
      replicas: 1 

networks:
  backend:   

Деплой Stack'а в кластере Kubernetes:

$ docker stack deploy --namespace docker-kube-demo --compose-file demo-docker-kube-stack.yml demo-docker-kube-stack



Подождите несколько секунд, и вы увидите, что сервисы запустились. Сервисы в Kubernetes похожи на Services в Swarm, а поды — как контейнеры.



Больше информации о каждом сервисе можно получить с помощью такой команды:

$ kubectl describe services <service-name>



Проверить контейнеры можно и с помощью docker ps. Вывод должен быть эквивалентен kubectl get pods:



Для возможности получения доступа к сервису с хоста, которым в моём случае являлся компьютер с Mac, необходимо открыть сервис с использованием типа NodePort:

$ kubectl expose deployment ms1 --type=NodePort --name=ms1-service
$ kubectl expose deployment nginx --type=NodePort --name=nginx-service



После выполнения этих команд оба сервиса становятся доступными из браузера:



Отлично! Наш Stack запущен в кластере Kubernetes.

Одновременный запуск другого Stack'а в Swarm


Включив Kubernetes в Docker CE, эта система станет оркестратором по умолчанию вместо Swarm. Если же вы хотите использовать Swarm одновременно с Kubernetes, необходимо выставлять переменной окружения DOCKER_ORCHESTRATOR значение swarm.

Задеплоим тот же Stack в Swarm:

$ DOCKER_ORCHESTRATOR=swarm docker stack deploy --compose-file demo-docker-kube-stack.yml demo-docker-swarm-stack



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



Обратите внимание, что если вы хотите проверить Services/Stacks в Swarm, всегда (перед каждой командой) требуется определять значение переменной окружения DOCKER_ORCHESTRATOR. Если не менять её, то в роли оркестратора будет выступать Kubernetes:



При этом docker ps выведет список всех контейнеров, будь они в Kubernetes или в Swarm:



Kubernetes Dashboard


Раз у нас работает Kubernetes, давайте установим его dashboard. Для этого достаточно выполнить две команды:

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
$ kubectl proxy



После этого он станет доступен в браузере по адресу http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/overview?namespace=default.

Общий вид:



Просмотр View Deployments, Pods, ReplicaSets, Services:



Просмотр логов пода:



P.S. от переводчика


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

  • +21
  • 5,9k
  • 5
Флант 327,49
Специалисты по DevOps и высоким нагрузкам в вебе
Поделиться публикацией
Похожие публикации
Комментарии 5
  • 0
    Спасибо за перевод.

    Возможно вы знаете, когда планируют и планируют ли подвезти такую штуку для linux систем?)
    • 0
      В комментариях к оригинальному анонсу поддержки K8s в Docker CE для Mac/Win несколько раз спрашивали про Linux, но ответа до сих пор нет. Наверняка это где-то всё же должно было обсуждаться (с обратной связью от представителей Docker Inc), но я не встречал. В блоге Docker опять-таки анонсировали только для Mac.
    • 0
      не уверен, что обновление доступно и в mainstream-версии

      недоступно (по крайней мере у меня нет это вкладки в настройках, хотя у меня Version 17.12.0-ce-mac47 (21805))

      • 0
        Да, пока только в Edge. Вот из официального анонса: «we are proud to announce that Docker for Mac with beta Kubernetes support is now publicly available as part of the Edge release channel».
      • 0
        На следующий же после перевода день попался более подробный tutorial по теме (тоже на английском). Много картинок, больше команд и действий после установки: rominirani.com/tutorial-getting-started-with-kubernetes-with-docker-on-mac-7f58467203fd

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое