mac docker桌面版k8s启动成功却无法访问

news/2024/11/29 12:48:55/

1. 问题复现

在mac使用docker桌面版搭建k8s 成功 但是 kubectl 控制k8s集群命令却无法使用

在这里插入图片描述

报错信息如下
使用登录的用户访问

 ~  kubectl version                                       
W0607 14:32:39.410809   54201 loader.go:221] Config not found: /etc/kubernetes/admin.conf
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b5237ccd9c0f1d600d3072634ca66cefdf272f", GitTreeState:"clean", BuildDate:"2021-08-04T18:03:20Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"darwin/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?

当使用root用户 在执行该命令时又报另一个错误

root@MacBook-Pro ~ # kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b5237ccd9c0f1d600d3072634ca66cefdf272f", GitTreeState:"clean", BuildDate:"2021-08-04T18:03:20Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"darwin/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?

2. 定位

既然提示没有 /etc/kubernetes/admin.conf 那我们从用户目录下复制一个
集群搭建完成后 用户目录会有个.kube文件夹 里面包含个config文件

cp  ~/.kube/config /etc/kubernetes/admin.conf

复制完在执行 kubectl version 发现显示正常了

 ~  kubectl version                    ok  at docker-desktop kube  at 16:30:27WARNING: This version information is deprecated and will be replaced with the output from kubectl version --short.  Use --output=yaml|json to get the full version.
Client Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.9", GitCommit:"a1a87a0a2bcd605820920c6b0e618a8ab7d117d4", GitTreeState:"clean", BuildDate:"2023-04-12T12:16:51Z", GoVersion:"go1.19.8", Compiler:"gc", Platform:"darwin/amd64"}
Kustomize Version: v4.5.7
Server Version: version.Info{Major:"1", Minor:"25", GitVersion:"v1.25.9", GitCommit:"a1a87a0a2bcd605820920c6b0e618a8ab7d117d4", GitTreeState:"clean", BuildDate:"2023-04-12T12:08:36Z", GoVersion:"go1.19.8", Compiler:"gc", Platform:"linux/amd64"}

此处有个警告 提示使用 kubectl version --output=json

再查看下pods

kubectl -n kube-system get node    NAME             STATUS   ROLES           AGE    VERSION
docker-desktop   Ready    control-plane   133m   v1.25.9

显示也是成功的。
这个时候我们再来看下 kubeconfig的路径在环境变量里是在哪里
执行一下命令

echo $KUBECONFIG                                           ok  at 17:09:28
/etc/kubernetes/admin.conf

那这个问题就明确了 环境变量中配置的kubeconfig路径在/etc/kubernetes/admin.conf
目录下 而我们生成的配置在用户目录下的.kube的文件夹中 寻找不到配置 就报错了

具体的配置是在root用户下的bash_profile 文件中

root@MacBook-Pro leon # cd ~
root@MacBook-Pro ~ # vim .bash_profile
#jdk
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar
export KUBECONFIG=/etc/kubernetes/admin.conf

可以看到存在KUBECONFIG此配置

3. 解决方案

  • 修改该配置的值
root@MacBook-Pro leon # cd ~
root@MacBook-Pro ~ # vim .bash_profileexport JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar
#注意 /~/.kube/config 这个config是个文件 而不是一个目录 但配置到这里会被识别为一个目录 故需要复制一个
export KUBECONFIG=/~/.kube/config

故 需要复制一个

cp /~/.kube/config /~/.kube/admin.conf

最后完整的配置如下

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar
export KUBECONFIG=/~/.kube/admin.conf
  • 在/etc/kubernetes/ 下 新建 admin.conf 配置 直接将用户下配置 复制到此目录
cp /~/.kube/config /etc/kubernetes/admin.conf
  • 修改 /etc/profile 向其中增加配置 全局配置中
#复制用户目录下的配置到指定目录 例如/etc/kubernetes/admin.conf 
cp /~/.kube/config /etc/kubernetes/admin.conf
vim /etc/profile
# /etc/kubernetes/admin.conf 修改为如上指定的目录
export KUBECONFIG=/etc/kubernetes/admin.conf
#vim 保存
#使配置生效
source /etc/profile

