Digital Ocean 管理的 Kubernetes 卷处于挂起状态

hol*_*lms 3 volumes elasticsearch digital-ocean kubernetes

这并不是数字海洋特有的,如果能够验证这是否是预期的行为,那就太好了。

我正在尝试使用 ElasticSearch本身的 Helm Chart 在 DO 管理的 Kubernetes 集群上设置 ElasticSearch 集群

他们说我需要storageClassName在 a 中指定 avolumeClaimTemplate才能使用托管 kubernetes 服务提供的卷。对于 DO,这是do-block-storages根据他们的文档。似乎也没有必要定义 PVC,舵图应该自己定义。

这是我正在使用的配置

# Specify node pool
nodeSelector:
    doks.digitalocean.com/node-pool: elasticsearch

# Shrink default JVM heap.
esJavaOpts: "-Xmx128m -Xms128m"

# Allocate smaller chunks of memory per pod.
resources:
  requests:
    cpu: "100m"
    memory: "512M"
  limits:
    cpu: "1000m"
    memory: "512M"

# Specify Digital Ocean storage
# Request smaller persistent volumes.
volumeClaimTemplate:
  accessModes: [ "ReadWriteOnce" ]
  storageClassName: do-block-storage
  resources:
    requests:
      storage: 10Gi
extraInitContainers: |
  - name: create
    image: busybox:1.28
    command: ['mkdir', '/usr/share/elasticsearch/data/nodes/']
    volumeMounts:
    - mountPath: /usr/share/elasticsearch/data
      name: elasticsearch-master
  - name: file-permissions
    image: busybox:1.28
    command: ['chown', '-R', '1000:1000', '/usr/share/elasticsearch/']
    volumeMounts:
    - mountPath: /usr/share/elasticsearch/data
      name: elasticsearch-master
Run Code Online (Sandbox Code Playgroud)

我正在使用 terraform 设置 Helm 图表,但无论如何,您将采用哪种方式来设置它:

