Добавляете новый glusterfs StorageClass в Kubernetes?

Я настроил хранилище GlusterFS на двух виртуальных машинах VirtualBox, следуя этим двум руководствам:

https://wiki.centos.org/HowTos/GlusterFSonCentOS

http://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/

Внутренняя сеть имеет назначенные DHCP IP-адреса 10.10.10.4 и 10.10.10.5. Я убедился, что хранилище работает правильно и так, как ожидалось.

На данный момент я пытаюсь добавить новый StorageClass в Kubernetes, используя файл YAML, и единственные ресурсы, которые я могу найти по этому вопросу, относятся конкретно к OpenShift или Heketi GlusterFS.

Я начал создавать класс хранилища следующим образом:

# storage-class.yml
apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
  name: gluster-container
provisioner: kubernetes.io/glusterfs
parameters:
  resturl: "10.10.10.5"

Я предполагаю, что это неполное, но я не могу найти больше информации о том, как это настроить. Когда я пытаюсь протестировать его, я получаю следующую ошибку:

ProvisioningFailed - Failed to provision volume with StorageClass "gluster-container": create volume error: error creating volume Post 10.10.10.5/volumes: unsupported protocol scheme ""

У кого-нибудь есть идеи, как действовать дальше?


person IAspireToBeGladOS    schedule 20.12.2017    source источник
comment
Некоторое время назад один из моих коллег сделал эту работу и написал об этом здесь, не уверен, что это поможет вам: blog.infracloud.io/gluster-heketi-kubernetes   -  person Vishal Biyani    schedule 21.12.2017


Ответы (2)


Средство подготовки GlusterFS в kubernetes хочет динамически выделять тома GlusterFS, как показано ниже:

gluster volume create glustervol1 replica 2 transport tcp 
gluster1.example.com:/bricks/brick1/brick \ 
gluster2.example.com:/bricks/brick1/brick.

GlusterFS сама по себе не имеет конечной точки API для запуска команд для создания этих томов; однако сообщество разработало Heketi в качестве конечной точки API GlusterFS. Конечная точка интерфейса управления RESTful Heketi — это значение resturl в вашем kubernetes StorageClass.

Как прокомментировал @Vishal Biyani, http://blog.infracloud.io/gluster-heketi-kubernetes/ — это описание того, как быстро начать работу с Heketi на GCP и подключить его к kubernetes.

Если динамическая подготовка томов GlusterFS не требуется в вашей среде, вы можете использовать StorageClass NFS и указать балансировщик нагрузки перед вашей GlusterFS. Вы по-прежнему получите потрясающие возможности репликации и распространения GlusterFS, но для этого потребуется включить службу gluster NFS и вручную создать каждый том gluster, который вы хотите предоставить kubernetes.

person AWippler    schedule 22.12.2017
comment
Проблема с этим описанием заключается в том, что оно специально ориентировано на среду Google Cloud, к которой у меня нет доступа. - person IAspireToBeGladOS; 27.12.2017

Я создал скрипт для управления претензиями томов glusterFS:

if [[ "$#" -le 3 ]]; then
  echo "Usage:"
  echo "   $0 <operation> <namespace> <name> <size>"
  echo "   - operation: create | delete"
  exit
fi

OPERATION=$1
NAMESPACE=$2
NAME=$3
SIZE=$4

function create {
  gluster volume create $NAMESPACE-$NAME replica 3  server1:/mnt/gluster-storage/brick-$NAMESPACE-$NAME server2:/mnt/gluster-storage/brick-$NAMESPACE-$NAME server3:/mnt/gluster-storage/brick-$NAMESPACE-$NAME  
  gluster volume start $NAMESPACE-$NAME

  kubectl -n $NAMESPACE apply -f /etc/kubernetes/glusterfs-endpoints.yml
  kubectl -n $NAMESPACE apply -f /etc/kubernetes/glusterfs-service.yml

  cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: $NAME
  namespace: $NAMESPACE
spec:
  capacity:
    storage: $SIZE
  accessModes:
    - ReadWriteMany
  glusterfs:
    endpoints: glusterfs-cluster
    path: $NAMESPACE-$NAME
    readOnly: false
  persistentVolumeReclaimPolicy: Retain
  claimRef:
    namespace: $NAMESPACE
    name: $NAME
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: $NAME
  namespace: $NAMESPACE
spec:
  accessModes:
  - ReadWriteMany
  resources:
     requests:
       storage: $SIZE
EOF
}

function delete {
  kubectl -n $NAMESPACE delete pvc $NAME
  kubectl delete pv $NAME

  yes | gluster volume stop $NAMESPACE-$NAME
  echo
  yes | gluster volume delete $NAMESPACE-$NAME
  echo
  echo "#################################################################"
  echo "REMOVE BRICKS MANUALLY:"
  echo "  server1:/mnt/gluster-storage/brick-$NAMESPACE-$NAME"
  echo "  server2:/mnt/gluster-storage/brick-$NAMESPACE-$NAME"
  echo "  server3:/mnt/gluster-storage/brick-$NAMESPACE-$NAME"
  echo "#################################################################"
}

case $OPERATION in
  create)
    create
    ;;
  delete)
    delete
    ;;
esac

Это создает том Gluster и сопоставляет его с заявкой на том в Kubernetes. Таким образом, вы можете использовать монтирование glusterfs без необходимости автоматической подготовки.

Обязательно запускайте kubelet вне докера, иначе вы будете использовать старую версию gluster.fuse, в которой отсутствуют многие оптимизации современных версий.

person Milo van der Zee    schedule 22.12.2017