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

news2024/11/27 3:56:51

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:27


WARNING: 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_profile

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
#注意 /~/.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.coloradmin.cn/o/621002.html

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

相关文章

【Docker】2.Docker安装

文章目录 DockerDocker Official WebsiteDocker InstallDocker Change ImageDocker Change Dir Docker Docker本质其实时LXC之类的增强版,它本身不是容器,而是容器的易用工具。Docker时让容器技术普及开来的最成功的实现。它的主要目标是"Build, S…

6款AI绘画生成器,让你的创作更有灵感

人工智能绘画听起来很高深,其原理是通过集成文本、图片和其他大数据数据来生成信息库,在输入文本描述的要求后,可以找到相应的视觉元素,然后拼凑起来生成符合文本描述的图片。 本文介绍非常好用的6款AI绘画生成工具 1.即时 AI 绘…

从C语言到C++_17(list的模拟实现)list不是原生指针的迭代器

目录 1. list 的基本框架 1.1 list 的结点 1.2 list 构造函数 1.3 push_back 2. list 迭代器的实现 2.1 迭代器的构造 2.2 begin() 和 end() 2.3 重载 ! 和 * 和 2.4 遍历测试: 2.6 operator-> 2.7 operator-- 2.8 const 迭代器 3. list 的增删…

Vulnhub 靶机渗透:SICKOS: 1.2

SICKOS: 1.2 一级目录二级目录三级目录 nmap 扫描端口扫描详细扫描漏洞扫描 web渗透gobuster扫描nikto漏洞扫描思考继续 获得立足点提权总结 一级目录 二级目录 三级目录 https://www.vulnhub.com/entry/sickos-12,144/ 靶机IP:192.168.54.30 kali IP: 192.168.5…

如何修复 SSH Client_loop: send disconnect: Broken pipe Error

动动发财的小手,点个赞吧! SSH 是 Secure Shell 的缩写,是一种远程网络协议,用于通过 TCP/IP 网络安全地连接到远程设备,例如服务器和网络设备。 它是一种加密网络协议,可提供强大的加密技术和散列法来保护…

SpringSecurity多源认证之全部交给spring容器

文章目录 一. 前言二. 配置流程2.1 SecurityConfig.class2.2 JwtAuthenticationTokenFilter2.3 AuthenticationManagerProcessingFilter 疑问 一. 前言 相关文章: 认证/支付/优惠劵策略模式-security多源认证 这篇文章没有将自定义的认证管理器注入容器. spring-security2.6.…

【计算机网络详解】——运输层(学习笔记)

📖 前言:两台主机的通信,实际上两台主机中的应用进程进行通信,而在一台计算机中,用不同的端口号标识不同的应用进程。本节将介绍传输层的相关内容,包括端口号的分配方法、端口号的复用与分用、以及传输层的…

吴恩达 ChatGPT Prompt Engineering for Developers 系列课程笔记--07 Expanding

07 Expanding 本节示例如何用ChatGPT生成一封电子邮件的回复。 1) 定制化情绪 给定客户评论,我们根据评论内容和情绪产生定制的回复。下面是给定情感(positive/negative),让ChatGPT产生相应回复的prompt。 """…

Solidwoks PDM Add-ins (C#) 创建Add-ins

本主题演示如何在Microsoft Visual Studio Enterprise 中使用Visual C#创建并调试add-in。 注意: 因为 SOLIDWORKS PDM Professional无法强制重新加载在 .NET 中编写的add-in程序,则必须重新启动所有客户端计算机,以确保使用最新版本的add-i…

【建议收藏】什么是测试金字塔?如何使用测试金字塔来构建自动化测试体系?

测试金字塔 (Test Pyramid)是一套使用单元测试,集成测试和端到端测试来构建自动化测试体系的方法。 如下图所示,在金字塔的最下方是单元测试,中段是集成测试,最上方是端到端测试。单元测试实现的成本最低&…

【论文笔记】SAM3D: Zero-Shot 3D Object Detection via Segment Anything Model

原文链接:https://arxiv.org/pdf/2306.02245.pdf 1.引言 分割一切模型(SAM)作为视觉领域的基石模型,有强大的泛化性,能解决很多2D视觉问题。但是SAM是否可以适用于3D视觉任务,仍需要被探索。   目前几乎…

深蓝学院C++基础笔记 第 2 章 对象和基本类型

第 2 章 对象和基本类型 1. 从初始化/赋值语句谈起 初始化 / 赋值语句是程序中最基本的操作,其功能是将某个值与一个对象关联起来 – 值:字面值、对象(变量或常量)所表示的值…… – 标识符:变量、常量、引用…… –…

《Lua程序设计》--学习2

表 Lua语言中的表本质上是一种辅助数组(associative array),这种数组不仅可以使用数值作为索引,也可以使用字符串或其他任意类型的值作为索引(nil除外)。 Lua语言中的表要么是值要么是变量,它…

Linux进程间通信【命名管道】

✨个人主页: 北 海 🎉所属专栏: Linux学习之旅 🎃操作环境: CentOS 7.6 阿里云远程服务器 文章目录 🌇前言🏙️正文1、什么是命名管道1.1、创建及简单使用1.2、命名管道的工作原理1.3、命名管道…

Shell脚本攻略:文本三剑客之awk

目录 一、理论 1.awk原理 2.awk打印 3.awk条件判断 4.awk数组与循环 5.awk函数 6.常用命令 二、实验 1.统计磁盘可用容量 2.统计/etc下文件总大小 3.CPU使用率 4.统计内存 5.监控硬盘 一、理论 1.awk原理 (1)概念 awk由 Aho,W…

PriorityBlockingQueue的介绍及方法内部实现

SynchronousQueue的介绍 SynchronousQueue是一个优先级队列,不满足先进先出FIFO的概念。 会将插入的数据进行排序,输出排序之后的结果(小根堆,由小变大升序) 内部实现原理介绍 SynchronousQueue是基于二叉堆结构实现…

Linux——多线程

Linux多线程 多线程进程内进行资源划分什么是线程进一步理解线程线程的优缺点Linux进程VS线程线程的异常 创建线程两个的接口线程的控制线程的创建线程的终止线程的等待线程取消C的线程库线程的分离如何理解每个线程都有自己独立的栈结构 封装线程接口 多线程 进程内进行资源划…

Java代码块和属性的赋值顺序

代码块 类的成员之四:代码块(初始化块)(重要性较属性、方法、构造器差一些) 1.代码块的作用:用来初始化类、对象的信息 2.分类:代码块要是使用修饰符,只能使用static 分类:静态代码块 vs 非静态…

nacos升级到2.0.3(单机模式)

前提&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明 Spring Cloud AlibabaSpring CloudSpring BootNacos2.2.7.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE2.0.3 一、pom.xml文件 <parent><groupId>org.springframework.boot&…

网工内推 | 高级网工专场,上市公司,3年经验以上,HCIE证书优先

01 名创优品&#xff08;广州&#xff09;有限责任公司 &#x1f537;招聘岗位&#xff1a;高级网络工程师 &#x1f537;职责描述&#xff1a; 1、负责集团总部有线&#xff06;无线、公有云、仓库的网络规划建设与运维&#xff1b; 2、负责公有云的网络台日常上线部署、规划…