请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

烦请刘老师帮忙排查Helm+Operator部署Prometheus监控系统时候的问题

刘老师,你好:

你的K8s的视频录制的非常好,这段时间一直在跟着视频学习,收益匪浅。

这几天在学习通过Helm+Operator部署Prometheus监控系统的时候,一直无法搭建成功,
我检查了很久都没有找到问题,在describe 无法创建的pod时候发现有如下etcd-certs的相关错误:

kubectl -n monitoring describe pod prometheus-imooc-prom-prometheus-oper-prometheus-0
Warning FailedMount 17m (x3653 over 5d18h) kubelet, k8node353 Unable to mount volumes for pod “prometheus-imooc-prom-prometheus-oper-prometheus-0_monitoring(afc8066e-9335-11e9-a3ed-000c296cc6b7)”: timeout expired waiting for volumes to attach or mount for pod “monitoring”/“prometheus-imooc-prom-prometheus-oper-prometheus-0”. list of unmounted volumes=[secret-etcd-certs]. list of unattached volumes=[config config-out prometheus-imooc-prom-prometheus-oper-prometheus-rulefiles-0 secret-etcd-certs prometheus-imooc-prom-prometheus-oper-prometheus-db imooc-prom-prometheus-oper-prometheus-token-pl7r8]
Warning FailedMount 112s (x4086 over 5d18h) kubelet, k8node353 MountVolume.SetUp failed for volume “secret-etcd-certs” : secret “etcd-certs” not found

pod的状态:
里面有2个一直无法创建:,其他的ds ,svc ,deployment都正常。statefulset不正常,估计应该是下面2个pod导致的。
[root@k8madmin prometheus-operator]# kubectl get pod -n monitoring
NAME READY STATUS RESTARTS AGE
alertmanager-imooc-prom-prometheus-oper-alertmanager-0 1/2 CrashLoopBackOff 1688 6d
imooc-prom-grafana-749bb8799c-lrmr6 2/2 Running 0 6d
imooc-prom-kube-state-metrics-fd68f88dc-tw4vk 1/1 Running 0 6d
imooc-prom-prometheus-node-exporter-km7l5 1/1 Running 0 6d
imooc-prom-prometheus-node-exporter-s7l8z 1/1 Running 0 6d
imooc-prom-prometheus-node-exporter-w4cjn 1/1 Running 0 6d
imooc-prom-prometheus-oper-operator-545dc8949b-4j5pf 1/1 Running 0 6d
prometheus-imooc-prom-prometheus-oper-prometheus-0 0/3 ContainerCreating 0 6d

我的练习环境是v1.13.3:
通过kubeadm方式部署:

[root@k8madmin prometheus-operator]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8madmin Ready master 16d v1.13.3
k8node252 Ready 16d v1.13.3
k8node353 Ready 16d v1.13.3

后来我在网上看到有人说和etcd的证书有关,我就回头找helm init时候指定的ssl证书问题,
helm init时候指定配置:
我也创建了ssl文件夹但是没有生成下面图片所标注的**.pem** 证书,是否这个证书需要自己事先创建好,如果是? 请问如何创建?谢谢!

图片描述

同时,我也尝试去创建example-etcd-cluster.yaml,但是也没有成功,不知道是否需要创建?
kubectl apply -f example-etcd-cluster.yaml
error: unable to recognize “example-etcd-cluster.yaml”: no matches for kind “EtcdCluster” in version “etcd.database.coreos.com/v1beta2

[root@k8madmin prometheus-operator]# cat example-etcd-cluster.yaml
apiVersion: "etcd.database.coreos.com/v1beta2"
kind: "EtcdCluster"
metadata:
name: "example-etcd-cluster"
spec:
size: 3
version: "3.2.13"

如果有描述不清楚的地方请告诉我,烦请有空的时候帮忙排查一下这个问题,谢谢!

正在回答

1回答

问题提的非常详细,看的很明白,遗憾的是我也没碰到过类似的问题,只能给你个我碰到这种问题的思路了,因为你是用kubeadm装的,etcd也是跑在容器里的,相当于是集群内,所以pro operator就把它也容纳进来了,然后它访问etcd是需要证书的,这个错误应该就是没有找到证书,具体可以查看ds的详情,看看挂载的部分来确认,如果它需要一个secret或是configmap,而集群中没有的话就是要手动创建了,就是把证书文件base64后放在里面,这块之前的课程都有涉及。也可以修改它的配置把证书的依赖去掉试一下

0 回复 有任何疑惑可以回复我~
  • 提问者 davidge #1
    刘老师,非常感谢你的回复。我刚才再次检查了ds的详情,看起来都正常的,现在只是pod和statefulset 2个地方有问题。
    ds详情如下,请帮忙查看:
    [root@k8madmin michael]# kubectl --namespace monitoring get ds
    NAME                                  DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
    imooc-prom-prometheus-node-exporter   3         3         3       3            3           <none>          14m
    
    ---
     kubectl --namespace monitoring describe ds
    ....
      Volumes:
       proc:
        Type:          HostPath (bare host directory volume)
        Path:          /proc
        HostPathType:  
       sys:
        Type:          HostPath (bare host directory volume)
        Path:          /sys
        HostPathType:  
    Events:
      Type    Reason            Age   From                  Message
      ----    ------            ----  ----                  -------
      Normal  SuccessfulCreate  17m   daemonset-controller  Created pod: imooc-prom-prometheus-node-exporter-4f524
      Normal  SuccessfulCreate  17m   daemonset-controller  Created pod: imooc-prom-prometheus-node-exporter-sf96x
      Normal  SuccessfulCreate  17m   daemonset-controller  Created pod: imooc-prom-prometheus-node-exporter-96v5l
    回复 有任何疑惑可以回复我~ 2019-06-27 09:02:23
  • 提问者 davidge #2
    另外请问刘老师,helm init里面指定的证书文件是否需要手动提前创建?如: tiller001.pem,tiller001-key.pem,ca.pem。
    ---# helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.13.1 --tiller-tls-cert /etc/kubernetes/ssl/tiller001.pem --tiller-tls-key /etc/kubernetes/ssl/tiller001-key.pem --tls-ca-cert /etc/kubernetes/ssl/ca.pem --tiller-namespace kube-system --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
    回复 有任何疑惑可以回复我~ 2019-06-27 09:07:23
  • 刘果国 回复 提问者 davidge #3
    首先要抛开helm,helm只是一个工具,这个问题肯定跟他没关系。然后你可能没理解我的意思,我说的详情意思是kubectl get deploy xxx -o yaml。看看它的定义,volume这块是怎么搞的。然后顺着它的定义去查问题。
    还有一个思路是用helm template这个命令,把所有东西生成一个完整的yaml文件,在里面看相关的定义
    回复 有任何疑惑可以回复我~ 2019-06-27 17:47:47
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号