resource "helm_release" "elasticsearch" {
  name      = "elasticsearch"
  chart     = "elastic/elasticsearch"
  namespace = "elasticsearch"

  values = [
    file("charts/elasticsearch.yaml")
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是我检查 pod 日志时得到的信息:

51s         Normal    Provisioning           persistentvolumeclaim/elasticsearch-master-elasticsearch-master-2   External provisioner is provisioning volume for claim "elasticsearch/elasticsearch-master-elasticsearch-master-2"
2m28s       Normal    ExternalProvisioning   persistentvolumeclaim/elasticsearch-master-elasticsearch-master-2   waiting for a volume to be created, either by external provisioner "dobs.csi.digitalocean.com" or manually created by system administrator
Run Code Online (Sandbox Code Playgroud)

我很确定问题出在音量上。它应该是由 kubernetes 自动提供的。描述持久存储可以得出以下结论:

holms@debian ~/D/c/s/b/t/s/post-infra> kubectl describe pvc elasticsearch-master-elasticsearch-master-0 --namespace elasticsearch
Name:          elasticsearch-master-elasticsearch-master-0
Namespace:     elasticsearch
StorageClass:  do-block-storage
Status:        Pending
Volume:        
Labels:        app=elasticsearch-master
Annotations:   volume.beta.kubernetes.io/storage-provisioner: dobs.csi.digitalocean.com
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      
Access Modes:  
VolumeMode:    Filesystem
Mounted By:    elasticsearch-master-0
Events:
  Type    Reason                Age                    From                                                                              Message
  ----    ------                ----                   ----                                                                              -------
  Normal  Provisioning          4m57s (x176 over 14h)  dobs.csi.digitalocean.com_master-setupad-eu_04e43747-fafb-11e9-b7dd-e6fd8fbff586  External provisioner is provisioning volume for claim "elasticsearch/elasticsearch-master-elasticsearch-master-0"
  Normal  ExternalProvisioning  93s (x441 over 111m)   persistentvolume-controller                                                       waiting for a volume to be created, either by external provisioner "dobs.csi.digitalocean.com" or manually created by system administrator
Run Code Online (Sandbox Code Playgroud)

我已经用谷歌搜索了所有内容,似乎一切都是正确的,并且音量应该在 DO 端上升,没有问题,但它挂在待处理状态。这是预期的行为还是我应该要求 DO 支持人员检查他们这边发生了什么?

Pio*_*lec 5

是的,这是预期的行为。此图表可能与 Digital Ocean Kubernetes 服务不兼容。

\n\n

Digital Ocean文档的“已知问题”部分包含以下信息:

\n\n
\n
    \n
  • 对 Kubernetes 中调整 DigitalOcean 块存储卷大小的支持尚未实现。

  • \n
  • 在 DigitalOcean 控制面板中,集群资源(工作节点、负载均衡器和块存储卷)列在 Kubernetes 页面之外。如果您在控制面板中重命名或以其他方式修改这些资源,则可能会导致它们对集群无法使用,或者导致协调器配置替换资源。kubectl 为了避免这种情况,请仅使用控制面板\xe2\x80\x99s Kubernetes 页面来管理集群资源 。

  • \n
\n
\n\n

charts/stable/elasticsearch中提到了具体要求:

\n\n
\n

先决条件详细信息

\n\n
    \n
  • 库伯内特斯 1.10+
  • \n
  • 对底层基础设施的光伏动态配置支持
  • \n
\n
\n\n

您可以向 Digital Ocean 支持寻求帮助,或者尝试在没有 Helm Chart 的情况下部署 ElasticSearch。

\n\n

github上甚至提到:

\n\n
\n

该图表的自动化测试目前仅针对 GKE(Google Kubernetes Engine)运行。

\n
\n\n
\n\n

更新:

\n\n

我的 kubeadm ha 集群上也存在同样的问题。

\n\n

不过,我设法通过手动PersistentVolumes为我的storageclass.

\n\n

我的存储类定义storageclass.yaml::

\n\n
kind: StorageClass\napiVersion: storage.k8s.io/v1\nmetadata:\n  name: ssd\nprovisioner: kubernetes.io/no-provisioner\nvolumeBindingMode: WaitForFirstConsumer\nparameters:\n  type: pd-ssd\n\n
Run Code Online (Sandbox Code Playgroud)\n\n
$ kubectl apply -f storageclass.yaml\n
Run Code Online (Sandbox Code Playgroud)\n\n
$ kubectl get sc\nNAME   PROVISIONER   AGE\nssd    local         50m\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的持久卷定义pv.yaml::

\n\n
apiVersion: v1\nkind: PersistentVolume\nmetadata:\n  name: task-pv-volume\n  labels:\n    type: local\nspec:\n  storageClassName: ssd\n  capacity:\n    storage: 30Gi\n  accessModes:\n    - ReadWriteOnce\n  hostPath:\n    path: "/mnt/data"\n  nodeAffinity:\n    required:\n      nodeSelectorTerms:\n      - matchExpressions:\n        - key: kubernetes.io/hostname\n          operator: In\n          values:\n          - <name of the node>\n
Run Code Online (Sandbox Code Playgroud)\n\n
kubectl apply -f pv.yaml\n
Run Code Online (Sandbox Code Playgroud)\n\n

之后我运行了 Helm Chart:

\n\n
helm install stable/elasticsearch --name my-release --set data.persistence.storageClass=ssd,data.storage=30Gi --set data.persistence.storageClass=ssd,master.storage=30Gi\n
Run Code Online (Sandbox Code Playgroud)\n\n

PVC终于被束缚了。

\n\n
$ kubectl get pvc -A\nNAMESPACE   NAME                                     STATUS    VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS   AGE\ndefault     data-my-release-elasticsearch-data-0     Bound     task-pv-volume2   30Gi       RWO            ssd            17m\ndefault     data-my-release-elasticsearch-master-0   Pending                                                              17m\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,我仅手动满足单个 PVC 的需求,ElasticSearch 手动卷配置可能非常低效。

\n\n

我建议联系 DO 支持以获取自动卷配置解决方案。

\n