Windows & Linux живут вместе в кластере Kubernetes

Я смотрел на документация kubernetes который, кажется, имеет совместимость с windows, однако я не нахожу полностью ясным, могут ли Linux и Windows жить вместе (я имею в виду, в разных VMs, но в одном кластере).

Я хотел бы знать, есть ли поддержка этого сценария в gcloud, azure или aws. А также, процедура или пример, чтобы заставить его работать. Например, как создать pod в правильной виртуальной машине (windows или linux) и как горизонтально и кластер autoscalers работы.

вариант использования-2 API, один работает в windows (.NET Framework) и другой в linux (python/C++), и я хочу иметь возможность перенаправлять их, иметь возможность вызывать друг друга, масштабировать их и так далее с kubernetes. Как Примечание,.NET Framework приложения имеют зависимости (в основном для математической оптимизации), которые не могут быть переданы .NET Core, это означает, что я не могу преобразовать приложение к linux-based.

2 ответов


некоторая история, поэтому контейнеры-это вещь Linux, поэтому в Windows нет контейнеров как таковых. Docker создал Docker для Windows, но по существу то, что он делает, это запустить Hyper-V Linux VM (используется для VirtualBox) и внутри него запускает ваши контейнеры. Начиная с последней версии Docker, Microsoft добавила возможности на Hyper-V, чтобы позволить запускать эти контейнеры как бы изначально, что упрощает запуск .NET apps в контейнерах.

K8s реализован в Golang, так что это было обычно проще переносить основные компоненты, такие как kubelet, kube-proxy, kubectl в Windows, используя кросс-компилятор Golang (или собственный в Windows)

сложная часть-это сеть, но похоже, что они выяснили это в docs

что касается публичной облачной поддержки от основных поставщиков:

  • AWS

    • гипервизор: модифицированный Xen или KVM. Нет вложенной виртуализации поддержка.
    • VMs: Windows VMs. Невозможно использовать Hyper-V с вложенной виртуализацией, но можно запустить Docker для Windows.
    • голый металл: (i3.metal as of this writing). Запустите Hyper-V изначально и Docker для Windows.
  • Azure

    • гипервизор: Hyper-V. поддерживает вложенную виртуализацию на некоторых типах экземпляров.
    • ВМС: ВМС Виндовс, могут использовать вложенную виртуализацию с гипер-В, и могут побежать Докер для Windows.
    • ACS, AKS, ACE: должен иметь возможность использовать Hyper-V с вложенной виртуализацией и некоторыми случаями изначально.
  • GCP

    • гипервизор: KVM. Поддерживает вложенную виртуализацию для некоторых типов экземпляров.
    • VMs: Windows VMs. Может запускать Hyper-V с вложенной виртуализацией и Docker для Windows.

кроме того, я не знаю, что еще есть к нему (кроме того, что в docs) вопрос очень широкий. Просто установите Docker для Windows, настройте сеть, присоединитесь к кластеру с помощью kubeadm и запланировать рабочие нагрузки Windows, используя nodeSelector спецификации в ваших стручках и убедитесь, что вы помечаете свои узлы Windows с beta.kubernetes.io/os=windows

есть еще одно хорошее руководство по настройке Kubernetes с узлами Windows здесь


Да, это должно быть возможно.

поскольку все развертывания живут в контейнерах docker, вы можете запускать любую ОС на Kubernetes (в контейнере docker). Также Windows.

запуск контейнеров Windows и Linux в одном кластере не должен вызывать никаких проблем.