Pull to refresh
Флант
DevOps-as-a-Service, Kubernetes, обслуживание 24×7

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

Reading time3 min
Views14K
Original author: Melvin Vivas
Прим. перев.: Автор статьи — 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. от переводчика


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

Tags:
Hubs:
Total votes 23: ↑22 and ↓1+21
Comments5

Articles

Information

Website
flant.ru
Registered
Founded
Employees
201–500 employees
Location
Россия
Representative
Александр Лукьянов