写点什么

容器 & 服务: 扩容(二)

发布于: 2021 年 04 月 26 日
容器 & 服务: 扩容(二)

系列文章:

容器 & 服务:开篇,压力与资源

容器 & 服务:一个 Java 应用的 Docker 构建实战

容器 & 服务:Docker 应用的 Jenkins 构建

容器 & 服务:Docker 应用的 Jenkins 构建 (二)

容器 & 服务:K8s 与 Docker 应用集群 (一)

容器 & 服务:K8s 与 Docker 应用集群 (二)

容器 & 服务:Kubernetes 构件及 Deployment 操作

容器 & 服务: ClickHouse 与 k8s 架构

容器 & 服务: 扩容


一 metrics-server 错误信息

在 helm 安装 metrics-server 后,可能还是会报错,以下以遇到的实例,分享问题分析和解决过程。

1.1 问题描述

container flamingskys$ kubectl top node

Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)


1.2 pod 信息

lijingyong:container flamingskys$ kubectl get pods -n kube-systemNAME                                     READY   STATUS             RESTARTS   AGEcoredns-f9fd979d6-4xqfp                  1/1     Running            3          27dcoredns-f9fd979d6-555sx                  1/1     Running            3          27detcd-docker-desktop                      1/1     Running            3          27dkube-apiserver-docker-desktop            1/1     Running            8          27dkube-controller-manager-docker-desktop   1/1     Running            3          27dkube-proxy-h26lk                         1/1     Running            3          27dkube-scheduler-docker-desktop            1/1     Running            19         27dmetrics-server-6bdfb6d589-x79mr          0/1     CrashLoopBackOff   385        40hstorage-provisioner                      1/1     Running            24         27dvpnkit-controller                        1/1     Running            3          27d
复制代码

很明显的问题,metrics-server-6bdfb6d589-x79mr 这个 pod 当前是 CrashLoopBackOff 状态,继续查看 pod 问题详情。

注:直接使用 kubectl describe pod metrics-server-6bdfb6d589-x79mr  是不行的,需要指明 namespace,否则会报找不到 pod 的错误:

1.3 pod 日志

kubectl describe pod -n kube-system metrics-server-6bdfb6d589-x79mr 
复制代码

输出内容如下:

Name:         metrics-server-6bdfb6d589-x79mrNamespace:    kube-systemPriority:     0Node:         docker-desktop/192.168.65.4Start Time:   Sat, 24 Apr 2021 23:24:03 +0800Labels:       app.kubernetes.io/instance=metrics-server              app.kubernetes.io/managed-by=Helm              app.kubernetes.io/name=metrics-server              helm.sh/chart=metrics-server-5.8.5              pod-template-hash=6bdfb6d589Annotations:  <none>Status:       RunningIP:           10.1.0.18IPs:  IP:           10.1.0.18Controlled By:  ReplicaSet/metrics-server-6bdfb6d589Containers:  metrics-server:    Container ID:  docker://bbfc367728248cf676f084eb526bec02b2a0dfb6e8c1e4d6dd463a85c111cdfe    Image:         docker.io/bitnami/metrics-server:0.4.3-debian-10-r0    Image ID:      docker-pullable://bitnami/metrics-server@sha256:48c75855698863a4968bd971b61c14fe84a4516e9ddf91373cf613c6862ed620    Port:          8443/TCP    Host Port:     0/TCP    Command:      metrics-server    Args:      --secure-port=8443    State:          Waiting      Reason:       CrashLoopBackOff    Last State:     Terminated      Reason:       Completed      Exit Code:    0      Started:      Mon, 26 Apr 2021 15:43:40 +0800      Finished:     Mon, 26 Apr 2021 15:44:09 +0800    Ready:          False    Restart Count:  389    Liveness:       http-get https://:https/livez delay=0s timeout=1s period=10s #success=1 #failure=3    Readiness:      http-get https://:https/readyz delay=0s timeout=1s period=10s #success=1 #failure=3    Environment:    <none>    Mounts:      /var/run/secrets/kubernetes.io/serviceaccount from metrics-server-token-78x8d (ro)Conditions:  Type              Status  Initialized       True   Ready             False   ContainersReady   False   PodScheduled      True Volumes:  metrics-server-token-78x8d:    Type:        Secret (a volume populated by a Secret)    SecretName:  metrics-server-token-78x8d    Optional:    falseQoS Class:       BestEffortNode-Selectors:  <none>Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300sEvents:  Type     Reason     Age                    From     Message  ----     ------     ----                   ----     -------  Normal   Pulled     44m (x374 over 29h)    kubelet  Container image "docker.io/bitnami/metrics-server:0.4.3-debian-10-r0" already present on machine  Warning  Unhealthy  19m (x1124 over 29h)   kubelet  Liveness probe failed: HTTP probe failed with statuscode: 500  Warning  BackOff    4m8s (x4698 over 29h)  kubelet  Back-off restarting failed container
复制代码

上面是我 pod 日志的完整内容,定位到最后,可以看到错误原因:

二 Liveness probe

2.1 k8s 的健康检查

Kubernetes 在每个 Node 节点上都有 kubelet ,Container Probe 也就是容器的健康检查是由 kubelet 定期执行的。

在创建 Pod 时,可以通过livenessreadiness两种方式来探测 Pod 内容器的运行情况。liveness可以用来检查容器内应用的存活的情况来,如果检查失败会杀掉容器进程,是否重启容器则取决于 Pod 的重启策略。readiness检查容器内的应用是否能够正常对外提供服务,如果探测失败,则 Endpoint Controller 会将这个 Pod 的 IP 从服务中删除。

2.2 Liveness probe failed

从 Events 的消息,可以确认是健康检查时报了 500 错误,但我们还需要更详细的信息。

但从整个 pod 日志中,看不到更多消息,所以只能另寻出路。

三 metrics-server

回到我们的最初目的,是为了安装 metrics-server。那么直接到它的 github:metrics-server。按照安装说明操作,在 git 的 Installation 部分。命令:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
复制代码

注意,在安装说明中有一个提示:

WARNING: You should no longer use manifests from master branch (previously available in deploy/kubernetes directory). They are now meant solely for development.


兼容性说明:

那么看来应该就是这里的问题了,我们修改上面 components.yaml 调整后即可。


发布于: 2021 年 04 月 26 日阅读数: 32
用户头像

磨炼中成长,痛苦中前行 2017.10.22 加入

微信公众号【程序员架构进阶】。多年项目实践,架构设计经验。曲折中向前,分享经验和教训

评论

发布
暂无评论
容器 & 服务: 扩容(二)