[英]Digital Ocean managed Kubernetes volume in pending state
它不是特定于数字海洋的,如果这是否是预期的行为,将会非常好。
我正在尝试在 DO 管理的 Kubernetes 集群上设置 ElasticSearch 集群,并使用 ElasticSearch 本身的舵图
他们说我需要在volumeClaimTemplate
storageClassName
使用托管 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
我正在使用 terraform 设置 Helm 图表,但无论如何都没关系,您将采用哪种方式:
resource "helm_release" "elasticsearch" {
name = "elasticsearch"
chart = "elastic/elasticsearch"
namespace = "elasticsearch"
values = [
file("charts/elasticsearch.yaml")
]
}
这是我在检查 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
我很确定问题出在音量上。 它应该由 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
我已经用谷歌搜索了所有内容,似乎一切都是正确的,并且音量应该在 DO 方面没有问题,但它挂在待处理的 state 中。 这是预期的行为还是我应该要求 DO 支持人员检查他们的情况?
是的,这是预期的行为。 此图表可能与 Digital Ocean Kubernetes 服务不兼容。
Digital Ocean文档在已知问题部分包含以下信息:
Kubernetes 中对调整 DigitalOcean 块存储卷大小的支持尚未实现。
在 DigitalOcean 控制面板中,集群资源(工作节点、负载平衡器和块存储卷)列在 Kubernetes 页面之外。 如果您在控制面板中重命名或以其他方式修改这些资源,您可能会使它们对集群不可用或导致协调器提供替换资源。 为避免这种情况,请使用
kubectl
或从控制面板的 Kubernetes 页面专门管理您的集群资源。
在chart/stable/elasticsearch中提到了具体要求:
先决条件详细信息
- Kubernetes 1.10+
- 对底层基础设施的 PV 动态配置支持
您可以向 Digital Ocean 支持寻求帮助或尝试在没有 helm chart 的情况下部署 ElasticSearch。
github上甚至提到:
此图表的自动化测试目前仅针对 GKE(Google Kubernetes 引擎)运行。
更新:
我的 kubeadm ha 集群上也存在同样的问题。
但是,我设法通过为我的storageclass
手动创建PersistentVolumes
来使其正常工作。
我的存储类定义: storageclass.yaml
:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: ssd
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
parameters:
type: pd-ssd
$ kubectl apply -f storageclass.yaml
$ kubectl get sc
NAME PROVISIONER AGE
ssd local 50m
我的 PersistentVolume 定义: pv.yaml
:
apiVersion: v1
kind: PersistentVolume
metadata:
name: task-pv-volume
labels:
type: local
spec:
storageClassName: ssd
capacity:
storage: 30Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- <name of the node>
kubectl apply -f pv.yaml
之后我运行了舵图:
helm install stable/elasticsearch --name my-release --set data.persistence.storageClass=ssd,data.storage=30Gi --set data.persistence.storageClass=ssd,master.storage=30Gi
PVC终于被绑定了。
$ kubectl get pvc -A
NAMESPACE NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
default data-my-release-elasticsearch-data-0 Bound task-pv-volume2 30Gi RWO ssd 17m
default data-my-release-elasticsearch-master-0 Pending 17m
请注意,我仅手动满足单个 pvc 和 ElasticSearch 手动卷配置可能非常低效。
我建议联系 DO 支持以获取自动卷配置解决方案。
多么奇怪的情况,在我将10Gi
更改为10G
后它开始工作。 也许它必须与存储 class 它本身有关,但它开始起作用了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.