kubernetes新版本使用kubeadm init的超全问题解决和建议

这篇具有很好参考价值的文章主要介绍了kubernetes新版本使用kubeadm init的超全问题解决和建议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这一篇能节省你在 kubeadm init 时遇到问题的排错时间⌚️。

整合了网上大佬的方案🧍‍♂️和官方建议⚠️。

个人被这个问题折磨了好久😭,希望总结出来能帮助到大家~

目录

自定义配置文件初始化的建议

关注配置: 

advertiseAddress

imageRepository

nodeRegistration.criSocket

问题解决this version of kubeadm only supports deploying clusters with the control plane version >= 1.26.3. Current version: v1.22

问题解决failed to pull image registry.k8s.io/kube-apiserver:v1.26.3

问题解决container runtime is not running

问题解决 error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR Port-6443]

问题解决[kubelet-check] Initial timeout of 40s passed

        参考资料:

        总结

自定义配置文件初始化的建议

生成当前版本的初始化配置文件到 /etc/kubernetes 目录下

kubeadm config print init-defaults > /etc/kubernetes/init-default.yaml

关注配置: 

advertiseAddress

指定kube-apiserver广播给其他组件的IP地址。

这个参数需要设置为主节点的IP地址,以确保其他节点可以访问到kube-apiserver

即:advertiseAddress: 1.2.3.4 -> advertiseAddress: [宿主机ip(内网)]

imageRepository

指定安装镜像的仓库源

建议使用国内镜像如阿里云-> imageRepository: registry.aliyuncs.com/google_containers

可以通过ping仓库源看看宿主机能否正常访问

nodeRegistration.criSocket

高版本(k8s 1.24+)使用非默认(containerd)容器运行时要修改socket位置

低版本无需关注

官网:Container Runtimes | Kubernetes

nodeRegistration:
  criSocket: [Path to Unix domain socket]

不同运行时默认到Unix域套接字的路径
containerd    unix:///var/run/containerd/containerd.sock
CRI-O    unix:///var/run/crio/crio.sock
Docker Engine (using cri-dockerd)    unix:///var/run/cri-dockerd.sock

this version of kubeadm only supports deploying clusters with the control plane version >= 1.26.3. Current version: v1.22

初始化时指定的版本跟安装的版本不一致

# kubeadm version 查看的版本为1.26.3,
kubeadm version
# kubeadm init 指定的kubernetes版本为不兼容版本
kubeadm init --kubernetes-version=1.22

这个很好解决,卸载安装的高版本或者指定版本为兼容版本

官网版本支持:

Version Skew Policy | Kubernetes

参考上文提到的初始化出来的配置文件对应版本也很有

跟这个类似还有一个 apiKeys不兼容问题,也直接参考初始化出来的配置文件的apiKeys。

failed to pull image registry.k8s.io/kube-apiserver:v1.26.3

问题:

拉取registry.k8s.io仓库的镜像源失败

解决:

配置国内镜像源

配置文件修改:

  • imageRepository: registry.k8s.io -> imageRepository: registry.aliyuncs.com/google_containers

启动命令加上:

 --image-repository=registry.aliyuncs.com/google_containers

container runtime is not running

这个问题导致的原因有很多

参考我的这一篇文章,有超级详细的排查流程:【(Kubernetes)1.26.3+containerd/1.20.x + docker:container runtime is not running问题详细排查】_mikasa_akm的博客-CSDN博客

error execution phase preflight: [preflight] Some fatal errors occurred: [ERROR Port-6443]:

问题:

kubeadm init初始化集群操作失败的环境和配置遗留

解决:

重置节点:kubeadm reset

[kubelet-check] Initial timeout of 40s passed

详细错误信息参考

