Docker и все все все

в 9:11, , рубрики: docker, k8s, kubernetes, mesos, mesosphere, nomad, Разработка под Linux

image

Мало найдется сегодня несогласных с тем, что Docker в конце концов стал "мейнстримом". Ну, точнее, контейнеры Docker стали. Правда есть фронт, где война еще не окончена, хотя для многих победитель уже очевиден, и победитель этот — Kubernetes, который по статистике использования сильно опережает основных конкурентов: Docker Swarm и Mesos + Mesosphere.

Я знаю людей и компании, которые не согласны с выводом большинства о том, что k8s это будущее оркестрации контейнеров. Но по некоторым причинам и аналогичные инструменты от других производителей их также часто не устраивают. Крупные компании в таком случае выбирают путь разработки своего собственного инструмента для оркестрации контейнеров. Другие останавливаются на Mesos или даже на Nomad. Но я пока не знаю никого, кто использовал бы Docker Swarm (mode).

Кстати, число "8" в слове k8s означает точно "8 букв", то есть: k8s = k[8_других_букв]s = kubernetes. Мода на такие сокращения появилась в бородатых 80-х прошлого века, и лично я не приветствую такие сокращения, поэтому далее буду называть инструменты их полным именем.

Ситуация с хайпом вокруг Kubernetes (а это именно хайп по моему мнению) заставляет вендоров озаботиться его поддержкой. Дошло до того, что даже Docker объявил о добавлении официальной поддержки Kubernetes в следующей версии Docker EE (Enterprise Edition), а также dev-версиях Docker CE (Community Edition) для Windows/macOS (да, о Linux версии речь не идет, пока).

Поддержка Kubernetes внутри Docker не ведет к автоматическому прекращению развития Swarm, напротив, Docker продолжит активно инвестировать в Swarm, получая при этом дополнительные преимущества от поддержки двух систем сразу — так прокомментировал новость David Messina, глава отдела маркетинга в Docker.

Как бы дела не обстояли на самом деле, но слова David Messina похожи на правду — архитектура Docker устроена так, что слой оркестрации находится ниже верхнего слоя абстракции. Это позволяет в теории легко менять логику оркестратора и даже заменять его полностью на другой компонент. На практике для взаимозаменяемости оркестраторов (Swarm и Kubernetes, в частности) они должны иметь схожий интерфейс, чего Docker активно добивался, начиная с версии Docker 1.12 (2016 год), когда впервые появились сервисы, а позднее, в версии 1.13, был представлен Docker Compose 3.0, формат которого во многом похож на формат описания конфигурации ресурсов Kubernetes.

В итоге, мы приходим к тому, что при использовании сервисов Docker у нас будет выбор как минимум из двух оркестраторов: Swarm или Kubernetes. И да, это пока только в Docker EE. Но с другой стороны, вы действительно хотите обслуживать Kubernetes своими силами?

Мастер нода Kubernetes

