Как развернуть адаптивный кластер dask-kubernetes на экземпляре aws kubernetes

Я пытаюсь развернуть адаптивный кластер dask kubernetes на моем экземпляре aws K8s (я хочу использовать найденный интерфейс kubeControl здесь). Мне неясно, где и как я выполняю этот код, чтобы он был активен в моем существующем кластере. В дополнение к этому, я хочу иметь правило входа, чтобы другой экземпляр ec2, который у меня есть, мог подключаться к кластеру и выполнять код в aws VPC для поддержания безопасности и производительности сети.

Пока мне удалось получить работающий кластер k8s с запущенными на нем dask и jupyterhub. Я использую образец диаграммы штурвала, найденный здесь, который ссылается на образ докера. здесь. Я вижу, что этот образ даже не устанавливает dask-kubernetes. С учетом вышесказанного я могу подключиться к этому кластеру из другого моего экземпляра ec2, используя открытый DNS-сервер AWS, и выполнить собственный код, но это не собственный кластер dask kubernetes.

Я работал над изменением развернутого yaml для кубернетов, но мне неясно, что мне нужно было бы изменить, чтобы он использовал правильные кластеры / планировщики кубернетов. Я знаю, что мне нужно изменить образ докера, который я использую для установки dask-kubernetes, но это мне все равно не помогает. Ниже приведен образец диаграммы развертывания штурвала, который я использую.

---
# nameOverride: dask
# fullnameOverride: dask

scheduler:
  name: scheduler
  image:
    repository: "daskdev/dask"
    tag: 2.3.0
    pullPolicy: IfNotPresent
    # See https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
    pullSecrets:
    #  - name: regcred
  replicas: 1
  # serviceType: "ClusterIP"
  # serviceType: "NodePort"
  serviceType: "LoadBalancer"
  servicePort: 8786
  resources: {}
  #  limits:
  #    cpu: 1.8
  #    memory: 6G
  #  requests:
  #    cpu: 1.8
  #    memory: 6G
  tolerations: []
  nodeSelector: {}
  affinity: {}

webUI:
  name: webui
  servicePort: 80

worker:
  name: worker
  image:
    repository: "daskdev/dask"
    tag: 2.3.0
    pullPolicy: IfNotPresent
    # dask_worker: "dask-cuda-worker"
    dask_worker: "dask-worker"
    pullSecrets:
    #  - name: regcred
  replicas: 3
  aptPackages: >-
  default_resources:  # overwritten by resource limits if they exist
    cpu: 1
    memory: "4GiB"
  env:
  #  - name: EXTRA_CONDA_PACKAGES
  #    value: numba xarray -c conda-forge
  #  - name: EXTRA_PIP_PACKAGES
  #    value: s3fs dask-ml --upgrade
  resources: {}
  #  limits:
  #    cpu: 1
  #    memory: 3G
  #    nvidia.com/gpu: 1
  #  requests:
  #    cpu: 1
  #    memory: 3G
  #    nvidia.com/gpu: 1
  tolerations: []
  nodeSelector: {}
  affinity: {}

jupyter:
  name: jupyter
  enabled: true
  image:
    repository: "daskdev/dask-notebook"
    tag: 2.3.0
    pullPolicy: IfNotPresent
    pullSecrets:
    #  - name: regcred
  replicas: 1
  # serviceType: "ClusterIP"
  # serviceType: "NodePort"
  serviceType: "LoadBalancer"
  servicePort: 80
  # This hash corresponds to the password 'dask'
  password: 'sha1:aae8550c0a44:9507d45e087d5ee481a5ce9f4f16f37a0867318c'
  env:
  #  - name: EXTRA_CONDA_PACKAGES
  #    value: "numba xarray -c conda-forge"
  #  - name: EXTRA_PIP_PACKAGES
  #    value: "s3fs dask-ml --upgrade"
  resources: {}
  #  limits:
  #    cpu: 2
  #    memory: 6G
  #  requests:
  #    cpu: 2
  #    memory: 6G
  tolerations: []
  nodeSelector: {}
  affinity: {}

person Jacob Schofield    schedule 19.09.2019    source источник


Ответы (1)


Для запуска кластера Dask в Kubernetes есть три рекомендуемых подхода. Каждый из этих подходов требует, чтобы у вас был правильно настроен существующий кластер Kubernetes и учетные данные (kubectl работает локально).

Таблица Dask Helm

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

helm repo add dask https://helm.dask.org/
helm repo update
helm install --name my-release dask/dask

Обратите внимание, что это не адаптивный кластер, но вы можете масштабировать его, изменив размер развертывания с помощью kubectl.

kubectl scale deployment dask-worker --replicas=10

Документация по диаграмме Helm

Python dask-kubernetes API

Вы также можете использовать dask-kubernetes, библиотеку Python, для создания специальных кластеров на лету.

pip install dask-kubernetes
from dask_kubernetes import KubeCluster

cluster = KubeCluster()
cluster.scale(10)  # specify number of nodes explicitly

cluster.adapt(minimum=1, maximum=100)  # or dynamically scale based on current workload

Это создаст кластер Dask с нуля и разрушит его, когда объект cluster будет удален сборщиком мусора (скорее всего, при выходе).

dask-kubernetes Документация

Dask Gateway

Dask Gateway предоставляет безопасный мультитенантный сервер для управления кластерами Dask.

Чтобы начать работу с Kubernetes, вам необходимо создать файл конфигурации Helm (config.yaml) с токеном прокси-сервера шлюза.

gateway:
  proxyToken: "<RANDOM TOKEN>"

Подсказка: вы можете создать подходящий токен с помощью openssl rand -hex 32.

Затем установите диаграмму.

helm repo add dask-gateway https://dask.org/dask-gateway-helm-repo/
helm repo update
helm install --values config.yaml my-release dask-gateway/dask-gateway

Документация по шлюзу Dask

person Jacob Tomlinson    schedule 16.01.2020