目录

部分常见问题处理

  • Coredns CrashLoopBackOff 导致无法成功添加工作节点的问题

  • 添加工作节点时提示token过期

  • kubectl 执行命令报“The connection to the server localhost:8080 was refused”

  • 网络组件flannel无法完成初始化

  • 部分节点无法启动pod

最后


部分常见问题处理

结合我们上篇文章(链接:集群故障处理之处理思路以及听诊三板斧(三十三)的处理思路和手段,接下来我们就进行一些实践讲解。


Coredns CrashLoopBackOff 导致无法成功添加工作节点的问题

k8s集群安装完成之后,当我们添加工作节点时,可能会在长久的等待之中而无任何进展,这时可以使用以下命令来查看k8s各个服务的状态:

kubectl get pods -n kube-system -o wide

初步诊断容器崩溃,我们需要进一步查看日志,使用“kubectl logs”:

kubectl log -f coredns-5c98db65d4-8wt9z -n kube-system

这次我们获得了以下具体错误:

github.com/coredns/coredns/plugin/kubernetes/controller.go:: Failed to list *v1.Namespace: Get https://10.96.0.1:443/api/v1/namespaces?limit=500&resourceVersion=0: dial tcp 10.96.0.1:443: connect: no route to host

解决方案:

这问题很有可能是防火墙(iptables)规则错乱或者缓存导致的,可以依次执行以下命令进行解决:

systemctl stop kubelet
systemctl stop docker
iptables --flush
iptables -tnat --flush
systemctl start kubelet
systemctl start docker

添加工作节点时提示token过期

集群注册token的有效时间为24小时,如果集群创建完成后没有及时添加工作节点,那么我们需要重新生成token。相关命令如下所示:

#生成token
kubeadm token generate
#根据token输出添加命令
kubeadm token create <token> --print-join-command --ttl=

然后仅需复制打印出来的命令到工作节点执行即可。

kubectl 执行命令报“The connection to the server localhost:8080 was refused”

作为集群管理的核心,工作节点上的kubectl可能一上来就跪了,如下图所示:

出现这个问题的原因是kubectl命令需要使用kubernetes-admin的身份来运行,在“kubeadm int”启动集群的步骤中就生成了“/etc/kubernetes/admin.conf”。

因此,解决方法如下,将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工作节点相同目录下:

#复制admin.conf,请在主节点服务器上执行此命令
scp /etc/kubernetes/admin.conf 172.16.2.202:/etc/kubernetes/admin.conf
scp /etc/kubernetes/admin.conf 172.16.2.203:/etc/kubernetes/admin.conf

然后分别在工作节点上配置环境变量:

#设置kubeconfig文件
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

接下来,工作节点就正常了,如:

网络组件flannel无法完成初始化

网络组件flannel安装完成后,通过命令查看时一直在初始化状态,并且通过日志输出内容如下所示:

kubectl get pods -n kube-system -o wide
kubectl logs -f kube-flannel-ds-amd64-hl89n -n kube-system

具体错误日志为:

Error from server: Get https://172.16.2.203:10250/containerLogs/kube-system/kube-flannel-ds-amd64-hl89n/kube-flannel?follow=true: dial tcp 172.16.2.203:10250: connect: no route to host

这时,我们可以登录节点所在的服务器,使用以下命令来查看目标节点上的kubelet日志:

journalctl -u kubelet -f

注意:journalctl工具可以查看所有日志,包括内核日志和应用日志。

通过日志,我们发现是镜像拉取的问题。对此,大家可以参考上文中镜像拉取的方式以及重命名镜像标签来解决此问题,当然也可以通过设置代理来解决此问题。

部分节点无法启动pod

有时候,我们部署了应用之后,发现在部分工作节点上pod无法启动(一直处于ContainerCreating的状态):

通过排查日志最终我们得到重要信息如下所示:

NetworkPlugin cni failed to set up pod "demo-deployment-675b5f9477-hdcwg_default" network: failed to set bridge addr: "cni0" already has an IP address different from 10.0.2.1/

这是由于当前节点之前被反复注册,导致flannel网络出现问题。可以依次执行以下脚本来重置节点并且删除flannel网络来解决:

kubeadm reset    #重置节点
systemctl stop kubelet && systemctl stop docker && rm -rf /var/lib/cni/ && rm -rf /var/lib/kubelet/* && rm -rf /var/lib/etcd && rm -rf /etc/cni/ && ifconfig cni0 down && ifconfig flannel.1 down && ifconfig docker0 down && ip link delete cni0 && ip link delete flannel.1
systemctl start docker

执行完成后,重新生成token并注册节点即可,具体可以参考上文内容。

最后

在k8s集群的部署过程中或者过后,大家可能会遇到很多问题。这也是本地部署k8s集群遇到的最大的挑战质疑,因此本篇笔者讲述了问题处理思路和常见错误,希望能够给予大家帮助。

如果通过详细异常和和日志还是无法推断出具体错误,建议大家可以根据具体信息在“https://stackoverflow.com”网站上进行搜索,也可以在相关社交网站(比如github)和群里请教,不过请教前,请给出你的诊断步骤和详细的错误日志。

往期内容链接

集群故障处理之处理思路以及健康状态检查(三十二)

集群故障处理之处理思路以及听诊三板斧(三十三)

k8s集群部分常见问题处理的更多相关文章

  1. 使用Kubeadm创建k8s集群之节点部署(三十一)

    前言 本篇部署教程将讲述k8s集群的节点(master和工作节点)部署,请先按照上一篇教程完成节点的准备.本篇教程中的操作全部使用脚本完成,并且对于某些情况(比如镜像拉取问题)还提供了多种解决方案.不 ...

  2. k8s集群问题记录

    k8s集群问题记录 k8s学习方案 问题解决思路 主要学习路径: rancher(k8s)->rke->helm->kubectl->k8s(k8s中文api) 常见问题总结: ...

  3. 基于 kubeadm 搭建高可用的kubernetes 1.18.2 (k8s)集群一 环境准备

    本k8s集群参考了 Michael 的 https://gitee.com/pa/kubernetes-ha-kubeadm-private 这个项目,再此表示感谢! Michael的项目k8s版本为 ...

  4. 强大多云混合多K8S集群管理平台Rancher入门实战

    @ 目录 概述 定义 为何使用 其他产品 安装 简述 规划 基础环境 Docker安装 Rancher安装 创建用户 创建集群 添加Node节点 配置kubectl 创建项目和名称空间 发布应用 偏好 ...

  5. China Azure中部署Kubernetes(K8S)集群

    目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...

  6. k8s集群Canal的网络控制 原

    1 简介 直接上干货 public class DispatcherServlet extends HttpServlet { private Properties contextConfigProp ...

  7. kubernetes系列03—kubeadm安装部署K8S集群

    本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...

  8. k8s重要概念及部署k8s集群(一)--技术流ken

    重要概念 1. cluster cluster是 计算.存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用. 2.master master是cluster的大脑,他的主要职责是调度,即决 ...

  9. K8S集群 NOT READY的解决办法 1.13 错误信息:cni config uninitialized

    今天给同事 一个k8s 集群 出现not ready了 花了 40min 才搞定 这里记录一下 避免下载 再遇到了 不清楚. 错误现象:untime network not ready: Networ ...

随机推荐

  1. kudu集群高可用搭建

    首先咱得有KUDU安装包 这里就不提供直接下载地址了(因为有5G,我 的服务器网卡只有4M,你们下的很慢) 这里使用的是CDH版本 官方下载地址http://archive.cloudera.com/ ...

  2. 100天搞定机器学习|Day9-12 支持向量机

    机器学习100天|Day1数据预处理 100天搞定机器学习|Day2简单线性回归分析 100天搞定机器学习|Day3多元线性回归 100天搞定机器学习|Day4-6 逻辑回归 100天搞定机器学习|D ...

  3. spring 注解验证@NotNull等使用方法

    @Null 被注释的元素必须为null@NotNull 被注释的元素不能为null@AssertTrue 被注释的元素必须为true@AssertFalse 被注释的元素必须为false@Min(va ...

  4. 自己动手,开发轻量级,高性能http服务器。

    前言 http协议是互联网上使用最广泛的通讯协议了.web通讯也是基于http协议:对应c#开发者来说,asp.net core是最新的开发web应用平台.由于最近要开发一套人脸识别系统,对通讯效率的 ...

  5. x32下PsSetLoadImageNotifyRoutine的逆向

    一丶简介 纯属兴趣爱好.特来逆向玩玩. PsSetLoadImageNotifyRoutine 是内核中用来监控模块加载.操作系统给我们提供的回调. 我们只需要填写对应的回调函数原型即可进行加监控. ...

  6. 有助于提高"锁"性能的几点建议

    有助于提高"锁"性能的几点建议 1.减少锁持有时间 public synchronized void syncMethod() { othercode1(); mutextMeth ...

  7. 【Laravel】 安装及常用的artisan命令

    composer Laravel 安装 cmd composer create-project laravel/laravel Laravel5 之后自动创建 常用的artisan命令 全局篇 查看a ...

  8. 分布式ID系列(3)——数据库自增ID机制适合做分布式ID吗

    数据库自增ID机制原理介绍 在分布式里面,数据库的自增ID机制的主要原理是:数据库自增ID和mysql数据库的replace_into()函数实现的.这里的replace数据库自增ID和mysql数据 ...

  9. c#链接数据库,查找数据信息

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  10. @Value注解 和 @Data注解

    @Value注解 service层代码 @Service public class HelloServiceImpl implements HelloService { @Autowired priv ...