$ docker ps
CONTAINER ID        IMAGE                                                    COMMAND                  CREATED             STATUS              PORTS               NAMES
f9882138b878        gcr.io/google_containers/pause-amd64:3.0                 "/pause"                 19 minutes ago      Up 19 minutes                           k8s_POD_kube-flannel-ds-hvnv6_kube-system_d9712e10-d1e9-11e7-9c5c-08002767d9b9_0
4d1ea67a0b76        gcr.io/google_containers/kube-proxy-amd64                "/usr/local/bin/kube…"   37 minutes ago      Up 36 minutes                           k8s_kube-proxy_kube-proxy-876f4_kube-system_60358c3c-d1e7-11e7-9c5c-08002767d9b9_0
37fb971730ce        gcr.io/google_containers/pause-amd64:3.0                 "/pause"                 37 minutes ago      Up 36 minutes                           k8s_POD_kube-proxy-876f4_kube-system_60358c3c-d1e7-11e7-9c5c-08002767d9b9_0
e1019f1fce5b        gcr.io/google_containers/kube-controller-manager-amd64   "kube-controller-man…"   37 minutes ago      Up 37 minutes                           k8s_kube-controller-manager_kube-controller-manager-kub-1_kube-system_422c166e980d1dc0f2b1d6dfe2a44a79_0
87cfb282f7ad        gcr.io/google_containers/kube-scheduler-amd64            "kube-scheduler --ad…"   37 minutes ago      Up 37 minutes                           k8s_kube-scheduler_kube-scheduler-kub-1_kube-system_e554495c6f8701f21accd04866090b05_0
50d678251d39        gcr.io/google_containers/kube-apiserver-amd64            "kube-apiserver --re…"   37 minutes ago      Up 37 minutes                           k8s_kube-apiserver_kube-apiserver-kub-1_kube-system_342c1a99aaa61a0ed9ad896f289102da_0
ccca79b694a8        gcr.io/google_containers/etcd-amd64                      "etcd --listen-clien…"   37 minutes ago      Up 37 minutes                           k8s_etcd_etcd-kub-1_kube-system_d76e26fba3bf2bfd215eb29011d55250_0
5b1f09ff23ca        gcr.io/google_containers/pause-amd64:3.0                 "/pause"                 37 minutes ago      Up 37 minutes                           k8s_POD_kube-scheduler-kub-1_kube-system_e554495c6f8701f21accd04866090b05_0
31874e59e951        gcr.io/google_containers/pause-amd64:3.0                 "/pause"                 37 minutes ago      Up 37 minutes                           k8s_POD_kube-controller-manager-kub-1_kube-system_422c166e980d1dc0f2b1d6dfe2a44a79_0
9a4c6aa0b861        gcr.io/google_containers/pause-amd64:3.0                 "/pause"                 37 minutes ago      Up 37 minutes                           k8s_POD_kube-apiserver-kub-1_kube-system_342c1a99aaa61a0ed9ad896f289102da_0
d908b820c2cb        gcr.io/google_containers/pause-amd64:3.0                 "/pause"                 37 minutes ago      Up 37 minutes                           k8s_POD_etcd-kub-1_kube-system_d76e26fba3bf2bfd215eb29011d55250_0

Рабочая нода Kubernetes

$ docker ps
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
049836cefde0        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 2 hours ago         Up 2 hours                              k8s_POD_kube-flannel-ds-tt7nf_kube-system_d9718ab6-d1e9-11e7-9c5c-08002767d9b9_0
c9c39f7921f1        gcr.io/google_containers/kube-proxy-amd64   "/usr/local/bin/kube…"   3 hours ago         Up 3 hours                              k8s_kube-proxy_kube-proxy-6dz5d_kube-system_b46478e0-d1e7-11e7-9c5c-08002767d9b9_0
986964a3b9c8        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 3 hours ago         Up 3 hours                              k8s_POD_kube-proxy-6dz5d_kube-system_b46478e0-d1e7-11e7-9c5c-08002767d9b9_0

Что-то пошло не так на рабочей ноде Kubernetes

