Комментарии 58
k8s этот уровень тоже заменяет?
k8s значительно больше умеет.
https://kubernetes.io/docs/concepts/services-networking/service/ + https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/ + https://kubernetes.io/docs/concepts/services-networking/ingress/ + https://kubernetes.io/docs/concepts/services-networking/network-policies/
что из коробки в созданном kubernetes решении сервисы точно так же смогут пинговать друг друга по имени
да
и трафик будет раутиться по наименее загруженному каналу к наименее загруженной копии сервиса
docker swarm поддерживает только round robin для сервисов же? k8s может тоже самое через iptables, в 1.9 упала поддержка ipvs и всех политик которые приходят с ним.
k8s значительно больше умеет.
Чаще всего именно этот довод я слышу от тех, кто предпочитает использовать Kubernetes. А вы можете привести конкретный пример полезной фичи, которую вы действительно используете, и из-за отсутствия которой вы не можете использовать Swarm?
Я на самом деле не использую swarm, так что для меня корректнее звучало бы "а что есть такого в swarm из-за чего я хотел бы переехать на него".
Навскидку, в k8s ingress и сетевые политики. Первое в swarm можно решить "руками", второе заменить на calico cni.
StatefulSet в k8s более фичаст чем service swarm'a и с ним проще масштабировать сервисы которые сами кластеризируются.
Кастомные ресурсы тоже классная штука. У меня базы и юзеры мускуля вынесены в ресурсы и контроллер сам их настраивает. Это позволяет держать определения БД там же где и прочие зависимости приложения.
Возможность мапить секреты в env/файлы — очень удобно и постоянно пользуюсь. В swarm можно наверно использовать vault для замены? но это требует опять же движений руками.
Ну разве что про кастомные ресурсы я не знаю, но это что-то очень специфическое и кастомное :)
Но все это настолько далеко от обычного юзера. Я почему-то сомневаюсь, что именно на этом основывается выбор инструмента для управления контейнерами, или на этом?
К тому же, в упомянутой статье в конце автор приводит мысль о том, что релиз Docker 1.12 существенно улучшил сетевую подсистему Docker, сделав ее вполне функциональной по сравнению с другими.
del
И знаете, он довольно неплохо работает.
Есть непонятный глюк, который просиходит исключительно в dev-среде, когда контейнеры становятся недоступны извне при деплое. Но возникает он редко, да и именно deploy я использую только при изменении конфигурации сварма. А простая перезагрузка контейнеров делается по другому.
Единственным относительно сложным моментом была настройка локального registry доступного из всех нод и при этом защищенного паролем и сертификатом. Ну денек поразбирался и работает.
А из минусов k8s — при первом взгляде он какой-то нереально навороченный и сложный. Хотя может стоит разобраться и все будет проще, не знаю.
при первом взгляде он какой-то нереально навороченный и сложный
я так тоже раньше думал. Очень помогает поднятие кластера полностью руками, тот же kubernetes the hard way.
Плюс, его можно запускать через docker-machine? А то ж меня
Когда в документации 14 пунктов, она вызывает некоторое отторжение :)
Да я знаю, рассеянность внимания, многабукаф, все дела :-) почитайте и поиграйтесь все же. Полезно.
Плюс, его можно запускать через docker-machine? А то жу меня лапки Windows :)
Не знаю, его точно можно запускать через minikube (кубовое окружение для разработки), вот например дока для винды.
Но для KTHW надо машинку с линуксом, там же все руками. Ну или руками адаптировать под винду.
Может быть еще это отторгает. Конечно нет ничего плохого в отсутствии Windows-поддержки, но со Свармом я на сервер захожу просто чтоб поглазеть в htop ради интереса, иногда. Остальное с локальной машины.
Конечно нет ничего плохого в отсутствии Windows-поддержки
Еще раз — она есть. Вот свежий релиз миникуба и там дока как его запустить на винде: https://github.com/kubernetes/minikube/releases/tag/v0.23.0
Но, minikube это готовый кластер. Поставил и работай. Это не "собери k8s из исходников и пойми как работает паззл".
Вот кстати нашел такую онлайн-прибулду. ВОзможно кому-то вроде меня поможет:
www.katacoda.com/courses/kubernetes
Хотя я поднял 3 виртуалки с Ubuntu и попробовал поднять кластер Kubernetes. Он вроде заработал, ноды начали друг друга видеть. Но поднять сервис из трех реплик nginx он не смог. Может памяти не хватило? Я использовал такие виртуалки (1024 мб оперативы по дефолту):
Vagrant.configure('2') do |config|
config.vm.box = 'bento/ubuntu-16.04'
config.vm.network 'private_network', type: 'dhcp'
%w(
kub-1
kub-2
kub-3
).each do |host_name|
config.vm.define host_name do |host|
host.vm.hostname = host_name
# install Docker
host.vm.provision 'docker'
# install Kubernetes
host.vm.provision 'shell', :privileged => true,
inline: <<-EOF
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add
echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' > /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt-get install -y kubelet kubeadm kubectl kubernetes-cni
swapoff --all # demands by kubectl
EOF
end
end
end
Эо объясняет как поднять кластер с нуля и кто вообще внутри происходит. Если надо просто кластер на поиграться есть minikube / kubeadm / kops наконец.
Но поднять сервис из трех реплик nginx он не смог. Может памяти не хватило
А ошибку какую возвращал?
А ошибку какую возвращал?
никакую, просто не поднималось. На воркере можно было видеть то, что я статье привел в пример. А мастер показывал это:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-569477d6d8-ks262 0/1 ContainerCreating 0 5m
nginx-deployment-569477d6d8-tpcg6 0/1 ContainerCreating 0 5m
nginx-deployment-569477d6d8-wj98c 0/1 ContainerCreating 0 5m
Во-первых, посмотрите что в журнале событий:
$ kubectl describe pod nginx-deployment-569477d6d8-ks262
там может быть конкретная причина.
Если в events ничего интересного нет (или вообще нет событий), посмотрите там же на какую ноду под зашедулился и гляньте логи kubectl.
В этом кстати просматривается положительная черта k8s, его относительно просто дебажить если вы поняли общий принцип работы. Вся информация на тему ошибок будет в логах, частично всплывая и в "пользовательський" интерфейс через события. Мониторинг можно легко построить на prometheus, так как все компоненты экспортируют метрики, рантайм (docker или rkt) можно изучить отдельно от kubelet и разобраться что и где пошло не так.
$ kubectl describe pod nginx-5f9f9d8465-dxtvz
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulMountVolume 1m kubelet, kub-2 MountVolume.SetUp succeeded for volume "default-token-vmtmg"
Normal Scheduled 1m default-scheduler Successfully assigned nginx-5f9f9d8465-dxtvz to kub-2
Warning FailedCreatePodSandBox 1m (x8 over 1m) kubelet, kub-2 Failed create pod sandbox.
Warning FailedSync 1m (x8 over 1m) kubelet, kub-2 Error syncing pod
Normal SandboxChanged 1m (x8 over 1m) kubelet, kub-2 Pod sandbox changed, it will be killed and re-created.
Что за причина все равно непонятно. Зато увидел, что у меня с Flannel что-то неладное:
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-kub-1 1/1 Running 0 18m
kube-system kube-apiserver-kub-1 1/1 Running 0 17m
kube-system kube-controller-manager-kub-1 1/1 Running 0 18m
kube-system kube-dns-545bc4bfd4-cnl7h 0/3 ContainerCreating 0 18m
kube-system kube-flannel-ds-9f55b 0/1 CrashLoopBackOff 8 17m
kube-system kube-flannel-ds-brfst 0/1 CrashLoopBackOff 7 16m
kube-system kube-flannel-ds-s6vr4 0/1 CrashLoopBackOff 7 16m
kube-system kube-proxy-76fr5 1/1 Running 0 18m
kube-system kube-proxy-7cxs7 1/1 Running 0 16m
kube-system kube-proxy-z44fz 1/1 Running 0 16m
kube-system kube-scheduler-kub-1 1/1 Running 0 18m
Куда дальше копать? :)
Warning FailedCreatePodSandBox 1m (x8 over 1m) kubelet, kub-2 Failed create pod sandbox.
Что-то пошло не так между kubelet и docker. Думается мне и flannel потому же лежит. Что интересного в логах у kubelet на kub-2? Групайте на предмет "createPodSandbox for pod"
Контекст: событие создается тут, а парой строк выше в лог отправляется конкретная ошибка.
Мое мнение, с таким подходом товарищи из Kubernetes смогут зарабатывать только на гиках. Ну может еще AWS им деньжат будет подкидавать.
на какую ОС пробовали поставить? Предположительно есть нюансы при установке k8s на firewalld
Production-решение отлично можно развернуть на ubuntu + kubeadm + ceph на самом деле. С обновлениями и прочим, но без репликации мастера.
Нет, я сам только экспериментирую, но я видел развернутые варианты. Для себя я жду поддержку multi-master в kubeadm.
Я гонял много разной нагрузки, от сложносвязянных микросервисов до LAMP вордпресса. Ceph RBD работает стабильно. Ceph Cephfs имеет несколько багов с подчисткой ресурсов и общей стабильностью. Сам k8s работает абсолютно без нареканий, текущий кластер начинал с 1.7, потом обновлял вплоть до 1.9-alpha через kubeadm и нескольких плейбуков в ансибле. Calico работает очень стабильно и позволяет сделать простой L2-"меш" без оверхедов.
Указание нужного интерфейса через --iface мне не помогло. Буду дальше копать :)
На k8s смотрю и изучаю, но есть желание дождаться когда он станет более стабильным и там закончится этап бесконечного накидывания фич и пойдет чисто багфиксинг.
И что значит «без жестко закрепленного мастера»? Имеется в виду наверно Raft? В Swarm например тоже нет захардкоженного мастера, есть набор менеджеров, какждый из которых может взять на себя роль лидера на некоторый период. И да, в Swam все ноды тоже равноправны, но можно принудительно уменьшить права ноды, чтобы она всегда была только рабочей нодой.
И что значит «без жестко закрепленного мастера»
да, raft. Все сервера и мастера и клиенты ( ну это потому что кластер небольшой)
В Swarm например тоже нет захардкоженного мастера, есть набор менеджеров, какждый из которых может взять на себя роль лидера на некоторый период.
про swarm тоже в курсе, на тот момент он был еще сырой. я думаю поковыряюсь еще со swarm, так как он все таки встроенный в docker. Однако с nomad удобно то, что он поддерживает достаточно много функций связанных с оркестрацией, кроме того он позволяет управлять не только контейнерами но и вообще любыми исполняемыми типами, включая запуск обычных бинарников или виртуальных машин (kvm/qemu).
Kubernetes изначально выглядит как что-то сложное, но достаточно быстро понимаешь, что ничего страшного. Он в том или ином виде поддерживается GCP (Google Kubernetes Engine), AWS (kops), Azure (Azure Container Service), on-prem (разные варианты). При этом и от Kubernetes хочется большей стабильности (например, приходится пользоваться альфа/бета фичами), но уж что поделать.
Так вот теперь Докер, проигнорировав рынок, пытается сесть в поезд, который уже готов ехать без него. Опять же, это просто мои мысли, не судите строго.
Swarm я пробовал и немного присматривался к нему, т.е. имею действительно субьективные представления. Он действительно кажется базовым и не таким мейнстримным, сложно о нем найти какие-то «рецепты успеха». Кроме самой системы оркестрации нужно еще много: CI/CD, интеграции с хардварными балансерами, LDAP, хотя бы базовые веб-админки и т.п. Если это и есть в Сварме, то не в таком изобилии.
Осталось непонятным (подозрительным) настроение автора:
Ситуация с хайпом вокруг Kubernetes (а это именно хайп по моему мнению
Что вы хотели этим сказать: что в Kubernetes «хайпового» или что вы сами называете «хайпом»? Как «Docker стал мейнстримом», так и с Kubernetes происходит аналогичное. Проекту, напомню, два с небольшим года, а количество влившихся в него ИТ-гигантов уже зашкаливает — по-моему, это не «хайп», а признание индустрией (причём важно, что в экосистеме далеко не только стартапы, но и настоящие тяжеловесы включая Cisco, IBM, Microsoft, Oracle, Pivotal/Dell, Red Hat… — многим ли удавалось так много и так быстро?).
Но ещё интереснее тот факт, что, скажем так, тенденции оркестровки вместе с Kubernetes простираются сильно дальше — за пределы «мейнстрима Docker» (и легко его оттуда выбросят) — благодаря упомянутому комментарием выше CRI-O (на русском об этом проекте я писал здесь — забавно получилось, что как раз буквально за неделю до анонса поддержки K8s в Docker). В рассуждениях о мейнстриме, Docker и Kubernetes нельзя обойти вниманием эту важнейшую деталь.
Кстати, а аналог namespaces есть?
Ща гляну. А сине-зеленый деплой делать ручками?
И кстати, это бесплатно или платно? я уже запутался в лицензировании докера :)
и гуя?
Использую Rancher cattle, В версии 2.0 появился под капотом k8s, но поддержка cattle осталась
Docker и все все все