• 马以
    2022-09-06 来自北京
    操作中遇到的问题以及解决办法 1: metris-server如果出现执行命令 kubectl top 不生效可以加如下配置 apiVersion: apps/v1 kind: Deployment metadata: ... template: .... spec: nodeName: k8s-master #你自己的节点名称 2: prometheus 镜像问题 这里我偷懒,不用骑驴找驴了,直接用老师的 这里我建议您push到docker hub (因为集群有多个节点,push到docker hub上,这样pod调度到任意一个节点都可以方便下载) docker pull chronolaw/kube-state-metrics:v2.5.0 docker tag chronolaw/kube-state-metrics:v2.5.0 k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.5.0 docker rmi chronolaw/kube-state-metrics:v2.5.0 docker push k8s.gcr.io/kube-state-metrics/kube-state-metrics:v2.5.0 prometheus-adapter 老师的版本运行不起来,我在docker hub上 找了一个可以用的 docker pull pengyc2019/prometheus-adapter:v0.9.1 docker tag pengyc2019/prometheus-adapter:v0.9.1 k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1 docker rmi pengyc2019/prometheus-adapter:v0.9.1 docker push k8s.gcr.io/prometheus-adapter/prometheus-adapter:v0.9.1 然后执行: kubectl create -f manifests/setup kubectl create -f manifests 到此,运行成功
    展开

    作者回复: 感谢分享。 不知道为什么prometheus-adapter:v0.9.1有问题,可能我上传的是arm64版本的,有空再检查一下。 下载看了看,sha256是一样的,不知道哪里有问题。

    共 8 条评论
    11
  • 邵涵
    2022-11-01 来自上海
    在使用hpa做自动扩容/缩容时,遇到了只扩容不缩容的问题,具体情况如下: 1. 按文中的步骤,使用ab加压,可以看到pod增加到了10个 [shaohan@k8s4 ~]$ kubectl get hpa ngx-hpa -w NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE ngx-hpa Deployment/ngx-hpa-dep 150%/5% 2 10 2 90s ngx-hpa Deployment/ngx-hpa-dep 129%/5% 2 10 4 105s ngx-hpa Deployment/ngx-hpa-dep 93%/5% 2 10 8 2m ngx-hpa Deployment/ngx-hpa-dep 57%/5% 2 10 10 2m15s 2. 在ab停止运行之后过了几分钟,kubectl get hpa ngx-hpa -w的输出中才出现了一行新数据,如下 ngx-hpa Deployment/ngx-hpa-dep 0%/5% 2 10 10 7m31s 仍然是10个pod,并没有自动缩容 3. 查看pod [shaohan@k8s4 ~]$ kubectl get pod NAME READY STATUS RESTARTS AGE ngx-hpa-dep-86f66c75f5-d82rh 0/1 Pending 0 63s ngx-hpa-dep-86f66c75f5-dtc88 0/1 Pending 0 63s (其他ngx-hpa-dep-xxx省略,因为评论字数限制……) test 1/1 Running 1 (6s ago) 2m5s 可以看到,有两个pod是pending状态的,kubectl describe这两个pending pod中的一个,可以看到 Warning FailedScheduling 18s (x2 over 85s) default-scheduler 0/2 nodes are available: 1 Insufficient cpu, 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate. 是因为worker节点资源不足,master节点没有开放给pod调度,造成扩容时有两个pod虽然创建了,但一直在等待资源而没有进入running状态 4. 手动删除了用于执行ab的apache pod,释放资源,然后立刻查看pod,就只有两个了 kubectl get hpa ngx-hpa -w的输出中也出现了一行新数据 ngx-hpa Deployment/ngx-hpa-dep 0%/5% 2 10 2 7m46s 自动缩容成功执行了 所以,看起来,hpa是“严格按顺序执行的”,它按照规则设定的条件,要扩容到10个pod,在10个pod全都running之前,即使已经符合缩容的条件了,它也不执行缩容,而是要等到之前扩容的操作彻底完成,也就是10个pod全都running了,才会执行缩容
    展开

    作者回复: great!

    
    6
  • peter
    2022-08-31 来自北京
    请教老师几个问题: Q1:Grafana 不是Prometheus的组件吧 架构图中标红色的是属于Prometheus,在UI方面,架构图中的”prometheus web ui”应该是Prometheus的组件吧。Grafana好像是一个公共组件,不是Prometheus独有的。 Q2: Prometheus部署后有四个POD的状态不是RUNNING blackbox-exporter-746c64fd88-ts299:状态是ImagePullBackOff prometheus-adapter-8547d6666f-6npn6:状态是CrashLoopBackOff, 错误信息: sc = Get "https://registry-1.docker.io/v2/jimmidyson/configmap-reload/manifests/sha256:91467ba755a0c41199a63fe80a2c321c06edc4d3affb4f0ab6b3d20a49ed88d1": net/http: TLS handshake timeout 好像和TLS有关,需要和Metrics Server一样加“kubelet-insecure-tls”吗?在哪个YAML文件中修改? Q3:Prometheus部署的逆向操作是什么? 用这两个命令来部署: kubectl create -f manifests/setup kubectl create -f manifests 部署后,如果想重新部署,需要清理环境,那么,怎么清理掉以前部署的东西? 和kubectl create -f manifests/setup相反的操作是“kubectl delete -f manifests/setup”吗?
    展开

    作者回复: 1. 是的。Grafana是独立的项目,图省事就和Prometheus在一起说了,可能造成了误解,抱歉。 2.镜像拉取失败和tls没关系,可以自己用docker pull命令再尝试一下。 3.create 换成delete,先是manifests,然后是setup,你的理解正确。

    
    6
  • ningfei
    2022-09-02 来自上海
    prometheus-adapter里使用这个willdockerhub/prometheus-adapter:v0.9.1镜像,可以启动成功

    作者回复: good

    
    3
  • XXG
    2022-11-30 来自上海
    metrics-server-85bc76798b-hr56n 0/1 ImagePullBackOff 原因: <1> 注意metrics-server版本,我拉下来的yml文件版本变成了v0.6.2,所以要根据最新的components.yaml文件中的metrics-server版本对应改一下老师的脚本; <2> 注意要在Worker节点执行脚本,我就在master节点上执行了好几遍。。。

    作者回复: good,多实践,集群管理和本机管理的差距较大,很多时候会弄混。

    
    2
  • dao
    2022-10-02 来自北京
    简单的回答一下思考题, 1,会根据设置进行扩容(scale out),但是如果不满足 HPA 的指标条件,接着会立即进行缩容(scale in),下面是我的操作观察到的日志 --- Normal SuccessfulCreate 3s replicaset-controller Created pod: ngx-hpa-dep-86f66c75f5-z2gjk Normal SuccessfulCreate 3s replicaset-controller Created pod: ngx-hpa-dep-86f66c75f5-p46lr Normal SuccessfulDelete 3s replicaset-controller Deleted pod: ngx-hpa-dep-86f66c75f5-z2gjk Normal SuccessfulDelete 3s replicaset-controller Deleted pod: ngx-hpa-dep-86f66c75f5-p46lr --- 2,我现有的经验很有限,主要集中在单机/集群机器指标的监控,以及对于应用及产品的监控(通过监控日志实现的),同时结合一些告警系统(alert),以便快速发现故障及解决。 关注的指标有 CPU、内存、网卡、磁盘读写,应用的性能监控和错误率(可用性)监控。性能监控指标主要是响应时间(RT)、各种吞吐量(比如QPS)等。错误率指标主要是指应用错误及异常、HTTP错误响应代码等。
    展开

    作者回复: awesome!

    
    2
  • 放不下荣华富贵
    2022-09-01 来自上海
    自动扩容的话,通常生产环境常用的指标是什么呢? 文中采用cpu占用率,比如md5sum是非常偏向于cpu运算的工作,但扩容可能并不能达到预期的效果(工作占满了一个核但是再多一个核却不能分摊这个工作)。 所以看起来系统负载而非占用率应该是更好的扩容指标,不知道我这么理解是否正确?

    作者回复: 还可以基于其他的一些自定义指标,Kubernetes在这里提供了一个很好的可扩展的框架。

    
    2
  • 运维赵宏业
    2023-02-16 来自北京
    老师您好,请教下,多k8s集群的场景下,每个集群内都要部署一套kube-prometheus吗?感谢

    作者回复: 这个不是太确定,可能要对运维比较熟悉的同学来解答了,我理解应该是这样。

    
    1
  • Lorry
    2023-02-05 来自四川
    老师,有没有办法能够让k8s访问宿主机网络?物理机安装prometus+grafana比较麻烦,如果能够直接通过docker/k8s装好就方便很多;但是现在生产/测试环境都是物理机环境,所以想要反向通过k8s的应用监控宿主机所在网络的服务。 应该怎么配置呢?

    作者回复: 可以的,有个hostNetwork属性,查一下资料,我们的课程里也用过一次。

    
    1
  • dao
    2022-10-02 来自北京
    分享一下我的本课实践经验。当所有部署结束后,检查发现有 Pod 无法正常运行(也就是几个 Web UI 无法正常打开的) ```bash # 查看 Pod 状态,发现 prometheus-operator 无法正常启动 kubectl get pod -n monitoring NAME READY STATUS RESTARTS AGE blackbox-exporter-746c64fd88-wmnd5 3/3 Running 0 68s grafana-5fc7f9f55d-qqt77 1/1 Running 0 68s kube-state-metrics-6c8846558c-w66x9 3/3 Running 0 67s node-exporter-68l4p 2/2 Running 0 67s node-exporter-vs55z 2/2 Running 0 67s prometheus-adapter-6455646bdc-4lz5l 1/1 Running 0 66s prometheus-adapter-6455646bdc-gxbrl 1/1 Running 0 66s prometheus-operator-f59c8b954-btxtw 0/2 Pending 0 66s # 调查 Pod prometheus-operator kubectl describe pod prometheus-operator-f59c8b954-btxtw -n monitoring Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 82s default-scheduler 0/2 nodes are available: 1 Insufficient memory, 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate. Warning FailedScheduling 20s default-scheduler 0/2 nodes are available: 1 Insufficient memory, 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate. # 去除 node 的污点 node-role.kubernetes.io/master kubectl taint nodes --all node-role.kubernetes.io/master- ```
    展开

    作者回复: great!

    
    1