$ docker ps -a
CONTAINER ID        IMAGE                                       COMMAND                  CREATED              STATUS                              PORTS               NAMES
a9a80a385bef        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 1 second ago         Exited (0) Less than a second ago                       k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_201
0d807b577fcb        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 1 second ago         Exited (0) Less than a second ago                       k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_192
80d72880e96d        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 2 seconds ago        Exited (0) 1 second ago                                 k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_191
8afa248b3d7a        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 2 seconds ago        Exited (0) 1 second ago                                 k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_200
87b742a1f267        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 3 seconds ago        Exited (0) 2 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_199
775ed98c7c3f        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 3 seconds ago        Exited (0) 2 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_190
760c34dcdeed        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 4 seconds ago        Exited (0) 3 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_198
d8088f54906b        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 4 seconds ago        Exited (0) 3 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_189
e6b3bda7b916        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 5 seconds ago        Exited (0) 4 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_197
d6b086d07e2b        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 6 seconds ago        Exited (0) 4 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_188
a174b8540b65        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 6 seconds ago        Exited (0) 5 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_196
2661953dde42        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 7 seconds ago        Exited (0) 5 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_187
1fafde972df3        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 8 seconds ago        Exited (0) 6 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_195
714240831cd0        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 8 seconds ago        Exited (0) 7 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_186
025d5f953186        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 9 seconds ago        Exited (0) 8 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_194
53ada973b77d        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 9 seconds ago        Exited (0) 8 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_185
9079f3ef2238        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 10 seconds ago       Exited (0) 9 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_193
63713d562f90        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 10 seconds ago       Exited (0) 9 seconds ago                                k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_184
3c537074372e        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 11 seconds ago       Exited (0) 10 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_192
e07d254be81a        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 11 seconds ago       Exited (0) 10 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_183
497b03dbe981        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 12 seconds ago       Exited (0) 11 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_191
539c3bde5766        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 12 seconds ago       Exited (0) 11 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_182
b1bc951015c1        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 13 seconds ago       Exited (0) 12 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_190
c1448302112b        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 13 seconds ago       Exited (0) 12 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_181
afa7ac76512e        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 14 seconds ago       Exited (0) 13 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_180
2a0526c4b9ae        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 14 seconds ago       Exited (0) 13 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_189
4cd401e18c5a        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 15 seconds ago       Exited (0) 14 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_179
d8aea9b07ebf        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 15 seconds ago       Exited (0) 14 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_188
facf53fed8f4        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 16 seconds ago       Exited (0) 15 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_187
d4f5d552e6d3        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 16 seconds ago       Exited (0) 15 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_178
3e890f2710e8        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 17 seconds ago       Exited (0) 16 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_186
08d7ffd20989        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 17 seconds ago       Exited (0) 16 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_177
7636aee01b36        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 18 seconds ago       Exited (0) 17 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_185
f5c9f0462927        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 18 seconds ago       Exited (0) 17 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_176
08228f1dcc69        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 19 seconds ago       Exited (0) 18 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_175
3ebf9cbe0574        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 20 seconds ago       Exited (0) 19 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_184
8db8288b8e25        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 21 seconds ago       Exited (0) 20 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-tpcg6_default_5ccd5e03-d1fd-11e7-9c5c-08002767d9b9_174
04910fa590a3        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 21 seconds ago       Exited (0) 20 seconds ago                               k8s_POD_nginx-deployment-569477d6d8-ks262_default_5ccc8cd6-d1fd-11e7-9c5c-08002767d9b9_183
6bb21c072cdf        quay.io/coreos/flannel                      "/opt/bin/flanneld -…"   About a minute ago   Exited (1) 43 seconds ago                               k8s_kube-flannel_kube-flannel-ds-tgf4g_kube-system_d971b659-d1e9-11e7-9c5c-08002767d9b9_30
fd2adaea2775        quay.io/coreos/flannel                      "cp -f /etc/kube-fla…"   2 hours ago          Exited (0) 2 hours ago                                  k8s_install-cni_kube-flannel-ds-tgf4g_kube-system_d971b659-d1e9-11e7-9c5c-08002767d9b9_0
a4ab64d35f7a        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 2 hours ago          Up 2 hours                                              k8s_POD_kube-flannel-ds-tgf4g_kube-system_d971b659-d1e9-11e7-9c5c-08002767d9b9_0
8af917d54c0e        gcr.io/google_containers/kube-proxy-amd64   "/usr/local/bin/kube…"   3 hours ago          Up 3 hours                                              k8s_kube-proxy_kube-proxy-jrgzd_kube-system_9f8ce53d-d1e7-11e7-9c5c-08002767d9b9_0
b9abb6dbc139        gcr.io/google_containers/pause-amd64:3.0    "/pause"                 3 hours ago          Up 3 hours                                              k8s_POD_kube-proxy-jrgzd_kube-system_9f8ce53d-d1e7-11e7-9c5c-08002767d9b9_0

Для сравнения, вот что мы видим на нодах Docker в режиме Swarm:

Мастер нода Docker

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Рабочая нода Docker

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

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

В любом случае, с релизом поддержки Kubernetes в Docker даже у тех, кто не ищет легких путей, появится возможность поэкспериментировать с оркестрацией от Kubernetes сразу после установки Docker на свой новенький Mac/Windows. А пока, томясь в ожидании неизбежного, предлагаю сторонникам Kubernetes/Swarm/Nomad/Mesos поделиться соображениями о том, что могло склонить их на темную сторону выбрать именно этот инструмент.

Автор: Rinat Khabibiev

Источник

Поделиться

* - обязательные к заполнению поля