k8s从节点加入主节点[preflight] Running pre-flight checks卡住(已解决)k8s常用问题解决

news2024/11/26 22:18:43

文章目录

  • 一、写在前面
  • 二、问题排查
    • 1、执行join时加上-v=2参数查看日志
    • 2、处理证书问题
    • 3、重启
    • 4、其他方法1
    • 5、其他方法2
  • 三、总结
  • 参考资料

一、写在前面

部署k8s时,主节点部署成功了,从节点1执行kubeadm join也成功了,从节点2执行kubeadm join一直卡在[preflight] Running pre-flight checks不动!

二、问题排查

网上查的资料,不管是时间同步,还是重新生成token都尝试了,结果还是不行。
kubeadm token list 查看token也并没有 过期。
kubeadm token create --ttl 0 --print-join-command 重新生成token也不行。
而且重新部署之后,还是不行。

# 0、删除node
kubectl get nodes
kubectl cordon w1 # 不可调度
kubectl drain w1 --ignore-daemonsets
kubectl delete node w1
# 1、重置
kubeadm reset
rm -rf /etc/kubernetes/*
rm -rf ~/.kube
# 2、重新init
# 3、重新执行init后的日志
# 4、重新部署calico网络插件
# 5、从节点重新加入

关键问题是,从节点1正常能加入集群,为什么从节点2无法加入集群???

1、执行join时加上-v=2参数查看日志

[root@w1 ~]# kubeadm join -v=2 192.168.56.100:6443 --token wvsok4.5kjxe1ts8kidll1b --discovery-token-ca-cert-hash sha256:e94113cc2b2fb1b9994c7e419c5f3b776493c7151377812672fe55163b3f97a5
I0703 09:09:38.169190    2029 join.go:367] [preflight] found NodeName empty; using OS hostname as NodeName
I0703 09:09:38.169794    2029 initconfiguration.go:105] detected and using CRI socket: /var/run/dockershim.sock
[preflight] Running pre-flight checks
I0703 09:09:38.169865    2029 preflight.go:90] [preflight] Running general checks
I0703 09:09:38.170055    2029 checks.go:254] validating the existence and emptiness of directory /etc/kubernetes/manifests
I0703 09:09:38.170069    2029 checks.go:292] validating the existence of file /etc/kubernetes/kubelet.conf
I0703 09:09:38.170078    2029 checks.go:292] validating the existence of file /etc/kubernetes/bootstrap-kubelet.conf
I0703 09:09:38.170085    2029 checks.go:105] validating the container runtime
I0703 09:09:38.221649    2029 checks.go:131] validating if the service is enabled and active
I0703 09:09:38.262731    2029 checks.go:341] validating the contents of file /proc/sys/net/bridge/bridge-nf-call-iptables
I0703 09:09:38.262898    2029 checks.go:341] validating the contents of file /proc/sys/net/ipv4/ip_forward
I0703 09:09:38.262920    2029 checks.go:653] validating whether swap is enabled or not
I0703 09:09:38.262941    2029 checks.go:382] validating the presence of executable ip
I0703 09:09:38.263176    2029 checks.go:382] validating the presence of executable iptables
I0703 09:09:38.263554    2029 checks.go:382] validating the presence of executable mount
I0703 09:09:38.263659    2029 checks.go:382] validating the presence of executable nsenter
I0703 09:09:38.263669    2029 checks.go:382] validating the presence of executable ebtables
I0703 09:09:38.263680    2029 checks.go:382] validating the presence of executable ethtool
I0703 09:09:38.263688    2029 checks.go:382] validating the presence of executable socat
I0703 09:09:38.263696    2029 checks.go:382] validating the presence of executable tc
I0703 09:09:38.263703    2029 checks.go:382] validating the presence of executable touch
I0703 09:09:38.263718    2029 checks.go:524] running all checks
I0703 09:09:38.275230    2029 checks.go:412] checking whether the given node name is reachable using net.LookupHost
I0703 09:09:38.275514    2029 checks.go:622] validating kubelet version
I0703 09:09:38.311281    2029 checks.go:131] validating if the service is enabled and active
I0703 09:09:38.316858    2029 checks.go:209] validating availability of port 10250
I0703 09:09:38.317624    2029 checks.go:292] validating the existence of file /etc/kubernetes/pki/ca.crt
I0703 09:09:38.317634    2029 checks.go:439] validating if the connectivity type is via proxy or direct
I0703 09:09:38.317653    2029 join.go:427] [preflight] Discovering cluster-info
I0703 09:09:38.317704    2029 token.go:200] [discovery] Trying to connect to API Server "192.168.56.100:6443"
I0703 09:09:38.318179    2029 token.go:75] [discovery] Created cluster-info discovery client, requesting info from "https://192.168.56.100:6443"
I0703 09:09:38.319099    2029 token.go:83] [discovery] Failed to request cluster info, will try again: [Get https://192.168.56.100:6443/api/v1/namespaces/kube-public/configmaps/cluster-info: dial tcp 192.168.56.100:6443: connect: protocol not available]

发现提示protocol not available,然后我们使用curl https://192.168.56.100:6443/api/v1/namespaces/kube-public/configmaps/cluster-info,发现也确实是提示protocol not available。

从主节点curl,发现有以下提示:

curl: (60) Peer's Certificate issuer is not recognized.
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

但是!我们使用浏览器访问这个网址,发现是https链接的证书出现了问题!

2、处理证书问题

搜了一大堆资料,大致参考了以下:
https://www.cnblogs.com/hkgov/p/14959992.html
https://blog.csdn.net/u012375924/article/details/108832392

(1)处理方式1
将这一串追加到/etc/pki/tls/certs/ca-bundle.crt文件
在这里插入图片描述
(2)处理方式2
随便下载一个有效的证书,将该文件上传到目录/etc/pki/ca-trust/source/anchors/下,将文件的后缀名改为.crt, 然后执行命令update-ca-trust extract

再次使用join命令,发现还是不行。

3、重启

再次将主节点重启之后,发现,join命令竟然可以使用了。。。。

# 查看日志
journalctl -u kubelet -f
# 重启k8(如果一直没ready的话)
systemctl restart kubelet && systemctl enable kubelet

4、其他方法1

https://blog.csdn.net/axin_123456/article/details/128961219

可能的原因: 之前错误操作,

systemctl stop NetworkManager--临时关闭

systemctl disable NetworkManager --永久关闭网络管理命令

又重新做了如下操作:

systemctl start NetworkManager

systemctl start network.service --开启网络服务

5、其他方法2

#安装utpdate工具
yum -y install utp ntpdate

timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海

#设置系统时间与网络时间同步
ntpdate cn.pool.ntp.org

#将系统时间写入硬件时间
hwclock --systohc

三、总结

就上面那几种方式……不知道哪一个生效了,最后都是重启主节点之后就好了。注意!只重启主节点即可,重启主节点+从节点仍然不好用。

不知道什么毛病……

要不是为了学习,才不会自己手贱装这玩意。。。

参考资料

https://www.cnblogs.com/hkgov/p/14959992.html
https://blog.csdn.net/u012375924/article/details/108832392

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go专业数据结构与算法

go语言之专业数据结构与算法 2.数组概念 3.golang实现数组结构 4.golang实现数组迭代器 5.数组栈的高级实现 6.栈模拟低级递归 7.斐波那契数列栈模拟递归 8.递归实现文件夹遍历 9.栈模拟文件递归 10.层级展示文件夹 11.数组队列的实现 12.队列实现遍历文件夹 13.循环队列 14.链…

Java - 异常处理

异常介绍 对异常进行捕获,保证程序可以继续运行,提升程序的健壮性。 执行过程中所发生的异常时间可分为两大类: Error: Java虚拟机无法解决的严重问题。如:JVM系统内部错误,资源耗尽等严重情况。比如&…

Mars3d模型塌陷地底不显示的解决方法

问题场景: 1.发现模型或者矢量数据在拖拽地图视角的时候会发生漂移,加载的矢量数据或模型,浏览时会在地面漂移 2.开启深度检测之后,发现模型或者矢量数据会有部分被地形遮挡,无法看到 问题原因: 1.模型或…

【设计模式】第十八章:备忘录模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章:单例模式 【设计模式】第二章:工厂模式 【设计模式】第三章:建造者模式 【设计模式】第四章:原型模式 【设计模式】第五章:适配器模式 【设计模式】第六章&…

解决Ruoyi单体版本集成Echarts多图表时在Tab模式下不展示问题

目录 背景 一、Tab拆分后无法展示 1、环境简介 2、原始报表功能说明 3、tab切分遇到的问题 二、问题分析及解决 1、问题分析 2、问题解决 3、初始化时图表渲染 4、Tab切换时重渲 总结 背景 最近在使用ruoyi的单体化版本进行Echarts多图表展示时遇到一个问题,r…

C++primer(第五版)第十一章(关联容器)

关联容器支持高效的关键字查找和访问.两个主要的关联容器是map和set(其他的都是这两个的变种). map和multimap定义在头文件map中.set和multise定义在头文件set中.无序容器定义在头文件unordered_map和unordered_set中. 11.1使用关联容器 map的元素类型为pair,包含两个部分,key…

vue循环如何动态加载本地图片

显示效果&#xff1a; 代码&#xff1a; html&#xff1a; <el-tooltip :content"setTip(item)" placement"bottom"><img :src"setSrc(item)" alt"" width"20" height"20" /> </el-tooltip> …

flask+分页查询列表显示

import pymysqlfrom flask import Flask, render_template, requestapp Flask(__name__)app.debug Trueapp.route(/) def home():return render_template(Order_page.html)#查询数据以列表的形式返回查询结果 app.route(/Order_list, methods[POST]) def Order_list():db py…

LeetCode 2532 过桥的时间

题目链接 模拟: 因为各员工搬箱子这件事相互之间没有影响, 即一个员工 i i i开始从左往右过桥时, 可以产生两个事件: l e f t T o R i g h t i leftToRight_i leftToRighti​ 分钟后桥空闲(若两岸有再等待过桥的人, 应该按规则过桥) l e f t T o R i g h t i p i c k O l d …

c++编写网络爬虫

c爬虫项目 实现图形化界面UI 安装easyX&#xff08;需要用的graphisc.h&#xff09; 我之前的文章详细写到过如何安装。是这篇文章提到的&#xff1a;传送门 easyx官网 创建图形化界面 #define WINDOW_WIDTH 482 #define WINDOW_HEIGHT 300 void initUI() {initgraph(WINDO…

python 列表推导式、元组推导式 字典推导式 、三元运算符

一、基本语法结构 列表推导式的基本语法结构为&#xff1a; [ expression for item in iterable if condition ] 其中&#xff0c;expression表示参与列表生成的表达式&#xff0c;可包含变量、函数调用等操作&#xff1b;item表示生成列表中的元素&#xff1b;iterable表示…

Kubernetes中Pod的生命周期、重启策略

Kubernetes中Pod的生命周期、重启策略 1、Pod生命周期和重启策略 Pod 在整个生命周期中被系统定义为各种状态&#xff0c;熟悉 Pod 的各种状态对于理解如何设置 Pod 的调度策略、重启策 略是很有必要的&#xff0c;Pod 的状态如表所示。 Pod的重启策略(RestartPolicy)应用于…

Vue3项目Ant-Design-Vue汉化(a-date-picker等组件)

前言 Ant-Design-Vue 组件库某些组件默认是英文显示的&#xff0c;如时间选择等组件。这些组件的显示需要用户手动去进行汉化。 官方文档对此也给出了说明及示例&#xff0c;但截止到本篇博客发布日期&#xff0c;示例与实际项目配置存在小幅度出入。我也因此踩了一些坑&…

【Linux】文件描述符(下篇)

文章目录 &#x1f4d6; 前言1. 文件描述符fd的分配规则2. 重定向的本质3. 缓冲区的理解3.1 感受缓冲区的存在&#xff1a;3.2 正式认识缓冲区&#xff1a;综合例题&#xff1a; 4. 模拟实现C语言的文件操作5. 完善之前实现的shell5.1 程序替换&#xff0c;会影响曾经子进程打开…

机器学习技术(三)——机器学习实践案例总体流程

机器学习实践案例总体流程 文章目录 机器学习实践案例总体流程一、引言二、案例1、决策树对鸢尾花分类1.数据来源2.数据导入及描述3.数据划分与特征处理4.建模预测 2、各类回归波士顿房价预测1.案例数据2.导入所需的包和数据集3.载入数据集&#xff0c;查看数据属性&#xff0c…

【动态规划算法练习】day15

文章目录 一、01背包1.题目简介2.解题思路3.代码4.运行结果 二、416. 分割等和子集1.题目简介2.解题思路3.代码4.运行结果 三、494. 目标和1.题目简介2.解题思路3.代码4.运行结果 四、1049. 最后一块石头的重量 II1.题目简介2.解题思路3.代码4.运行结果 总结 一、01背包 1.题目…

【设计模式】第十三章:模板方法模式详解及应用案例

系列文章 【设计模式】七大设计原则 【设计模式】第一章&#xff1a;单例模式 【设计模式】第二章&#xff1a;工厂模式 【设计模式】第三章&#xff1a;建造者模式 【设计模式】第四章&#xff1a;原型模式 【设计模式】第五章&#xff1a;适配器模式 【设计模式】第六章&…

20.BeautifulSoup库的安装及导入

文章目录 1.BeautifulSoup库简介2.BeautifulSoup库的安装3.BeautifulSoup和beautifulsoup4的区别4.获取网页源代码知识回顾4.1 手动获取网页的源代码4.2 requests库获取网页的源代码 5. 利用bs4库输出网页源代码6.bs4库的导入语法 1.BeautifulSoup库简介 BeautifulSoup库是Pyt…

1.监控分布式--zabbix

文章目录 监控分布式-zabbix、prometheus概念工作原理功能组件部署zabbix安装Nginx和PHP环境部署数据库编码安装zabbix编译安装zabbix server客户端安装zabbix agent服务 监控分布式-zabbix、prometheus 利用一个优秀的监控软件&#xff0c;我们可以: 通过一个友好的界面进行…