为什么Prometheus pod在Rancher服务器上的Kubernetes集群中通过helm设置后挂起?

时间:2017-11-11 06:18:56

标签: vagrant kubernetes prometheus rancher kubernetes-helm

在Vagrant中安装了Rancher服务器和2个Rancher代理。然后从Rancher服务器切换到K8S环境。

在Rancher服务器主机上,已安装kubectlhelm。然后按Prometheus安装了Helm

helm install stable/prometheus

现在从Kubernetes仪表板检查状态,有2个待处理的pod: enter image description here

它注意到PersistentVolumeClaim is not bound,所以K8S组件是否默认安装了Rancher服务器?

(另一个名字,同一个问题) enter image description here

修改

> kubectl get pvc
NAME                                   STATUS    VOLUME    CAPACITY   
ACCESSMODES   STORAGECLASS   AGE
voting-prawn-prometheus-alertmanager   Pending                                                     6h
voting-prawn-prometheus-server         Pending                                                     6h
> kubectl get pv
No resources found.

编辑2

$ kubectl describe pvc voting-prawn-prometheus-alertmanager
Name:          voting-prawn-prometheus-alertmanager
Namespace:     default
StorageClass:
Status:        Pending
Volume:
Labels:        app=prometheus
               chart=prometheus-4.6.9
               component=alertmanager
               heritage=Tiller
               release=voting-prawn
Annotations:   <none>
Capacity:
Access Modes:
Events:
  Type    Reason         Age                From                         Message
  ----    ------         ----               ----                         -------
  Normal  FailedBinding  12s (x10 over 2m)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set

$ kubectl describe pvc voting-prawn-prometheus-server
Name:          voting-prawn-prometheus-server
Namespace:     default
StorageClass:
Status:        Pending
Volume:
Labels:        app=prometheus
               chart=prometheus-4.6.9
               component=server
               heritage=Tiller
               release=voting-prawn
Annotations:   <none>
Capacity:
Access Modes:
Events:
  Type    Reason         Age                From                         Message
  ----    ------         ----               ----                         -------
  Normal  FailedBinding  12s (x14 over 3m)  persistentvolume-controller  no persistent volumes available for this claim and no storage class is set

3 个答案:

答案 0 :(得分:0)

我有两个方法可以解决这个问题:

  • 在persistentVolumes.enabled = false下编辑values.yaml这将允许您使用emptyDir“这适用于Prometheus-Server和AlertManager”

  • 如果您无法更改values.yaml,则必须在部署图表之前创建PV,以便pod可以绑定到卷,否则它将永远保持挂起状态

希望这会有所帮助

答案 1 :(得分:0)

PV是群集作用域,PVC是命名空间作用域。 如果您的应用程序在其他名称空间中运行,而PVC在其他名称空间中运行,则可能会出现问题。 如果是,请使用RBAC授予适当的权限,或将应用程序和PVC放在相同的名称空间中。

您可以确保从Storage类创建的PV是群集的默认SC吗?

答案 2 :(得分:0)

我发现我缺少存储类和存储卷。首先创建一个存储类,解决了群集中的类似问题。

kubectl apply -f storageclass.ymal 

storageclass.ymal:
    {
      "kind": "StorageClass",
      "apiVersion": "storage.k8s.io/v1",
      "metadata": {
        "name": "local-storage",
        "annotations": {
          "storageclass.kubernetes.io/is-default-class": "true"
        }
      },
      "provisioner": "kubernetes.io/no-provisioner",
      "reclaimPolicy": "Delete"

以及在安装带有头盔的Prometheus时使用的存储类

helm install stable/prometheus --set server.storageClass=local-storage

而且我还被迫为Prometheus创建一个要绑定到的卷

kubectl apply -f prometheusVolume.yaml

prometheusVolume.yaml:    
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: prometheus-volume
    spec:
      storageClassName: local-storage
      capacity:
        storage: 2Gi #Size of the volume
      accessModes:
        - ReadWriteOnce #type of access
      hostPath:
        path: "/mnt/data" #host location

您可以使用其他存储类,发现在它们之间有很多选择,但是可能还需要其他步骤才能使其工作。