这一篇能节省你在 kubeadm init 时遇到问题的排错时间⌚️。
整合了网上大佬的方案🧍♂️和官方建议⚠️。
个人被这个问题折磨了好久😭,希望总结出来能帮助到大家~
目录
解决: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
指定kube-apiserver广播给其他组件的IP地址。
这个参数需要设置为主节点的IP地址,以确保其他节点可以访问到kube-apiserver
即:advertiseAddress: 1.2.3.4 -> advertiseAddress: [宿主机ip(内网)]
指定安装镜像的仓库源
建议使用国内镜像如阿里云-> imageRepository: registry.aliyuncs.com/google_containers
可以通过ping仓库源看看宿主机能否正常访问
高版本(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
初始化时指定的版本跟安装的版本不一致
# kubeadm version 查看的版本为1.26.3,
kubeadm version
# kubeadm init 指定的kubernetes版本为不兼容版本
kubeadm init --kubernetes-version=1.22
这个很好解决,卸载安装的高版本或者指定版本为兼容版本
官网版本支持:
Version Skew Policy | Kubernetes
参考上文提到的初始化出来的配置文件对应版本也很有
跟这个类似还有一个 apiKeys不兼容问题,也直接参考初始化出来的配置文件的apiKeys。
拉取registry.k8s.io仓库的镜像源失败
配置国内镜像源
imageRepository: registry.k8s.io -> imageRepository: registry.aliyuncs.com/google_containers
--image-repository=registry.aliyuncs.com/google_containers
这个问题导致的原因有很多
参考我的这一篇文章,有超级详细的排查流程:【(Kubernetes)1.26.3+containerd/1.20.x + docker:container runtime is not running问题详细排查】_mikasa_akm的博客-CSDN博客
问题:kubeadm init初始化集群操作失败的环境和配置遗留
重置节点:kubeadm reset
详细错误信息参考
[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 conditionThis 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进行排查
如果换成内网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-urls是http://localhost:2379,只监听本地回环地址,不允许远程连接。为了在集群外访问 etcd,需要修改这个参数。常见的设置是使用内部 IP 地址或者主机名(检查这个是不是被换成你的公网ip了,如果是则修改)
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的的问题,长路漫漫,后续还有很长的路要走!
建议就是要
这篇文章希望能帮到大家,有问题欢迎大家评论区一起讨论一起解决!
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po