在开头的问题描述中 使用 root用户 执行 kubetctl version 命令 并没有提示配置文件不存在 直接报错 k8s未启动
在root 用户下 执行 echo $KUBECONFIG 命令输出为空

  • 当使用了zsh 时也可以将此配置放到 /~/.zshrc 文件中 表示用户级别的配置 但是root用户看不到此配置
  • 如果希望root 登录就看到此配置 可以将该配置放到 /var/root/.zshrc 配置中 表示zsh的root用户的配置
  • 如果希望 全局配置 那么可以放到 /etc/zshrc 下进行配置
    注意root 登录下的配置 /var/root/.zshrc 优先级 大于 /etc/zshrc (可自行测试)

4.方案延伸

以上是环境变量中kube配置 下 不存在的问题 以及一些解决办法
但是 k8s启动成功却无法访问 可能还有其他的原因

  • k8s集群中的系统pods报错 入 apiserver / etcd 等 需要看具体日志具体排查
  • k8s的client (kubectl)和 k8s server 版本不匹配 或者版本相差过大

http://www.ppmy.cn/news/265970.html

相关文章

《设计模式》之命令模式

文章目录 1、定义2、动机3、类结构4、优缺点5、总结6、代码实现(C) 1、定义 将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 2、动机 在软件构建过程中&#xff0c…

工程训练 -江苏海洋大学-mooc-最终答案

这不点赞评论一下嘛???呜呜呜 判断题(共217道) 1.舂实模样周围及砂箱边或狭窄部分的型砂,通常采用砂舂的平头端舂砂。 2.造型时,分型面上通常使用的是面砂,覆盖模样的则使用背砂。 3…

面试-RabbitMQ常见面试问题

1.什么是RabbitMQ? RabbitMQ是一款基于AMQP协议的消息中间件,消费方并不需要确保提供方的存在,实现服务之间的高度解耦。 基本组成有: Queue:消息队列,存储消息,消息送达队列后转发给指定的消费方Exchange:消息队列交…

讯飞智能录音笔SR502内存升级,实力更强大

作为一款风靡高端职场的智能录音笔产品,讯飞智能录音笔SR502可以说是在极短的时间内就占据了相当可观的市场份额。不仅是近几年录音笔品类的销冠,还获得了德国iF设计奖、中国设计智造奖、金芦苇优秀奖等多项殊荣。对于当下很多职场人士来说,讯…

讯飞智能录音笔SR702让工作体验更佳

随着生产工具的不断进化,人们的工作体验也在不断提升。而对于现代的职场人来说,讯飞智能录音笔SR702的强势登场无疑是使工作体验再度发生变化的一次绝好的契机。 更高端的体验,是讯飞智能录音笔SR702的发力点之一。为了给用户营造更加高质量…

行业认可 | 悬镜云鲨RASP荣膺网络安全“金帽子”年度优秀云安全产品

近日,信息安全领域专业媒体嘶吼于2021网络安全行业生态大会公布了网络安全“金帽子”年度评选结果,悬镜安全旗下云鲨RASP自适应威胁免疫平台凭借领先的技术优势与广阔的市场前景,成功入围年度优秀云安全产品,获同类产品投票排名第…

搜狗听写,现在是录音笔硬件的“操作系统”了

郭一璞 发自 大望路 量子位 报道 | 公众号 QbitAI Google把安卓做成了操作系统,让其他手机厂商也能用这样的系统,融入安卓的生态。 微软把Windows做成了操作系统,让各种PC厂商都能接入,融入Windows生态。 搜狗也要这样做了。 在手…

RSAC简介 RSAC 2020 最热门的36款网络安全产品

美国时间2月24日至28日,RSA Conference 2020(RSAC2020)信息安全大会将在旧金山Moscone Center召开。此次会议参会人数预计达5万,参展商达700多家,大会包含:研讨会、沙箱创新大赛、培训和教程、主题演讲、课堂等多种不同的活动。 …