[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory “/etc/kubernetes/manifests”. This can take up to 4m0s
[kubelet-check] Initial timeout of 40s passed.

Unfortunately, an error has occurred:
timed out waiting for the condition

This error is likely caused by:
- The kubelet is not running
- The kubelet is unhealthy due to a misconfiguration of the node in some way (required cgroups disabled)

首先建议查看日志:

journalctl -xeu kubelet

每行都扫一眼:留意 err、failed、cannot connet 等关键字获取有用信息进行问题定位

常见问题:

advertiseAddress IP 配置有误

首先将 advertiseAddress指定为你宿主机的内网ip进行排查

如果换成内网IP可以成功则进行下一步:

        1.先查看当前服务器公网IP是否可达(有些云服务器没有公网ip的)

        2.如果公网可达但因为换成了公网导致初始化失败

公网IP可达但初始化仍然失败则:

        查看 kubeadm 生成的 etcd 配置文件:cat /etc/kubernetes/manifests/etcd.yaml

        关注--listen-peer-urls和--listen-client-urls后的地址是否正确

        --listen-peer-urls etcd节点监听对等节点请求的URL地址列表。

   --listen-client-urls 是 etcd 服务监听客户端请求的地址。

默认情况下,--listen-client-urlshttp://localhost:2379,只监听本地回环地址,不允许远程连接。为了在集群外访问 etcd,需要修改这个参数。常见的设置是使用内部 IP 地址或者主机名(检查这个是不是被换成你的公网ip了,如果是则修改)

Failed to create sandbox for pod :拉取 registry.k8s.io/pause:3.6 镜像失败

journalctl -xeu kubelet查看的日志报错信息

Failed to create sandbox for pod” 
err="rpc error: code = Unknown desc = 
failed to get sandbox image “registry.k8s.io/pause:3.6”: 
failed to pull image “registry.k8s.io/pause:3.6

问题:

拉取 registry.k8s.io/pause:3.6 镜像失败 导致sandbox 创建不了而报错 

解决

重新配置 sandbox 镜像 仓库,将默认的 registry.k8s.io/pause:3.6 修改成 “k8simage/pause:3.6”

### 生成 containerd 的默认配置文件
containerd config default > /etc/containerd/config.toml 
### 查看 sandbox 的默认镜像仓库在文件中的第几行 
cat /etc/containerd/config.toml | grep -n "sandbox_image"  
### 使用 vim 编辑器 定位到 sandbox_image,将 仓库地址修改成 k8simage/pause:3.6
vim /etc/containerd/config.toml  
sandbox_image = "k8simage/pause:3.6"  
### 重启 containerd 服务  
systemctl daemon-reload  
systemctl restart containerd.service 

参考:

Creating a cluster with kubeadm | Kubernetes

Kubernetes 入门 篇 Master 节点的安装与部署_Robpubking的博客-CSDN博客

解决阿里云ECS下kubeadm部署k8s无法指定公网IP - osc_tc7vil4d的个人空间 - OSCHINA - 中文开源技术交流社区

kubeadm init初始化k8s集群时报错,[kubelet-check] Initial timeout of 40s passed._k8s集群初始化失败_「已注销」的博客-CSDN博客

总结

真的使用新版本超级超级麻烦,不停试错,找论坛,查文档。弄了几天时间才把问题解决 kubeadm init的的问题,长路漫漫,后续还有很长的路要走!

建议就是要

  • 优先考虑 机器适配和版本兼容问题
  • 优先考虑 网络问题:宿主机能否ping通所需镜像包的镜像仓库
  • 多看官方文档!英语不好就翻译

这篇文章希望能帮到大家,有问题欢迎大家评论区一起讨论一起解决!文章来源地址https://www.toymoban.com/news/detail-402470.html

到了这里,关于kubernetes新版本使用kubeadm init的超全问题解决和建议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubeadm 安装 Kubernetes:kubelet 状态失败的解决方案

    Kubeadm 安装 Kubernetes:kubelet 状态失败的解决方案 在使用 kubeadm 安装 Kubernetes 集群时,遇到 kubelet 状态失败的问题是比较常见的。这个问题主要出现在 kubelet 无法正常启动或者无法连接到控制平面节点上。本文将介绍一些常见的原因和解决方案,并提供相应的源代码。 首先,

    2024年02月07日
    浏览(31)
  • 【kubernetes系列】kubernetes之使用kubeadm搭建高可用集群

    目前来说,kubernetes集群搭建的方式很多,选择一个稳定的适合自己的很重要。目前使用kubeadm方式搭建k8s集群还是很常见的,使用kubeadm搭建可以很简单差不多两条命令就行,也可以稍微复杂一点做一些基础优化,本文将分享一下使用kubeadm搭建集群并做了一定的优化。 本环境

    2024年02月15日
    浏览(26)
  • 使用kubeadm部署kubernetes 1.24.3

     节点信息:  这里使用containerd作为运行时,部署可参照 https://blog.csdn.net/weixin_46476452/article/details/127670046 目录 一、系统环境初始化 二、配置apt源、下载kubeadm 三、安装cni 四、初始化kubernetes 五、配置节点认证,加入集群 六、部署calico网络插件 七、验证 八、报错处理  我系

    2024年02月13日
    浏览(28)
  • 【kubernetes】Debian使用Kubeadm部署Kubernetes失败:Connection Refused

    这篇文章也可以在我的博客中查看 今天废话不多说直接解决一个阴间问题 在部署kubernetes后(执行完 kubeadm init 后),执行任何 kubectl 命令,都会报以下错误: 此后执行 kubectl get pods -A 你会看到一些容器在无规律地被摧毁 在过一段时间后, Api-server 直接开摆,你无法再连接上

    2024年02月06日
    浏览(30)
  • 使用 kubeadm 部署 kubernetes 1.27.1 版本

    目录 前言 一、搭建前的准备 1. 搭建k8s的平台规划 2. 服务器硬件配置要求 3. 搭建部署的方式 二、搭建流程 1. kubeadm搭建方式 a. 准备工作,系统初始化 c. 设置一下ipv4,否则会失败(此处为坑,不设置无法初始化成功) d. 安装containerd  e. 安装kubectl、kubelet、kubeadm  f. master节点

    2024年02月06日
    浏览(25)
  • 涨薪5k,100多天从功能测试进阶自动化测试,我整理的超全学习指南

    学渣一枚,2017年6月某大专学校毕业,从事功能测试已经4年,最初毕业是从事了一份销售的工作,工资当时好像是3k+,可能也是我个人的原因不适合销售,后来在朋友的介绍下转行到了测试行业,转行的经历没有什么曲折,顺其自然的就入行测试了。但是由于一直没有提升自

    2023年04月25日
    浏览(28)
  • 手动拉取 Kubernetes kubeadm 使用的容器镜像

    使用kubeadmin 设置 Kubernetes 集群时,会使用一个 init 命令选项来设置 Kubernetes 控制平面。Kubernetes 有许多将在引导集群时使用的容器镜像。 在互联网访问不可靠的环境中,或者当您使用代理服务器时互联网访问受限,或者如果您的 Kubernetes 节点根本没有互联网访问权限,预拉要

    2024年02月13日
    浏览(30)
  • 使用kubeadm安装和设置Kubernetes(k8s)

    kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 这个工具能通过两条指令完成一个kubernetes集群的部署: 使用kubeadm方式搭建K8s集群主要分为以下几步 准备三台虚拟机,同时安装操作系统CentOS 7.x 对三个安装之后的操作系统进行初始化操作 在三个节点安装 dock

    2024年02月12日
    浏览(33)
  • Kubernetes技术--使用kubeadm快速部署一个K8s集群

    这里我们配置一个 单master集群 。( 一个Master节点,多个Node节点 ) 1.硬件环境准备 一台或多台机器,操作系统 CentOS7.x-86_x64 。这里我们使用安装了CentOS7的三台虚拟机 硬件配置 : 2GB或更多RAM , 2个CPU或更多CPU , 硬盘30GB或更多 2.主机名称和IP地址规划 3. 初始化准备工作 (1).关

    2024年02月10日
    浏览(35)
  • centos安装部署Kubernetes(k8s)步骤使用kubeadm方式

    机器地址: 192.168.0.35 k8s-master 192.168.0.39 k8s-node1 192.168.0.116 k8s-node2 修改每台机器的名字 关闭防火墙和selinux 临时关闭selinux: 永久关闭: 修改selinux为disabled或者permissive 重启生效 配置本地解析 确保每个节点MAC地址和 product_uuid 的唯一性 同步时间 如果各机器上时间都没有问题

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包