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 支持人员检查他们这边发生了什么?
是的,这是预期的行为。此图表可能与 Digital Ocean Kubernetes 服务不兼容。
\n\nDigital Ocean文档的“已知问题”部分包含以下信息:
\n\n\n\n\n\n
\n- \n
对 Kubernetes 中调整 DigitalOcean 块存储卷大小的支持尚未实现。
- \n
在 DigitalOcean 控制面板中,集群资源(工作节点、负载均衡器和块存储卷)列在 Kubernetes 页面之外。如果您在控制面板中重命名或以其他方式修改这些资源,则可能会导致它们对集群无法使用,或者导致协调器配置替换资源。
kubectl
为了避免这种情况,请仅使用控制面板\xe2\x80\x99s Kubernetes 页面来管理集群资源 。
在charts/stable/elasticsearch中提到了具体要求:
\n\n\n\n\n先决条件详细信息
\n\n\n
\n- 库伯内特斯 1.10+
\n- 对底层基础设施的光伏动态配置支持
\n
您可以向 Digital Ocean 支持寻求帮助,或者尝试在没有 Helm Chart 的情况下部署 ElasticSearch。
\n\ngithub上甚至提到:
\n\n\n\n\n该图表的自动化测试目前仅针对 GKE(Google Kubernetes Engine)运行。
\n
更新:
\n\n我的 kubeadm ha 集群上也存在同样的问题。
\n\n不过,我设法通过手动PersistentVolumes
为我的storageclass
.
我的存储类定义storageclass.yaml
::
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
::
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\nkubectl apply -f pv.yaml\n
Run Code Online (Sandbox Code Playgroud)\n\n之后我运行了 Helm Chart:
\n\nhelm 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\nPVC终于被束缚了。
\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 归档时间: |
|
查看次数: |
2445 次 |
最近记录: |