部署 ELK pod 处于 pending 状态
在部署 statefulset 类型的工作负载时,动态创建 PV/PVC 是一种比较常用的配置方式,动态创建 PV/PVC 的方法基本如下:
- 1、创建自己的 StorageClass 备用。
- 2、创建 statefulset ,在 yaml 文件的
volumeClaimTemplates
块,添加 StorageClass 的名字。
在部署Elasticsearch时,一直启动不起来
一直启动不起来,信息如下:
- 1、Elasticsearch POD 一直处于 pending 状态;
- 2、PVC一直无法绑定
- 3、nfs-provisioner正常运行
- 4、storageclass正常运行
nfs-provisioner日志
1 | E1025 02:16:44.073064 1 controller.go:766] Unexpected error getting claim reference to claim "kube-logging/data-es-cluster-0": selfLink was empty, can't make reference |
主要原因是,官方在 k8s 1.20 中基于对性能和统一apiserver
调用方式的初衷,移除了对 SelfLink 的支持,而 nfs-provisioner 需要 SelfLink 该项功能。
解决方案
1、
修改 apiserver 的配置文件,重新启用 SelfLink 功能。针对 K8S,可添加如下配置:
1 | # /etc/kubernetes/manifests/kube-apiserver.yaml |
这一步之后可能 kubelet 会停掉,执行kubectl 会报错
- The connection to the server 192.168.1.11:6443 was refused - did you specify the right host or port?
只需要先重启docker 再重启kubelet
1 | systemctl restart docker |
2、
使用新的不基于 SelfLink 功能的 provisioner 镜像,重新创建 provisioner 容器。
若你能科学上网,可使用这个镜像:
1 | gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0 |
国内可使用这个镜像:
1 | registry.cn-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ૮(˶ᵔ ᵕ ᵔ˶)ა!