使用 elasticsearch helm chart 的 Kubernetes 裸机 NFS PV 错误
Kubernetes bare metal NFS PVs error with elasticsearch helm chart
我在 Ubuntu 18.04 LTS 上使用 conjure-up kubernetes
在裸机专用服务器上部署了 Kubernetes。这也意味着节点是 LXD 容器。
我需要 Elasticsearch 和 MongoDB 的持久卷,经过一些研究,我决定让它在我的部署中工作的最简单方法是 NFS 共享。
我在主机 OS 中创建了一个 NFS 共享,配置如下:
/srv/volumes 127.0.0.1(rw) 10.78.69.*(rw,no_root_squash)
10.78.69.*
貌似是Kubernetes使用的bridge网络,至少看ifconfig没有别的。
然后我开始创建两个文件夹,/srv/volumes/1 和 /srv/volumes/2
我从这些文件夹创建了两个 PV,第一个使用此配置(第二个类似):
apiVersion: v1
kind: PersistentVolume
metadata:
name: elastic-pv1
spec:
capacity:
storage: 30Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /srv/volumes/1
server: 10.78.69.1
然后我部署了 Elasticsearch helm chart (https://github.com/helm/charts/tree/master/incubator/elasticsearch),它创建了两个成功绑定到我的 PV 的声明。
问题是之后容器似乎遇到错误:
Error: failed to start container "sysctl": Error response from daemon: linux runtime spec devices: lstat /dev/.lxc/proc/17848/fdinfo/24: no such file or directory
Back-off restarting failed container
Pods view
Persistent Volume Claims view
我有点卡在这里了。我已尝试搜索错误,但未能找到解决此问题的方法。
之前,在我将 /etc/exports
中允许的 IP 设置为 10.78.69.*
之前,Kubernetes 会告诉我它在尝试挂载时从 NFS 服务器获得了 "permission denied",所以我假设现在正在挂载成功,因为那个错误消失了。
编辑:
我决定清除 helm 部署并重试,这次使用不同的存储类型,本地存储卷。我按照 Canonical 的指南创建了它们,我知道它们可以工作,因为我以这种方式为 MongoDB 设置了一个并且它工作得很好。
elasticsearch helm 部署的配置已更改,因为现在我必须为创建持久卷的节点设置关联:
values.yaml
:
data:
replicas: 1,
nodeSelector:
elasticsearch: data
master:
replicas: 1,
nodeSelector:
elasticsearch: master
client:
replicas: 1,
cluster:
env: {MINIMUM_MASTER_NODES: "1"}
我使用
部署
helm install --name site-search -f values.yaml incubator/elasticsearch
这些是唯一的变化,但是 elasticsearch 仍然存在相同的问题。
附加信息:
kubectl version
:
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T18:02:47Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T17:53:03Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
elasticsearch 镜像是 helm chart 中的默认镜像:
docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.1
各种pods'(主、客户端、数据)日志是空的。
错误是一样的。
这似乎是一个常见问题,在各种环境和配置中都可以观察到。然而,目前尚不清楚究竟是什么原因造成的。您能否提供有关您的软件版本、日志片段等的更多详细信息?
我自己在主机上 运行 sysctl -w vm.max_map_count=262144
解决了这个问题,并删除了试图执行此操作但未成功的 "sysctl" 初始化容器。
我在 Ubuntu 18.04 LTS 上使用 conjure-up kubernetes
在裸机专用服务器上部署了 Kubernetes。这也意味着节点是 LXD 容器。
我需要 Elasticsearch 和 MongoDB 的持久卷,经过一些研究,我决定让它在我的部署中工作的最简单方法是 NFS 共享。 我在主机 OS 中创建了一个 NFS 共享,配置如下:
/srv/volumes 127.0.0.1(rw) 10.78.69.*(rw,no_root_squash)
10.78.69.*
貌似是Kubernetes使用的bridge网络,至少看ifconfig没有别的。
然后我开始创建两个文件夹,/srv/volumes/1 和 /srv/volumes/2 我从这些文件夹创建了两个 PV,第一个使用此配置(第二个类似):
apiVersion: v1
kind: PersistentVolume
metadata:
name: elastic-pv1
spec:
capacity:
storage: 30Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /srv/volumes/1
server: 10.78.69.1
然后我部署了 Elasticsearch helm chart (https://github.com/helm/charts/tree/master/incubator/elasticsearch),它创建了两个成功绑定到我的 PV 的声明。
问题是之后容器似乎遇到错误:
Error: failed to start container "sysctl": Error response from daemon: linux runtime spec devices: lstat /dev/.lxc/proc/17848/fdinfo/24: no such file or directory Back-off restarting failed container
Pods view
Persistent Volume Claims view
我有点卡在这里了。我已尝试搜索错误,但未能找到解决此问题的方法。
之前,在我将 /etc/exports
中允许的 IP 设置为 10.78.69.*
之前,Kubernetes 会告诉我它在尝试挂载时从 NFS 服务器获得了 "permission denied",所以我假设现在正在挂载成功,因为那个错误消失了。
编辑:
我决定清除 helm 部署并重试,这次使用不同的存储类型,本地存储卷。我按照 Canonical 的指南创建了它们,我知道它们可以工作,因为我以这种方式为 MongoDB 设置了一个并且它工作得很好。
elasticsearch helm 部署的配置已更改,因为现在我必须为创建持久卷的节点设置关联:
values.yaml
:
data:
replicas: 1,
nodeSelector:
elasticsearch: data
master:
replicas: 1,
nodeSelector:
elasticsearch: master
client:
replicas: 1,
cluster:
env: {MINIMUM_MASTER_NODES: "1"}
我使用
部署helm install --name site-search -f values.yaml incubator/elasticsearch
这些是唯一的变化,但是 elasticsearch 仍然存在相同的问题。
附加信息:
kubectl version
:
Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T18:02:47Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.3", GitCommit:"a4529464e4629c21224b3d52edfe0ea91b072862", GitTreeState:"clean", BuildDate:"2018-09-09T17:53:03Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
elasticsearch 镜像是 helm chart 中的默认镜像:
docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.1
各种pods'(主、客户端、数据)日志是空的。 错误是一样的。
这似乎是一个常见问题,在各种环境和配置中都可以观察到。然而,目前尚不清楚究竟是什么原因造成的。您能否提供有关您的软件版本、日志片段等的更多详细信息?
我自己在主机上 运行 sysctl -w vm.max_map_count=262144
解决了这个问题,并删除了试图执行此操作但未成功的 "sysctl" 初始化容器。